BsScriptObjectManager.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. onRefreshStarted();
  22. for (auto& scriptObject : mScriptObjects)
  23. backupData[scriptObject] = scriptObject->beginRefresh();
  24. MonoManager::instance().unloadScriptDomain();
  25. for (auto& scriptObject : mScriptObjects)
  26. assert(scriptObject->isPersistent() && "Non-persistent ScriptObject alive after domain unload.");
  27. for (auto& scriptObject : mScriptObjects)
  28. scriptObject->_clearManagedInstance();
  29. MonoManager::instance().loadScriptDomain();
  30. ScriptAssemblyManager::instance().refreshAssemblyInfo();
  31. onRefreshDomainLoaded();
  32. for (auto& scriptObject : mScriptObjects)
  33. scriptObject->_restoreManagedInstance();
  34. for (auto& scriptObject : mScriptObjects)
  35. scriptObject->endRefresh(backupData[scriptObject]);
  36. onRefreshComplete();
  37. }
  38. }