havokのquitに注意
quitで例外が出る面倒くさい。
原因は、保持すべきものを保持していなかったことが原因。
#ifndef __cHavokManager_h__ #define __cHavokManager_h__ #include "HavokHeader.h" class cHavokManager { public: cHavokManager(); ~cHavokManager(); void init(); void exit(); void addEntity(hkpEntity* entity); private: hkMallocAllocator m_MallocAllocator; hkMemoryRouter* m_MemoryRouter; hkpWorld* m_World; }; #endif // __cHavokManager_h__
#include "cHavokManager.h" /* @brief エラーコールバック */ static void HK_CALL errorReport(const char* msg, void* userContext) { using namespace std; printf("%s", msg); } cHavokManager::cHavokManager() : m_World(NULL) , m_MemoryRouter(NULL) { } cHavokManager::~cHavokManager() { } void cHavokManager::init() { m_MemoryRouter = hkMemoryInitUtil::initDefault(&m_MallocAllocator, hkMemorySystem::FrameInfo(1024*1024)); hkBaseSystem::init(m_MemoryRouter, errorReport); m_World = new hkpWorld(hkpWorldCinfo()); if(m_World) { hkpAgentRegisterUtil::registerAllAgents(m_World->getCollisionDispatcher()); } } void cHavokManager::exit() { if(m_World) { m_World->removeReference(); } hkBaseSystem::quit(); hkMemoryInitUtil::quit(); } void cHavokManager::addEntity(hkpEntity* entity) { if(entity) { if(m_World) { m_World->addEntity(entity); } } }