Fix SpriteRender all parameters override

#2233
This commit is contained in:
Wojtek Figat
2024-08-22 13:20:53 +02:00
parent d0240a54c7
commit 3ecb7c1d81
2 changed files with 26 additions and 11 deletions

View File

@@ -18,7 +18,7 @@ SpriteRender::SpriteRender(const SpawnParams& params)
{
_quadModel = Content::LoadAsyncInternal<Model>(TEXT("Engine/Models/Quad"));
Material.Loaded.Bind<SpriteRender, &SpriteRender::OnMaterialLoaded>(this);
Image.Changed.Bind<SpriteRender, &SpriteRender::SetImage>(this);
Image.Changed.Bind<SpriteRender, &SpriteRender::SetImageParam>(this);
}
Float2 SpriteRender::GetSize() const
@@ -42,8 +42,7 @@ Color SpriteRender::GetColor() const
void SpriteRender::SetColor(const Color& value)
{
_color = value;
if (_paramColor)
_paramColor->SetValue(value);
SetColorParam();
}
SpriteHandle SpriteRender::GetSprite() const
@@ -54,7 +53,7 @@ SpriteHandle SpriteRender::GetSprite() const
void SpriteRender::SetSprite(const SpriteHandle& value)
{
_sprite = value;
SetImage();
SetImageParam();
}
void SpriteRender::OnMaterialLoaded()
@@ -66,6 +65,7 @@ void SpriteRender::OnMaterialLoaded()
_materialInstance->AddReference();
}
_materialInstance->SetBaseMaterial(Material);
_materialInstance->ResetParameters();
// Cache parameters
_paramImageMAD = _materialInstance->GetParameter(TEXT("ImageMAD"));
@@ -75,15 +75,15 @@ void SpriteRender::OnMaterialLoaded()
if (_paramImage && _paramImage->GetParameterType() != MaterialParameterType::Texture)
_paramImage = nullptr;
else if (_paramImage)
SetImage();
SetImageParam();
_paramColor = _materialInstance->GetParameter(TEXT("Color"));
if (_paramColor && _paramColor->GetParameterType() != MaterialParameterType::Color && _paramColor->GetParameterType() != MaterialParameterType::Vector4 && _paramColor->GetParameterType() != MaterialParameterType::Vector3)
_paramColor = nullptr;
else if (_paramColor)
_paramColor->SetValue(_color);
SetColorParam();
}
void SpriteRender::SetImage()
void SpriteRender::SetImageParam()
{
TextureBase* image = Image.Get();
Vector4 imageMAD(Vector2::One, Vector2::Zero);
@@ -94,9 +94,24 @@ void SpriteRender::SetImage()
imageMAD = Vector4(sprite->Area.Size, sprite->Area.Location);
}
if (_paramImage)
{
_paramImage->SetValue(image);
_paramImage->SetIsOverride(true);
}
if (_paramImageMAD)
{
_paramImageMAD->SetValue(imageMAD);
_paramImageMAD->SetIsOverride(true);
}
}
void SpriteRender::SetColorParam()
{
if (_paramColor)
{
_paramColor->SetValue(_color);
_paramColor->SetIsOverride(true);
}
}
bool SpriteRender::HasContentLoaded() const
@@ -164,9 +179,8 @@ void SpriteRender::Deserialize(DeserializeStream& stream, ISerializeModifier* mo
DESERIALIZE(DrawModes);
DESERIALIZE(SortOrder);
SetImage();
if (_paramColor)
_paramColor->SetValue(_color);
SetImageParam();
SetColorParam();
}
void SpriteRender::OnLayerChanged()