GraphContext.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. // AZ
  9. #include <AzCore/RTTI/BehaviorContext.h>
  10. #include <AzCore/Serialization/SerializeContext.h>
  11. #include <AzCore/StringFunc/StringFunc.h>
  12. #include <AzCore/std/smart_ptr/make_shared.h>
  13. // Graph Model
  14. #include <GraphModel/Model/Graph.h>
  15. #include <GraphModel/Model/GraphContext.h>
  16. #include <GraphModel/Model/Module/ModuleGraphManager.h>
  17. namespace GraphModel
  18. {
  19. void GraphContext::Reflect(AZ::ReflectContext* context)
  20. {
  21. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  22. {
  23. serializeContext->Class<GraphContext>()
  24. ->Version(0)
  25. ;
  26. serializeContext->RegisterGenericType<GraphContextPtr>();
  27. }
  28. if (auto behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
  29. {
  30. behaviorContext->Class<GraphContext>("GraphModelGraphContext")
  31. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation)
  32. ->Attribute(AZ::Script::Attributes::Category, "Editor")
  33. ->Attribute(AZ::Script::Attributes::Module, "editor.graph")
  34. ->Method("GetSystemName", &GraphContext::GetSystemName)
  35. ->Method("GetModuleFileExtension", &GraphContext::GetModuleFileExtension)
  36. //->Method("GetAllDataTypes", &GraphContext::GetAllDataTypes) // GHI-15121 Unbinding until asserts with AP behavior context reflection are resolved
  37. ->Method("GetDataTypeByEnum", static_cast<DataTypePtr (GraphContext::*)(DataType::Enum) const>(&GraphContext::GetDataType))
  38. ->Method("GetDataTypeByName", static_cast<DataTypePtr (GraphContext::*)(const AZStd::string&) const>(&GraphContext::GetDataType))
  39. ->Method("GetDataTypeByUuid", static_cast<DataTypePtr (GraphContext::*)(const AZ::Uuid&) const>(&GraphContext::GetDataType))
  40. ->Method("GetDataTypeForValue", &GraphContext::GetDataTypeForValue)
  41. ;
  42. }
  43. }
  44. GraphContext::GraphContext(const AZStd::string& systemName, const AZStd::string& moduleExtension, const DataTypeList& dataTypes)
  45. : m_systemName(systemName)
  46. , m_moduleExtension(moduleExtension)
  47. , m_dataTypes(dataTypes)
  48. {
  49. }
  50. const char* GraphContext::GetSystemName() const
  51. {
  52. return m_systemName.c_str();
  53. }
  54. const char* GraphContext::GetModuleFileExtension() const
  55. {
  56. return m_moduleExtension.c_str();
  57. }
  58. void GraphContext::CreateModuleGraphManager()
  59. {
  60. if (!m_moduleGraphManager)
  61. {
  62. m_moduleGraphManager = AZStd::make_shared<ModuleGraphManager>(shared_from_this());
  63. }
  64. }
  65. ModuleGraphManagerPtr GraphContext::GetModuleGraphManager() const
  66. {
  67. return m_moduleGraphManager;
  68. }
  69. const DataTypeList& GraphContext::GetAllDataTypes() const
  70. {
  71. return m_dataTypes;
  72. }
  73. DataTypePtr GraphContext::GetDataType(DataType::Enum typeEnum) const
  74. {
  75. for (DataTypePtr dataType : m_dataTypes)
  76. {
  77. if (dataType->GetTypeEnum() == typeEnum)
  78. {
  79. return dataType;
  80. }
  81. }
  82. return {};
  83. }
  84. DataTypePtr GraphContext::GetDataType(const AZStd::string& name) const
  85. {
  86. for (DataTypePtr dataType : m_dataTypes)
  87. {
  88. if (AZ::StringFunc::Equal(dataType->GetCppName(), name) || AZ::StringFunc::Equal(dataType->GetDisplayName(), name))
  89. {
  90. return dataType;
  91. }
  92. }
  93. return {};
  94. }
  95. DataTypePtr GraphContext::GetDataType(const AZ::Uuid& typeId) const
  96. {
  97. for (DataTypePtr dataType : m_dataTypes)
  98. {
  99. if (dataType->IsSupportedType(typeId))
  100. {
  101. return dataType;
  102. }
  103. }
  104. return {};
  105. }
  106. DataTypePtr GraphContext::GetDataTypeForValue(const AZStd::any& value) const
  107. {
  108. for (DataTypePtr dataType : m_dataTypes)
  109. {
  110. if (dataType->IsSupportedValue(value))
  111. {
  112. return dataType;
  113. }
  114. }
  115. return {};
  116. }
  117. } // namespace GraphModel