From 3ecb7c1d81aeb74b77f2e3965ee6bf6c67c2caf2 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 22 Aug 2024 13:20:53 +0200 Subject: [PATCH] Fix SpriteRender all parameters override #2233 --- Source/Engine/UI/SpriteRender.cpp | 34 ++++++++++++++++++++++--------- Source/Engine/UI/SpriteRender.h | 3 ++- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/Source/Engine/UI/SpriteRender.cpp b/Source/Engine/UI/SpriteRender.cpp index c7b31f358..4f28551b7 100644 --- a/Source/Engine/UI/SpriteRender.cpp +++ b/Source/Engine/UI/SpriteRender.cpp @@ -18,7 +18,7 @@ SpriteRender::SpriteRender(const SpawnParams& params) { _quadModel = Content::LoadAsyncInternal(TEXT("Engine/Models/Quad")); Material.Loaded.Bind(this); - Image.Changed.Bind(this); + Image.Changed.Bind(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() diff --git a/Source/Engine/UI/SpriteRender.h b/Source/Engine/UI/SpriteRender.h index d9eb769c2..8092be8f2 100644 --- a/Source/Engine/UI/SpriteRender.h +++ b/Source/Engine/UI/SpriteRender.h @@ -92,7 +92,8 @@ public: private: void OnMaterialLoaded(); - void SetImage(); + void SetImageParam(); + void SetColorParam(); public: // [Actor]