BsScriptGUI.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/GUI/BsScriptGUI.h"
  4. #include "Wrappers/GUI/BsScriptGUISkin.h"
  5. #include "Wrappers/GUI/BsScriptGUILayout.h"
  6. #include "GUI/BsGUIWidget.h"
  7. #include "Scene/BsSceneManager.h"
  8. #include "BsScriptObjectManager.h"
  9. #include "Resources/BsBuiltinResources.h"
  10. #include "BsMonoMethod.h"
  11. namespace bs
  12. {
  13. SPtr<GUIWidget> ScriptGUI::sGUIWidget;
  14. ScriptGUILayout* ScriptGUI::sPanel = nullptr;
  15. HEvent ScriptGUI::sDomainUnloadConn;
  16. HEvent ScriptGUI::sDomainLoadConn;
  17. MonoMethod* ScriptGUI::sGUIPanelMethod = nullptr;
  18. ScriptGUI::ScriptGUI(MonoObject* managedInstance)
  19. :ScriptObject(managedInstance)
  20. { }
  21. ScriptGUI::~ScriptGUI()
  22. { }
  23. void ScriptGUI::startUp()
  24. {
  25. SPtr<Camera> mainCamera = gSceneManager().getMainCamera();
  26. sGUIWidget = GUIWidget::create(mainCamera);
  27. sGUIWidget->setSkin(BuiltinResources::instance().getGUISkin());
  28. auto createPanel = [] ()
  29. {
  30. assert(sPanel == nullptr);
  31. MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(sGUIWidget->getPanel());
  32. sPanel = ScriptGUILayout::toNative(guiPanel);
  33. void* params[1];
  34. params[0] = guiPanel;
  35. sGUIPanelMethod->invoke(nullptr, params);
  36. };
  37. auto clearPanel = [] ()
  38. {
  39. sPanel = nullptr;
  40. };
  41. createPanel();
  42. sDomainLoadConn = ScriptObjectManager::instance().onRefreshDomainLoaded.connect(createPanel);
  43. sDomainUnloadConn = MonoManager::instance().onDomainUnload.connect(clearPanel);
  44. }
  45. void ScriptGUI::update()
  46. {
  47. if (sGUIWidget == nullptr)
  48. return;
  49. SPtr<Camera> mainCamera = gSceneManager().getMainCamera();
  50. if (mainCamera != sGUIWidget->getCamera())
  51. sGUIWidget->setCamera(mainCamera);
  52. sGUIWidget->_updateRT();
  53. }
  54. void ScriptGUI::shutDown()
  55. {
  56. sDomainLoadConn.disconnect();
  57. sDomainUnloadConn.disconnect();
  58. if (sPanel != nullptr)
  59. {
  60. sPanel->destroy();
  61. sPanel = nullptr;
  62. }
  63. if (sGUIWidget != nullptr)
  64. {
  65. sGUIWidget->_destroy();
  66. sGUIWidget = nullptr;
  67. }
  68. }
  69. void ScriptGUI::initRuntimeData()
  70. {
  71. sGUIPanelMethod = metaData.scriptClass->getMethod("SetPanel", 1);
  72. metaData.scriptClass->addInternalCall("Internal_SetSkin", (void*)&ScriptGUI::internal_SetSkin);
  73. }
  74. void ScriptGUI::internal_SetSkin(ScriptGUISkin* skin)
  75. {
  76. HGUISkin guiSkin;
  77. if (skin != nullptr)
  78. guiSkin = skin->getHandle();
  79. if (!guiSkin.isLoaded())
  80. guiSkin = BuiltinResources::instance().getGUISkin();
  81. if(sGUIWidget != nullptr)
  82. sGUIWidget->setSkin(guiSkin);
  83. }
  84. }