BsPhysicsManager.cpp 932 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "BsPhysicsManager.h"
  2. #include "BsDynLibManager.h"
  3. #include "BsDynLib.h"
  4. namespace BansheeEngine
  5. {
  6. PhysicsManager::PhysicsManager(const String& pluginName)
  7. :mPlugin(nullptr), mFactory(nullptr)
  8. {
  9. mPlugin = DynLibManager::instance().load(pluginName);
  10. if(mPlugin != nullptr)
  11. {
  12. typedef PhysicsFactory* (*LoadPluginFunc)();
  13. LoadPluginFunc loadPluginFunc = (LoadPluginFunc)mPlugin->getSymbol("loadPlugin");
  14. mFactory = loadPluginFunc();
  15. if (mFactory != nullptr)
  16. mFactory->startUp();
  17. }
  18. }
  19. PhysicsManager::~PhysicsManager()
  20. {
  21. if (mPlugin != nullptr)
  22. {
  23. if (mFactory != nullptr)
  24. {
  25. typedef void (*UnloadPluginFunc)(PhysicsFactory*);
  26. UnloadPluginFunc unloadPluginFunc = (UnloadPluginFunc)mPlugin->getSymbol("unloadPlugin");
  27. mFactory->shutDown();
  28. unloadPluginFunc(mFactory);
  29. }
  30. DynLibManager::instance().unload(mPlugin);
  31. }
  32. }
  33. }