GridComponent.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 <Components/GridComponent.h>
  10. #include <Components/GridVisualComponent.h>
  11. #include <Components/StylingComponent.h>
  12. namespace GraphCanvas
  13. {
  14. //////////////////
  15. // GridComponent
  16. //////////////////
  17. void GridComponent::Reflect(AZ::ReflectContext* context)
  18. {
  19. AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
  20. if (!serializeContext)
  21. {
  22. return;
  23. }
  24. serializeContext->Class<GridComponent, AZ::Component>()
  25. ->Version(1)
  26. ->Field("MajorPitch", &GridComponent::m_majorPitch)
  27. ->Field("MinorPitch", &GridComponent::m_minorPitch)
  28. ;
  29. AZ::EditContext* editContext = serializeContext->GetEditContext();
  30. if (!editContext)
  31. {
  32. return;
  33. }
  34. editContext->Class<GridComponent>("Grid", "The grid's properties")
  35. ->ClassElement(AZ::Edit::ClassElements::EditorData, "Class attributes for the grid")
  36. ->DataElement(AZ::Edit::UIHandlers::Default, &GridComponent::m_majorPitch, "Tooltip", "The \"major pitch\" of the grid")
  37. ->DataElement(AZ::Edit::UIHandlers::Default, &GridComponent::m_minorPitch, "Tooltip", "The \"minor pitch\" of the grid")
  38. ;
  39. }
  40. GridComponent::GridComponent()
  41. : m_majorPitch(100, 100)
  42. , m_minorPitch(20, 20)
  43. , m_minimumVisualPitch(5)
  44. {
  45. }
  46. AZ::Entity* GridComponent::CreateDefaultEntity()
  47. {
  48. // Create this Node's entity.
  49. AZ::Entity* entity = aznew AZ::Entity("Scene Grid");
  50. entity->CreateComponent<GridComponent>();
  51. entity->CreateComponent<GridVisualComponent>();
  52. entity->CreateComponent<StylingComponent>(Styling::Elements::Graph);
  53. entity->Init();
  54. entity->Activate();
  55. return entity;
  56. }
  57. void GridComponent::Activate()
  58. {
  59. SceneMemberRequestBus::Handler::BusConnect(GetEntityId());
  60. GridRequestBus::Handler::BusConnect(GetEntityId());
  61. }
  62. void GridComponent::Deactivate()
  63. {
  64. GridRequestBus::Handler::BusDisconnect();
  65. SceneMemberRequestBus::Handler::BusDisconnect();
  66. }
  67. void GridComponent::SetMajorPitch(const AZ::Vector2& pitch)
  68. {
  69. if (!pitch.IsClose(m_majorPitch))
  70. {
  71. m_majorPitch = pitch;
  72. GridNotificationBus::Event(GetEntityId(), &GridNotifications::OnMajorPitchChanged, m_majorPitch);
  73. }
  74. }
  75. AZ::Vector2 GridComponent::GetMajorPitch() const
  76. {
  77. return m_majorPitch;
  78. }
  79. void GridComponent::SetMinorPitch(const AZ::Vector2& pitch)
  80. {
  81. if (!pitch.IsClose(m_minorPitch))
  82. {
  83. m_minorPitch = pitch;
  84. GridNotificationBus::Event(GetEntityId(), &GridNotifications::OnMinorPitchChanged, m_minorPitch);
  85. }
  86. }
  87. AZ::Vector2 GridComponent::GetMinorPitch() const
  88. {
  89. return m_minorPitch;
  90. }
  91. void GridComponent::SetMinimumVisualPitch(int minimum)
  92. {
  93. if (minimum != m_minimumVisualPitch)
  94. {
  95. m_minimumVisualPitch = minimum;
  96. GridNotificationBus::Event(GetEntityId(), &GridNotifications::OnMinimumVisualPitchChanged, m_minimumVisualPitch);
  97. }
  98. }
  99. int GridComponent::GetMinimumVisualPitch() const
  100. {
  101. return m_minimumVisualPitch;
  102. }
  103. void GridComponent::SetScene(const AZ::EntityId& scene)
  104. {
  105. AZ_Assert(!m_scene.IsValid() && GetEntityId().IsValid(), "This grid is already in a scene (ID: %s)!", m_scene.ToString().data());
  106. m_scene = scene;
  107. SceneMemberNotificationBus::Event(GetEntityId(), &SceneMemberNotifications::OnSceneSet, m_scene);
  108. }
  109. void GridComponent::ClearScene(const AZ::EntityId& /*oldScene*/)
  110. {
  111. AZ_Assert(m_scene.IsValid(), "This grid (ID: %s) is not in a scene!", GetEntityId().ToString().data());
  112. AZ_Assert(GetEntityId().IsValid(), "This grid (ID: %s) doesn't have an Entity!", GetEntityId().ToString().data());
  113. if (!m_scene.IsValid() || !GetEntityId().IsValid())
  114. {
  115. return;
  116. }
  117. SceneMemberNotificationBus::Event(GetEntityId(), &SceneMemberNotifications::OnRemovedFromScene, m_scene);
  118. m_scene.SetInvalid();
  119. }
  120. void GridComponent::SignalMemberSetupComplete()
  121. {
  122. SceneMemberNotificationBus::Event(GetEntityId(), &SceneMemberNotifications::OnMemberSetupComplete);
  123. }
  124. AZ::EntityId GridComponent::GetScene() const
  125. {
  126. return m_scene;
  127. }
  128. }