UiCanvasNotificationLuaBus.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 "UiCanvasNotificationLuaBus.h"
  9. #include <LyShine/Bus/UiElementBus.h>
  10. #include <AzCore/Component/ComponentApplicationBus.h>
  11. #include <AzCore/Serialization/SerializeContext.h>
  12. #include <AzCore/Script/ScriptContextAttributes.h>
  13. #include <AzCore/RTTI/BehaviorContext.h>
  14. namespace AZ
  15. {
  16. AZ_TYPE_INFO_SPECIALIZE(UiCanvasNotificationLuaProxy, "{9AD2B735-23AA-44F8-A51F-5F9A6BA25224}");
  17. }
  18. // BehaviorContext UiCanvasNotificationLuaBus forwarder
  19. class BehaviorUiCanvasNotificationLuaBusHandler
  20. : public UiCanvasNotificationLuaBus::Handler
  21. , public AZ::BehaviorEBusHandler
  22. {
  23. public:
  24. AZ_EBUS_BEHAVIOR_BINDER(BehaviorUiCanvasNotificationLuaBusHandler, "{452E5C9A-CFEA-4F91-A6E8-CF427F8D56EF}", AZ::SystemAllocator, OnAction);
  25. void OnAction(AZ::EntityId entityId, const char* actionName) override
  26. {
  27. Call(FN_OnAction, entityId, actionName);
  28. }
  29. };
  30. ////////////////////////////////////////////////////////////////////////////////////////////////////
  31. // PUBLIC MEMBER FUNCTIONS
  32. ////////////////////////////////////////////////////////////////////////////////////////////////////
  33. ////////////////////////////////////////////////////////////////////////////////////////////////////
  34. UiCanvasNotificationLuaProxy::UiCanvasNotificationLuaProxy()
  35. {
  36. }
  37. ////////////////////////////////////////////////////////////////////////////////////////////////////
  38. UiCanvasNotificationLuaProxy::~UiCanvasNotificationLuaProxy()
  39. {
  40. }
  41. ////////////////////////////////////////////////////////////////////////////////////////////////////
  42. void UiCanvasNotificationLuaProxy::OnAction(AZ::EntityId entityId, const LyShine::ActionName& actionName)
  43. {
  44. // Forward the entity's UiCanvasNotification OnAction event to the Lua-wrapped bus (this
  45. // will execute the Lua script's OnAction).
  46. UiCanvasNotificationLuaBus::Event(m_targetEntity, &UiCanvasNotificationLuaBus::Events::OnAction, entityId, actionName.c_str());
  47. }
  48. ////////////////////////////////////////////////////////////////////////////////////////////////////
  49. void UiCanvasNotificationLuaProxy::BusConnect(AZ::EntityId entityId)
  50. {
  51. CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_WARNING,
  52. "UiCanvasNotificationLuaProxy:BusConnect is deprecated. Please use the UiCanvasNotificationBus directly instead\n");
  53. AZ::Entity* canvasEntity = nullptr;
  54. AZ::ComponentApplicationBus::BroadcastResult(canvasEntity, &AZ::ComponentApplicationBus::Events::FindEntity, entityId);
  55. if (canvasEntity)
  56. {
  57. m_targetEntity = entityId;
  58. // This helper component will receive the OnAction broadcast for the entity ID
  59. // on its UiCanvasNotificationBus. Then, the OnAction will be forwarded to the
  60. // Lua-wrapped bus, and ultimately end up calling the Lua script.
  61. UiCanvasNotificationBus::Handler::BusConnect(m_targetEntity);
  62. }
  63. else
  64. {
  65. CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_WARNING, "UiCanvasNotificationLuaProxy:BusConnect: Canvas entity not found by ID\n");
  66. }
  67. }
  68. ////////////////////////////////////////////////////////////////////////////////////////////////////
  69. // PUBLIC STATIC MEMBER FUNCTIONS
  70. ////////////////////////////////////////////////////////////////////////////////////////////////////
  71. void UiCanvasNotificationLuaProxy::Reflect(AZ::ReflectContext* context)
  72. {
  73. AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);
  74. if (behaviorContext)
  75. {
  76. behaviorContext->EBus<UiCanvasNotificationLuaBus>("UiCanvasNotificationLuaBus")
  77. ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All)
  78. ->Handler<BehaviorUiCanvasNotificationLuaBusHandler>();
  79. behaviorContext->Class<UiCanvasNotificationLuaProxy>()
  80. ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All)
  81. ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value)
  82. ->Method("BusConnect", &UiCanvasNotificationLuaProxy::BusConnect)
  83. ;
  84. }
  85. }