2
0

BsScriptPrefabUtility.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. metaData.scriptClass->addInternalCall("Internal_HasPrefabLink", &ScriptPrefabUtility::internal_hasPrefabLink);
  22. }
  23. void ScriptPrefabUtility::internal_breakPrefab(ScriptSceneObject* nativeInstance)
  24. {
  25. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  26. return;
  27. nativeInstance->getNativeSceneObject()->breakPrefabLink();
  28. }
  29. void ScriptPrefabUtility::internal_applyPrefab(ScriptSceneObject* nativeInstance)
  30. {
  31. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  32. return;
  33. String prefabLinkUUID = nativeInstance->getNativeSceneObject()->getPrefabLink();
  34. HPrefab prefab = static_resource_cast<Prefab>(gResources().loadFromUUID(prefabLinkUUID, false, false));
  35. if (prefab != nullptr)
  36. prefab->update(nativeInstance->getNativeSceneObject());
  37. gResources().save(prefab);
  38. }
  39. void ScriptPrefabUtility::internal_revertPrefab(ScriptSceneObject* nativeInstance)
  40. {
  41. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  42. return;
  43. PrefabUtility::revertToPrefab(nativeInstance->getNativeSceneObject());
  44. }
  45. bool ScriptPrefabUtility::internal_hasPrefabLink(ScriptSceneObject* nativeInstance)
  46. {
  47. if (ScriptSceneObject::checkIfDestroyed(nativeInstance))
  48. return false;
  49. return !nativeInstance->getNativeSceneObject()->getPrefabLink().empty();
  50. }
  51. }