#ifndef GAME_MWWORLD_PHYSICSSYSTEM_H #define GAME_MWWORLD_PHYSICSSYSTEM_H #include #include #include #include "ptr.hpp" #include namespace MWWorld { class PhysicsSystem { public: PhysicsSystem (OEngine::Render::OgreRenderer &_rend); ~PhysicsSystem (); std::vector< std::pair > doPhysics (float duration, const std::vector >& actors); void addObject (const std::string& handle, const std::string& mesh, const Ogre::Quaternion& rotation, float scale, const Ogre::Vector3& position); void addActor (const std::string& handle, const std::string& mesh, const Ogre::Vector3& position); void removeObject (const std::string& handle); void moveObject (const std::string& handle, const Ogre::Vector3& position); void rotateObject (const std::string& handle, const Ogre::Quaternion& rotation); void scaleObject (const std::string& handle, float scale); bool toggleCollisionMode(); std::pair getFacedHandle (MWWorld::World& world); btVector3 getRayPoint(float extent); std::vector < std::pair > getFacedObjects (); // cast ray, return true if it hit something bool castRay(const Ogre::Vector3& from, const Ogre::Vector3& to); void insertObjectPhysics(const MWWorld::Ptr& ptr, std::string model); void insertActorPhysics(const MWWorld::Ptr&, std::string model); OEngine::Physic::PhysicEngine* getEngine(); void setCurrentWater(bool hasWater, int waterHeight); private: OEngine::Render::OgreRenderer &mRender; OEngine::Physic::PhysicEngine* mEngine; bool mFreeFly; playerMove* playerphysics; PhysicsSystem (const PhysicsSystem&); PhysicsSystem& operator= (const PhysicsSystem&); }; } #endif