BsScriptPrefabUtility.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "BsScriptPrefabUtility.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoMethod.h"
  5. #include "BsMonoUtil.h"
  6. #include "BsPrefabUtility.h"
  7. #include "BsScriptSceneObject.h"
  8. #include "BsSceneObject.h"
  9. #include "BsPrefab.h"
  10. #include "BsResources.h"
  11. namespace BansheeEngine
  12. {
  13. ScriptPrefabUtility::ScriptPrefabUtility(MonoObject* instance)
  14. :ScriptObject(instance)
  15. { }
  16. void ScriptPrefabUtility::initRuntimeData()
  17. {
  18. metaData.scriptClass->addInternalCall("Internal_BreakPrefab", &ScriptPrefabUtility::internal_breakPrefab);
  19. metaData.scriptClass->addInternalCall("Internal_ApplyPrefab", &ScriptPrefabUtility::internal_applyPrefab);
  20. metaData.scriptClass->addInternalCall("Internal_RevertPrefab", &ScriptPrefabUtility::internal_revertPrefab);
  21. }
  22. void ScriptPrefabUtility::internal_breakPrefab(ScriptSceneObject* nativeInstance)
  23. {
  24. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  25. return;
  26. nativeInstance->getNativeSceneObject()->breakPrefabLink();
  27. }
  28. void ScriptPrefabUtility::internal_applyPrefab(ScriptSceneObject* nativeInstance)
  29. {
  30. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  31. return;
  32. String prefabLinkUUID = nativeInstance->getNativeSceneObject()->getPrefabLink();
  33. HPrefab prefab = static_resource_cast<Prefab>(gResources().loadFromUUID(prefabLinkUUID, false, false));
  34. if (prefab != nullptr)
  35. prefab->update(nativeInstance->getNativeSceneObject());
  36. gResources().save(prefab);
  37. }
  38. void ScriptPrefabUtility::internal_revertPrefab(ScriptSceneObject* nativeInstance)
  39. {
  40. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  41. return;
  42. PrefabUtility::revertToPrefab(nativeInstance->getNativeSceneObject());
  43. }
  44. }