BsScriptGUIWidget.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/GUI/BsScriptGUIWidget.h"
  4. #include "Wrappers/BsScriptSceneObject.h"
  5. #include "Wrappers/GUI/BsScriptGUISkin.h"
  6. #include "Wrappers/GUI/BsScriptGUILayout.h"
  7. #include "GUI/BsGUIWidget.h"
  8. #include "Scene/BsSceneObject.h"
  9. #include "Scene/BsSceneManager.h"
  10. #include "Resources/BsBuiltinResources.h"
  11. #include "Components/BsCCamera.h"
  12. #include "BsScriptCCamera.generated.h"
  13. namespace bs
  14. {
  15. MonoField* ScriptGUIWidget::sGUIPanelField = nullptr;
  16. ScriptGUIWidget::ScriptGUIWidget(MonoObject* managedInstance)
  17. :ScriptObject(managedInstance), mGUIWidget(nullptr), mLastUpdateHash((UINT32)-1)
  18. {
  19. SPtr<Camera> mainCamera = gSceneManager().getMainCamera();
  20. mGUIWidget = GUIWidget::create(mainCamera);
  21. mGUIWidget->setSkin(BuiltinResources::instance().getGUISkin());
  22. MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mGUIWidget->getPanel());
  23. mPanel = ScriptGUILayout::toNative(guiPanel);
  24. sGUIPanelField->set(managedInstance, guiPanel);
  25. }
  26. ScriptGUIWidget::~ScriptGUIWidget()
  27. { }
  28. void ScriptGUIWidget::initRuntimeData()
  29. {
  30. sGUIPanelField = metaData.scriptClass->getField("panel");
  31. metaData.scriptClass->addInternalCall("Internal_Create", (void*)&ScriptGUIWidget::internal_Create);
  32. metaData.scriptClass->addInternalCall("Internal_UpdateTransform", (void*)&ScriptGUIWidget::internal_UpdateTransform);
  33. metaData.scriptClass->addInternalCall("Internal_UpdateMainCamera", (void*)&ScriptGUIWidget::internal_UpdateMainCamera);
  34. metaData.scriptClass->addInternalCall("Internal_SetSkin", (void*)&ScriptGUIWidget::internal_SetSkin);
  35. metaData.scriptClass->addInternalCall("Internal_SetCamera", (void*)&ScriptGUIWidget::internal_SetCamera);
  36. metaData.scriptClass->addInternalCall("Internal_SetDepth", (void*)&ScriptGUIWidget::internal_SetDepth);
  37. metaData.scriptClass->addInternalCall("Internal_GetDepth", (void*)&ScriptGUIWidget::internal_GetDepth);
  38. metaData.scriptClass->addInternalCall("Internal_Destroy", (void*)&ScriptGUIWidget::internal_Destroy);
  39. }
  40. void ScriptGUIWidget::internal_Create(MonoObject* managedInstance)
  41. {
  42. new (bs_alloc<ScriptGUIWidget>()) ScriptGUIWidget(managedInstance);
  43. }
  44. void ScriptGUIWidget::internal_UpdateTransform(ScriptGUIWidget* thisPtr, ScriptSceneObject* parent)
  45. {
  46. HSceneObject parentSO = parent->getNativeSceneObject();
  47. SPtr<GUIWidget> widget = thisPtr->getInternal();
  48. if (!parentSO.isDestroyed() && widget != nullptr)
  49. {
  50. widget->_updateTransform(parentSO);
  51. widget->_updateRT();
  52. if (parentSO->getActive() != widget->getIsActive())
  53. widget->setIsActive(parentSO->getActive());
  54. }
  55. }
  56. void ScriptGUIWidget::internal_UpdateMainCamera(ScriptGUIWidget* instance, ScriptCCamera* camera)
  57. {
  58. SPtr<GUIWidget> widget = instance->getInternal();
  59. if (widget != nullptr)
  60. {
  61. SPtr<Camera> nativeCamera;
  62. if (camera != nullptr)
  63. nativeCamera = camera->getHandle()->_getCamera();
  64. widget->setCamera(nativeCamera);
  65. }
  66. }
  67. void ScriptGUIWidget::internal_SetSkin(ScriptGUIWidget* instance, ScriptGUISkin* skin)
  68. {
  69. HGUISkin guiSkin;
  70. if (skin != nullptr)
  71. guiSkin = skin->getHandle();
  72. if (!guiSkin.isLoaded())
  73. guiSkin = BuiltinResources::instance().getGUISkin();
  74. SPtr<GUIWidget> widget = instance->getInternal();
  75. if (widget != nullptr)
  76. widget->setSkin(guiSkin);
  77. }
  78. void ScriptGUIWidget::internal_SetCamera(ScriptGUIWidget* instance, ScriptCCamera* camera)
  79. {
  80. SPtr<Camera> nativeCamera;
  81. if (camera != nullptr)
  82. nativeCamera = camera->getHandle()->_getCamera();
  83. if(nativeCamera == nullptr)
  84. nativeCamera = gSceneManager().getMainCamera();
  85. SPtr<GUIWidget> widget = instance->getInternal();
  86. if(widget != nullptr)
  87. widget->setCamera(nativeCamera);
  88. }
  89. void ScriptGUIWidget::internal_SetDepth(ScriptGUIWidget* instance, INT8 value)
  90. {
  91. instance->getInternal()->setDepth(value);
  92. }
  93. INT8 ScriptGUIWidget::internal_GetDepth(ScriptGUIWidget* instance)
  94. {
  95. return instance->getInternal()->getDepth();
  96. }
  97. void ScriptGUIWidget::internal_Destroy(ScriptGUIWidget* instance)
  98. {
  99. instance->destroy();
  100. }
  101. void ScriptGUIWidget::destroy()
  102. {
  103. if(mPanel != nullptr)
  104. {
  105. mPanel->destroy();
  106. mPanel = nullptr;
  107. }
  108. if (mGUIWidget != nullptr)
  109. {
  110. mGUIWidget->_destroy();
  111. mGUIWidget = nullptr;
  112. }
  113. }
  114. void ScriptGUIWidget::_onManagedInstanceDeleted()
  115. {
  116. destroy();
  117. ScriptObject::_onManagedInstanceDeleted();
  118. }
  119. }