BsScriptEditorUtility.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "BsScriptEditorUtility.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsEditorUtility.h"
  8. #include "BsScriptSceneObject.h"
  9. namespace BansheeEngine
  10. {
  11. ScriptEditorUtility::ScriptEditorUtility(MonoObject* instance)
  12. :ScriptObject(instance)
  13. { }
  14. void ScriptEditorUtility::initRuntimeData()
  15. {
  16. metaData.scriptClass->addInternalCall("Internal_CalculateBounds", &ScriptEditorUtility::internal_CalculateBounds);
  17. metaData.scriptClass->addInternalCall("Internal_CalculateBoundsArray", &ScriptEditorUtility::internal_CalculateBoundsArray);
  18. }
  19. static void internal_CalculateBounds(MonoObject* so, AABox* bounds);
  20. static void internal_CalculateBounds(MonoArray* objects, AABox* bounds);
  21. void ScriptEditorUtility::internal_CalculateBounds(MonoObject* so, AABox* bounds)
  22. {
  23. ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(so);
  24. if (scriptSO != nullptr)
  25. *bounds = EditorUtility::calculateBounds(static_object_cast<SceneObject>(scriptSO->getNativeHandle()));
  26. else
  27. *bounds = AABox();
  28. }
  29. void ScriptEditorUtility::internal_CalculateBoundsArray(MonoArray* objects, AABox* bounds)
  30. {
  31. Vector<HSceneObject> sceneObjects;
  32. UINT32 arrayLen = (UINT32)mono_array_length(objects);
  33. for (UINT32 i = 0; i < arrayLen; i++)
  34. {
  35. MonoObject* curObject = mono_array_get(objects, MonoObject*, i);
  36. ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(curObject);
  37. if (scriptSO != nullptr)
  38. sceneObjects.push_back(static_object_cast<SceneObject>(scriptSO->getNativeHandle()));
  39. }
  40. *bounds = EditorUtility::calculateBounds(sceneObjects);
  41. }
  42. }