BsScriptGUIWidget.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "BsScriptGUIWidget.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsScriptField.h"
  4. #include "BsScriptClass.h"
  5. #include "BsScriptManager.h"
  6. #include "CmSceneObject.h"
  7. #include "BsGUIWidget.h"
  8. #include "BsApplication.h"
  9. #include "BsScriptComponent.h"
  10. using namespace CamelotFramework;
  11. namespace BansheeEngine
  12. {
  13. ScriptGUIWidget::ScriptGUIWidget(const HGUIWidget& widget)
  14. :mWidget(widget)
  15. {
  16. }
  17. void ScriptGUIWidget::initMetaData()
  18. {
  19. metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIWidget", &ScriptGUIWidget::initRuntimeData);
  20. ScriptManager::registerScriptType(&metaData);
  21. }
  22. void ScriptGUIWidget::initRuntimeData()
  23. {
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIWidget::internal_createInstance);
  25. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIWidget::internal_destroyInstance);
  26. }
  27. void ScriptGUIWidget::internal_createInstance(MonoObject* instance, SceneObject* sceneObject)
  28. {
  29. HGUIWidget widget = sceneObject->addComponent<GUIWidget>(gBansheeApp().getPrimaryViewport().get());
  30. sceneObject->addComponent<ScriptComponent>(instance);
  31. ScriptGUIWidget* nativeInstance = new (cm_alloc<ScriptGUIWidget>()) ScriptGUIWidget(widget);
  32. nativeInstance->createInstance(instance);
  33. metaData.thisPtrField->setValue(instance, nativeInstance);
  34. }
  35. void ScriptGUIWidget::internal_destroyInstance(ScriptGUIWidget* nativeInstance)
  36. {
  37. nativeInstance->destroyInstance();
  38. cm_delete(nativeInstance);
  39. }
  40. }