| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #include "Wrappers/GUI/BsScriptGUI.h"
- #include "Wrappers/GUI/BsScriptGUISkin.h"
- #include "Wrappers/GUI/BsScriptGUILayout.h"
- #include "GUI/BsGUIWidget.h"
- #include "Scene/BsSceneManager.h"
- #include "BsScriptObjectManager.h"
- #include "Resources/BsBuiltinResources.h"
- #include "BsMonoMethod.h"
- namespace bs
- {
- SPtr<GUIWidget> ScriptGUI::sGUIWidget;
- ScriptGUILayout* ScriptGUI::sPanel = nullptr;
- HEvent ScriptGUI::sDomainUnloadConn;
- HEvent ScriptGUI::sDomainLoadConn;
- MonoMethod* ScriptGUI::sGUIPanelMethod = nullptr;
- ScriptGUI::ScriptGUI(MonoObject* managedInstance)
- :ScriptObject(managedInstance)
- { }
- ScriptGUI::~ScriptGUI()
- { }
- void ScriptGUI::startUp()
- {
- SPtr<Camera> mainCamera = gSceneManager().getMainCamera();
- sGUIWidget = GUIWidget::create(mainCamera);
- sGUIWidget->setSkin(BuiltinResources::instance().getGUISkin());
- auto createPanel = [] ()
- {
- assert(sPanel == nullptr);
- MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(sGUIWidget->getPanel());
- sPanel = ScriptGUILayout::toNative(guiPanel);
- void* params[1];
- params[0] = guiPanel;
- sGUIPanelMethod->invoke(nullptr, params);
- };
- auto clearPanel = [] ()
- {
- sPanel = nullptr;
- };
- createPanel();
- sDomainLoadConn = ScriptObjectManager::instance().onRefreshDomainLoaded.connect(createPanel);
- sDomainUnloadConn = MonoManager::instance().onDomainUnload.connect(clearPanel);
- }
- void ScriptGUI::update()
- {
- if (sGUIWidget == nullptr)
- return;
- SPtr<Camera> mainCamera = gSceneManager().getMainCamera();
- if (mainCamera != sGUIWidget->getCamera())
- sGUIWidget->setCamera(mainCamera);
- sGUIWidget->_updateRT();
- }
- void ScriptGUI::shutDown()
- {
- sDomainLoadConn.disconnect();
- sDomainUnloadConn.disconnect();
- if (sPanel != nullptr)
- {
- sPanel->destroy();
- sPanel = nullptr;
- }
- if (sGUIWidget != nullptr)
- {
- sGUIWidget->_destroy();
- sGUIWidget = nullptr;
- }
- }
- void ScriptGUI::initRuntimeData()
- {
- sGUIPanelMethod = metaData.scriptClass->getMethod("SetPanel", 1);
- metaData.scriptClass->addInternalCall("Internal_SetSkin", (void*)&ScriptGUI::internal_SetSkin);
- }
- void ScriptGUI::internal_SetSkin(ScriptGUISkin* skin)
- {
- HGUISkin guiSkin;
- if (skin != nullptr)
- guiSkin = skin->getHandle();
- if (!guiSkin.isLoaded())
- guiSkin = BuiltinResources::instance().getGUISkin();
- if(sGUIWidget != nullptr)
- sGUIWidget->setSkin(guiSkin);
- }
- }
|