#ifndef _HAVOK_UTILITIES_ #define _HAVOK_UTILITIES_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static void HK_CALL errorReportFunction(const char* msg, void*) { printf("%s", msg); } /* Class HavokUtilities Author: Piotr Pluta http://piotrpluta.opol.pl June 2009 Class used to encapsulate Havok Physics data and initialize Havok engine. Only one instance is needed (refactor to singleton if desired) Interface overview: - HavokUtilities() sets default timestep and calls private initHavok() method (data initialization). - ~HavokUtilities() calls deinitHavok(). This way, if HavokUtilities object is destroyed, all resources assigned by it will be freed. - registerVisualDebugger() sets up Visual Debugger. If you want to use VD, you have to call this after creating HavokUtilities object - stepSimulation(float dt) and stepVisualDebugger(float dt) methods have to be called inside some loop. They tell the simulation and VD to step forward by delta time dt. - getWorld() returns pointer to hkpWorld (Havok world instance) - getVisualDebugger() returns pointer to hkVisualDebugger (VD instance) Usage: //Create class instance. Doing this initializes Havok automatically. HavokUtilities* havokUtilities = new HavokUtilities(); //Register Havok Visual Debugger(if needed) havokUtilities->registerVisualDebugger() //Add something to simulation here (use getWorld() to access physics world) //Step simulation and visual debugger in a loop havokUtilities->stepSimulation(timestep); havokUtilities->stepVisualDebugger(timestep); //delete HavokUtilities. All resources aquired during initialization will be released delete havokUtilities; */ class HavokUtilities { public: HavokUtilities(void); virtual ~HavokUtilities(void); void registerVisualDebugger(); void stepSimulation(float dt); void stepVisualDebugger(float dt); hkpWorld* getWorld(); hkVisualDebugger* getVisualDebugger(); private: void initHavok(); void deinitHavok(); bool m_visualDebuggerActive; hkpWorld* m_world; hkVisualDebugger* m_vdb; hkpPhysicsContext* m_context; hkJobThreadPool* m_threadPool; hkThreadMemory* m_threadMemory; hkJobQueue* m_jobQueue; char* m_stackBuffer; }; #endif