BsScriptObjectManager.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "BsScriptObjectManager.h"
  2. #include "BsScriptObject.h"
  3. #include "BsMonoManager.h"
  4. #include "BsScriptAssemblyManager.h"
  5. namespace BansheeEngine
  6. {
  7. ScriptObjectManager::ScriptObjectManager()
  8. {
  9. }
  10. void ScriptObjectManager::registerScriptObject(ScriptObjectBase* instance)
  11. {
  12. mScriptObjects.insert(instance);
  13. }
  14. void ScriptObjectManager::unregisterScriptObject(ScriptObjectBase* instance)
  15. {
  16. mScriptObjects.erase(instance);
  17. }
  18. void ScriptObjectManager::refreshAssemblies()
  19. {
  20. Map<ScriptObjectBase*, ScriptObjectBackup> backupData;
  21. for (auto& scriptObject : mScriptObjects)
  22. backupData[scriptObject] = scriptObject->beginRefresh();
  23. MonoManager::instance().unloadScriptDomain();
  24. for (auto& scriptObject : mScriptObjects)
  25. assert(scriptObject->isPersistent() && "Non-persistent ScriptObject alive after domain unload.");
  26. for (auto& scriptObject : mScriptObjects)
  27. scriptObject->_clearManagedInstance();
  28. MonoManager::instance().loadScriptDomain();
  29. ScriptAssemblyManager::instance().refreshAssemblyInfo();
  30. for (auto& scriptObject : mScriptObjects)
  31. scriptObject->_restoreManagedInstance();
  32. for (auto& scriptObject : mScriptObjects)
  33. scriptObject->endRefresh(backupData[scriptObject]);
  34. onRefreshComplete();
  35. }
  36. }