Integrating latest 47acbe8
This commit is contained in:
@@ -11,7 +11,18 @@
|
||||
*/
|
||||
|
||||
#include <AtomToolsFramework/Util/MaterialPropertyUtil.h>
|
||||
#include <AtomToolsFramework/DynamicProperty/DynamicProperty.h>
|
||||
|
||||
#include <Atom/RPI.Reflect/Image/ImageAsset.h>
|
||||
#include <Atom/RPI.Reflect/Image/StreamingImageAsset.h>
|
||||
#include <Atom/RPI.Reflect/Material/MaterialAsset.h>
|
||||
#include <Atom/RPI.Reflect/Material/MaterialTypeAsset.h>
|
||||
|
||||
#include <AzCore/Math/Color.h>
|
||||
#include <AzCore/Math/Vector2.h>
|
||||
#include <AzCore/Math/Vector3.h>
|
||||
#include <AzCore/Math/Vector4.h>
|
||||
#include <AzToolsFramework/UI/PropertyEditor/InstanceDataHierarchy.h>
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
@@ -113,4 +124,58 @@ namespace AtomToolsFramework
|
||||
propertyMetaData.m_visibility = AZ::RPI::MaterialPropertyVisibility::Enabled;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool ComparePropertyValues(const AZStd::any& valueA, const AZStd::any& valueB)
|
||||
{
|
||||
return valueA.is<T>() && valueB.is<T>() && *AZStd::any_cast<T>(&valueA) == *AZStd::any_cast<T>(&valueB);
|
||||
}
|
||||
|
||||
bool ArePropertyValuesEqual(const AZStd::any& valueA, const AZStd::any& valueB)
|
||||
{
|
||||
if (valueA.type() != valueB.type())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ComparePropertyValues<bool>(valueA, valueB) ||
|
||||
ComparePropertyValues<int32_t>(valueA, valueB) ||
|
||||
ComparePropertyValues<uint32_t>(valueA, valueB) ||
|
||||
ComparePropertyValues<float>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Vector2>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Vector3>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Vector4>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Color>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Data::AssetId>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Data::Asset<AZ::RPI::ImageAsset>>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Data::Asset<AZ::RPI::StreamingImageAsset>>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Data::Asset<AZ::RPI::MaterialAsset>>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZ::Data::Asset<AZ::RPI::MaterialTypeAsset>>(valueA, valueB) ||
|
||||
ComparePropertyValues<AZStd::string>(valueA, valueB))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const AtomToolsFramework::DynamicProperty* FindDynamicPropertyForInstanceDataNode(const AzToolsFramework::InstanceDataNode* pNode)
|
||||
{
|
||||
// Traverse up the hierarchy from the input node to search for an instance corresponding to material inspector property
|
||||
const AZ::SerializeContext::ClassElement* elementData = pNode->GetElementMetadata();
|
||||
for (const AzToolsFramework::InstanceDataNode* currentNode = pNode; currentNode; currentNode = currentNode->GetParent())
|
||||
{
|
||||
const AZ::SerializeContext* context = currentNode->GetSerializeContext();
|
||||
const AZ::SerializeContext::ClassData* classData = currentNode->GetClassMetadata();
|
||||
if (context && classData)
|
||||
{
|
||||
if (context->CanDowncast(classData->m_typeId, azrtti_typeid<AtomToolsFramework::DynamicProperty>(), classData->m_azRtti, nullptr))
|
||||
{
|
||||
return static_cast<const AtomToolsFramework::DynamicProperty*>(currentNode->FirstInstance());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
Reference in New Issue
Block a user