BsScriptObjectManager.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. onRefreshDomainLoaded();
  31. for (auto& scriptObject : mScriptObjects)
  32. scriptObject->_restoreManagedInstance();
  33. for (auto& scriptObject : mScriptObjects)
  34. scriptObject->endRefresh(backupData[scriptObject]);
  35. onRefreshComplete();
  36. }
  37. }