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

View File

@@ -92,7 +92,8 @@ public:
private: private:
void OnMaterialLoaded(); void OnMaterialLoaded();
void SetImage(); void SetImageParam();
void SetColorParam();
public: public:
// [Actor] // [Actor]