| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #include "BsScriptGUIWidget.h"
- #include "BsScriptSceneObject.h"
- #include "BsScriptGUISkin.h"
- #include "BsScriptCamera.h"
- #include "BsScriptGUILayout.h"
- #include "BsGUIWidget.h"
- #include "BsSceneObject.h"
- #include "BsSceneManager.h"
- #include "BsBuiltinResources.h"
- namespace BansheeEngine
- {
- MonoField* ScriptGUIWidget::sGUIPanelField = nullptr;
- ScriptGUIWidget::ScriptGUIWidget(MonoObject* managedInstance)
- :ScriptObject(managedInstance), mGUIWidget(nullptr), mLastUpdateHash((UINT32)-1)
- {
- CameraPtr mainCamera = gSceneManager().getMainCamera().camera;
- mGUIWidget = GUIWidget::create(mainCamera);
- mGUIWidget->setSkin(BuiltinResources::instance().getGUISkin());
- MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mGUIWidget->getPanel());
- mPanel = ScriptGUILayout::toNative(guiPanel);
- sGUIPanelField->setValue(nullptr, guiPanel);
- }
- ScriptGUIWidget::~ScriptGUIWidget()
- { }
- void ScriptGUIWidget::initRuntimeData()
- {
- sGUIPanelField = metaData.scriptClass->getField("panel");
- metaData.scriptClass->addInternalCall("Internal_Create", &ScriptGUIWidget::internal_Create);
- metaData.scriptClass->addInternalCall("Internal_UpdateTransform", &ScriptGUIWidget::internal_UpdateTransform);
- metaData.scriptClass->addInternalCall("Internal_UpdateMainCamera", &ScriptGUIWidget::internal_UpdateMainCamera);
- metaData.scriptClass->addInternalCall("Internal_SetSkin", &ScriptGUIWidget::internal_SetSkin);
- metaData.scriptClass->addInternalCall("Internal_SetCamera", &ScriptGUIWidget::internal_SetCamera);
- metaData.scriptClass->addInternalCall("Internal_Destroy", &ScriptGUIWidget::internal_Destroy);
- }
- void ScriptGUIWidget::internal_Create(MonoObject* managedInstance)
- {
- ScriptGUIWidget* nativeInstance = new (bs_alloc<ScriptGUIWidget>()) ScriptGUIWidget(managedInstance);
- }
- void ScriptGUIWidget::internal_UpdateTransform(ScriptGUIWidget* thisPtr, ScriptSceneObject* parent)
- {
- HSceneObject parentSO = parent->getNativeSceneObject();
- SPtr<GUIWidget> widget = thisPtr->getInternal();
- if (!parentSO.isDestroyed() && widget != nullptr)
- {
- widget->_updateTransform(parentSO);
- if (parentSO->getActive() != widget->getIsActive())
- widget->setIsActive(parentSO->getActive());
- }
- }
- void ScriptGUIWidget::internal_UpdateMainCamera(ScriptGUIWidget* instance, ScriptCamera* camera)
- {
- SPtr<GUIWidget> widget = instance->getInternal();
- if (widget != nullptr)
- {
- CameraPtr nativeCamera;
- if (camera != nullptr)
- nativeCamera = camera->getInternal();
- widget->setCamera(nativeCamera);
- }
- }
- void ScriptGUIWidget::internal_SetSkin(ScriptGUIWidget* instance, ScriptGUISkin* skin)
- {
- HGUISkin guiSkin;
- if (skin != nullptr)
- guiSkin = skin->getHandle();
- if (!guiSkin.isLoaded())
- guiSkin = BuiltinResources::instance().getGUISkin();
- SPtr<GUIWidget> widget = instance->getInternal();
- if (widget != nullptr)
- widget->setSkin(guiSkin);
- }
- void ScriptGUIWidget::internal_SetCamera(ScriptGUIWidget* instance, ScriptCamera* camera)
- {
- CameraPtr nativeCamera;
- if (camera != nullptr)
- nativeCamera = camera->getInternal();
- if(nativeCamera == nullptr)
- nativeCamera = gSceneManager().getMainCamera().camera;
- SPtr<GUIWidget> widget = instance->getInternal();
- if(widget != nullptr)
- widget->setCamera(nativeCamera);
- }
- void ScriptGUIWidget::internal_Destroy(ScriptGUIWidget* instance)
- {
- instance->destroy();
- }
- void ScriptGUIWidget::destroy()
- {
- if(mPanel != nullptr)
- {
- mPanel->destroy();
- mPanel = nullptr;
- }
- if (mGUIWidget != nullptr)
- {
- mGUIWidget->_destroy();
- mGUIWidget = nullptr;
- }
- }
- void ScriptGUIWidget::_onManagedInstanceDeleted()
- {
- destroy();
- ScriptObject::_onManagedInstanceDeleted();
- }
- }
|