CustomPropertyData.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/Serialization/EditContext.h>
  9. #include <AzCore/Serialization/SerializeContext.h>
  10. #include <SceneAPI/SceneData/GraphData/CustomPropertyData.h>
  11. #include <AzCore/RTTI/BehaviorContext.h>
  12. namespace AZ::SceneData::GraphData
  13. {
  14. CustomPropertyData::CustomPropertyData(PropertyMap propertyMap)
  15. : m_propertyMap(AZStd::move(propertyMap))
  16. {
  17. }
  18. void CustomPropertyData::SetPropertyMap(const PropertyMap& propertyMap)
  19. {
  20. m_propertyMap = propertyMap;
  21. }
  22. CustomPropertyData::PropertyMap& CustomPropertyData::GetPropertyMap()
  23. {
  24. return m_propertyMap;
  25. }
  26. const CustomPropertyData::PropertyMap& CustomPropertyData::GetPropertyMap() const
  27. {
  28. return m_propertyMap;
  29. }
  30. void CustomPropertyData::GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const
  31. {
  32. for (const auto& kvp : m_propertyMap)
  33. {
  34. if (kvp.second.is<AZStd::string>())
  35. {
  36. const auto* value = AZStd::any_cast<AZStd::string>(&kvp.second);
  37. output.Write(kvp.first.c_str(), value->c_str());
  38. }
  39. else if (kvp.second.is<bool>())
  40. {
  41. const auto* value = AZStd::any_cast<bool>(&kvp.second);
  42. output.Write(kvp.first.c_str(), *value);
  43. }
  44. else if (kvp.second.is<int32_t>())
  45. {
  46. const auto* value = AZStd::any_cast<int32_t>(&kvp.second);
  47. output.Write(kvp.first.c_str(), aznumeric_cast<int64_t>(*value));
  48. }
  49. else if (kvp.second.is<uint64_t>())
  50. {
  51. const auto* value = AZStd::any_cast<uint64_t>(&kvp.second);
  52. output.Write(kvp.first.c_str(), *value);
  53. }
  54. else if (kvp.second.is<float>())
  55. {
  56. const auto* value = AZStd::any_cast<float>(&kvp.second);
  57. output.Write(kvp.first.c_str(), *value);
  58. }
  59. else if (kvp.second.is<double>())
  60. {
  61. const auto* value = AZStd::any_cast<double>(&kvp.second);
  62. output.Write(kvp.first.c_str(), *value);
  63. }
  64. }
  65. }
  66. void CustomPropertyData::Reflect(ReflectContext* context)
  67. {
  68. SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
  69. if (serializeContext)
  70. {
  71. serializeContext->Class<CustomPropertyData>()->Version(1)
  72. ->Field("propertyMap", &CustomPropertyData::m_propertyMap);
  73. }
  74. BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
  75. if (behaviorContext)
  76. {
  77. behaviorContext->Class<SceneAPI::DataTypes::ICustomPropertyData>()
  78. ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All)
  79. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  80. ->Attribute(AZ::Script::Attributes::Module, "scene");
  81. behaviorContext->Class<CustomPropertyData>()
  82. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  83. ->Attribute(AZ::Script::Attributes::Module, "scene")
  84. ->Method("GetPropertyMap", [](CustomPropertyData& self) -> const CustomPropertyData::PropertyMap&
  85. {
  86. return self.GetPropertyMap();
  87. });
  88. }
  89. }
  90. }