BsScriptEditorUtility.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include "BsScriptResource.h"
  10. #include "BsScriptResourceManager.h"
  11. #include "BsUtility.h"
  12. namespace BansheeEngine
  13. {
  14. ScriptEditorUtility::ScriptEditorUtility(MonoObject* instance)
  15. :ScriptObject(instance)
  16. { }
  17. void ScriptEditorUtility::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_CalculateBounds", &ScriptEditorUtility::internal_CalculateBounds);
  20. metaData.scriptClass->addInternalCall("Internal_CalculateBoundsArray", &ScriptEditorUtility::internal_CalculateBoundsArray);
  21. metaData.scriptClass->addInternalCall("Internal_FindDependencies", &ScriptEditorUtility::internal_FindDependencies);
  22. }
  23. void ScriptEditorUtility::internal_CalculateBounds(MonoObject* so, AABox* bounds)
  24. {
  25. ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(so);
  26. if (scriptSO != nullptr)
  27. *bounds = EditorUtility::calculateBounds(static_object_cast<SceneObject>(scriptSO->getNativeHandle()));
  28. else
  29. *bounds = AABox();
  30. }
  31. void ScriptEditorUtility::internal_CalculateBoundsArray(MonoArray* objects, AABox* bounds)
  32. {
  33. Vector<HSceneObject> sceneObjects;
  34. UINT32 arrayLen = (UINT32)mono_array_length(objects);
  35. for (UINT32 i = 0; i < arrayLen; i++)
  36. {
  37. MonoObject* curObject = mono_array_get(objects, MonoObject*, i);
  38. ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(curObject);
  39. if (scriptSO != nullptr)
  40. sceneObjects.push_back(static_object_cast<SceneObject>(scriptSO->getNativeHandle()));
  41. }
  42. *bounds = EditorUtility::calculateBounds(sceneObjects);
  43. }
  44. MonoArray* ScriptEditorUtility::internal_FindDependencies(MonoObject* resource, bool recursive)
  45. {
  46. ScriptResource* srcResource = ScriptResource::toNative(resource);
  47. if (srcResource == nullptr)
  48. {
  49. ScriptArray emptyArray = ScriptArray::create<ScriptResource>(0);
  50. return emptyArray.getInternal();
  51. }
  52. Vector<ResourceDependency> dependencies = Utility::findResourceDependencies(srcResource->getGenericHandle(), recursive);
  53. UINT32 numEntries = (UINT32)dependencies.size();
  54. ScriptArray output = ScriptArray::create<ScriptResource>(numEntries);
  55. for (UINT32 i = 0; i < numEntries; i++)
  56. {
  57. ScriptResourceBase* dependency;
  58. ScriptResourceManager::instance().getScriptResource(dependencies[i].resource, &dependency, true);
  59. output.set(i, dependency->getManagedInstance());
  60. }
  61. return output.getInternal();
  62. }
  63. }