1 #ifndef OPENMW_MWPHYSICS_PHYSICSSYSTEM_H
2 #define OPENMW_MWPHYSICS_PHYSICSSYSTEM_H
11 #include "../mwworld/ptr.hpp"
28 class BulletShapeManager;
37 class btCollisionWorld;
38 class btBroadphaseInterface;
39 class btDefaultCollisionConfiguration;
40 class btCollisionDispatcher;
41 class btCollisionObject;
42 class btCollisionShape;
84 void addHeightField (
const float* heights,
int x,
int y,
float triSize,
float sqrtVerts,
float minH,
float maxH,
const osg::Object* holdObject);
97 const osg::Vec3f &origin,
98 const osg::Quat &orientation,
99 float queryDistance, std::vector<MWWorld::Ptr> targets = std::vector<MWWorld::Ptr>());
118 std::vector<MWWorld::Ptr> targets = std::vector<MWWorld::Ptr>(),
192 typedef std::map<MWWorld::ConstPtr, Actor*>
ActorMap;
RayResult castRay(const osg::Vec3f &from, const osg::Vec3f &to, const MWWorld::ConstPtr &ignore=MWWorld::ConstPtr(), std::vector< MWWorld::Ptr > targets=std::vector< MWWorld::Ptr >(), int mask=CollisionType_World|CollisionType_HeightMap|CollisionType_Actor|CollisionType_Door, int group=0xff) const
Definition: physicssystem.cpp:966
std::vector< std::pair< MWWorld::Ptr, osg::Vec3f > > PtrVelocityList
Definition: physicssystem.hpp:46
void disableWater()
Definition: physicssystem.cpp:1516
Resource::ResourceSystem * mResourceSystem
Definition: physicssystem.hpp:185
void updatePtr(const MWWorld::Ptr &old, const MWWorld::Ptr &updated)
Definition: physicssystem.cpp:1230
Wrapper class that constructs and provides access to the most commonly used resource subsystems...
Definition: resourcesystem.hpp:30
std::unique_ptr< MWRender::DebugDrawer > mDebugDrawer
Definition: physicssystem.hpp:219
std::set< Object * > mAnimatedObjects
Definition: physicssystem.hpp:190
osg::ref_ptr< osg::Group > mParentNode
Definition: physicssystem.hpp:221
HeightFieldMap mHeightFields
Definition: physicssystem.hpp:196
void addActor(const MWWorld::Ptr &ptr, const std::string &mesh)
Definition: physicssystem.cpp:1335
float mWaterHeight
Definition: physicssystem.hpp:213
bool mWaterEnabled
Definition: physicssystem.hpp:214
btCollisionDispatcher * mDispatcher
Definition: physicssystem.hpp:181
float mTimeAccum
Definition: physicssystem.hpp:211
void getActorsStandingOn(const MWWorld::ConstPtr &object, std::vector< MWWorld::Ptr > &out) const
Get the handle of all actors standing on object in this frame.
Definition: physicssystem.cpp:1495
std::pair< MWWorld::Ptr, osg::Vec3f > getHitContact(const MWWorld::ConstPtr &actor, const osg::Vec3f &origin, const osg::Quat &orientation, float queryDistance, std::vector< MWWorld::Ptr > targets=std::vector< MWWorld::Ptr >())
Definition: physicssystem.cpp:847
void enableWater(float height)
Definition: physicssystem.cpp:1525
void setUnrefQueue(SceneUtil::UnrefQueue *unrefQueue)
Definition: physicssystem.cpp:745
btCollisionWorld * mCollisionWorld
Definition: physicssystem.hpp:182
bool mDebugDrawEnabled
Definition: physicssystem.hpp:198
btDefaultCollisionConfiguration * mCollisionConfiguration
Definition: physicssystem.hpp:180
const Object * getObject(const MWWorld::ConstPtr &ptr) const
Definition: physicssystem.cpp:1269
ObjectMap mObjects
Definition: physicssystem.hpp:188
PtrVelocityList mMovementQueue
Definition: physicssystem.hpp:208
ActorMap mActors
Definition: physicssystem.hpp:193
Definition: collisiontype.hpp:8
osg::ref_ptr< SceneUtil::UnrefQueue > mUnrefQueue
Definition: physicssystem.hpp:177
bool mHit
Definition: physicssystem.hpp:110
std::map< std::pair< int, int >, HeightField * > HeightFieldMap
Definition: physicssystem.hpp:195
Definition: collisiontype.hpp:11
const PtrVelocityList & applyQueuedMovement(float dt)
Apply all queued movements, then clear the list.
Definition: physicssystem.cpp:1380
void markAsNonSolid(const MWWorld::ConstPtr &ptr)
Definition: physicssystem.cpp:770
Definition: physicssystem.hpp:52
Definition: collisiontype.hpp:9
bool toggleDebugRendering()
Definition: physicssystem.cpp:755
~PhysicsSystem()
Definition: physicssystem.cpp:715
std::map< MWWorld::Ptr, MWWorld::Ptr > CollisionMap
Definition: physicssystem.hpp:202
std::unique_ptr< Resource::BulletShapeManager > mShapeManager
Definition: physicssystem.hpp:184
osg::Vec3f getHalfExtents(const MWWorld::ConstPtr &actor) const
Get physical half extents (scaled) of the given actor.
Definition: physicssystem.cpp:1075
Definition: collisiontype.hpp:10
bool isOnGround(const MWWorld::Ptr &actor)
Definition: physicssystem.cpp:1055
void updateRotation(const MWWorld::Ptr &ptr)
Definition: physicssystem.cpp:1296
void getActorsCollidingWith(const MWWorld::ConstPtr &object, std::vector< MWWorld::Ptr > &out) const
Get the handle of all actors colliding with object in this frame.
Definition: physicssystem.cpp:1510
void updatePosition(const MWWorld::Ptr &ptr)
Definition: physicssystem.cpp:1317
void clearQueuedMovement()
Clear the queued movements list without applying.
Definition: physicssystem.cpp:1374
PtrVelocityList mMovementResults
Definition: physicssystem.hpp:209
bool toggleCollisionMode()
Definition: physicssystem.cpp:1344
Pointer to a const LiveCellRef.
Definition: ptr.hpp:90
std::unique_ptr< btCollisionObject > mWaterCollisionObject
Definition: physicssystem.hpp:216
void stepSimulation(float dt)
Definition: physicssystem.cpp:1468
bool isActorCollidingWith(const MWWorld::Ptr &actor, const MWWorld::ConstPtr &object) const
Definition: physicssystem.cpp:1504
osg::Vec3f getRenderingHalfExtents(const MWWorld::ConstPtr &actor) const
Definition: physicssystem.cpp:1084
std::vector< MWWorld::Ptr > getCollisions(const MWWorld::ConstPtr &ptr, int collisionGroup, int collisionMask) const
get handles this object collides with
Definition: physicssystem.cpp:1128
osg::Vec3f traceDown(const MWWorld::Ptr &ptr, const osg::Vec3f &position, float maxHeight)
Definition: physicssystem.cpp:1145
void updateCollisionMapPtr(CollisionMap &map, const MWWorld::Ptr &old, const MWWorld::Ptr &updated)
Definition: physicssystem.cpp:1214
std::unique_ptr< btCollisionShape > mWaterCollisionShape
Definition: physicssystem.hpp:217
Definition: physicssystem.cpp:555
osg::Vec3f mHitPos
Definition: physicssystem.hpp:111
btBroadphaseInterface * mBroadphase
Definition: physicssystem.hpp:179
void removeHeightField(int x, int y)
Definition: physicssystem.cpp:1163
Actor * getActor(const MWWorld::Ptr &ptr)
Definition: physicssystem.cpp:1253
void debugDraw()
Definition: physicssystem.cpp:1479
RayResult castSphere(const osg::Vec3f &from, const osg::Vec3f &to, float radius)
Definition: physicssystem.cpp:1015
void setWaterHeight(float height)
Definition: physicssystem.cpp:1535
float mPhysicsDt
Definition: physicssystem.hpp:223
bool isActorStandingOn(const MWWorld::Ptr &actor, const MWWorld::ConstPtr &object) const
Definition: physicssystem.cpp:1485
void updateScale(const MWWorld::Ptr &ptr)
Definition: physicssystem.cpp:1277
bool isOnSolidGround(const MWWorld::Ptr &actor) const
Definition: physicssystem.cpp:779
CollisionMap mStandingCollisions
Definition: physicssystem.hpp:203
void addHeightField(const float *heights, int x, int y, float triSize, float sqrtVerts, float minH, float maxH, const osg::Object *holdObject)
Definition: physicssystem.cpp:1154
osg::Vec3f getCollisionObjectPosition(const MWWorld::ConstPtr &actor) const
Definition: physicssystem.cpp:1093
std::map< MWWorld::ConstPtr, Object * > ObjectMap
Definition: physicssystem.hpp:187
Definition: physicssystem.hpp:108
PhysicsSystem & operator=(const PhysicsSystem &)
bool getLineOfSight(const MWWorld::ConstPtr &actor1, const MWWorld::ConstPtr &actor2) const
Return true if actor1 can see actor2.
Definition: physicssystem.cpp:1039
Handles unreferencing of objects through the WorkQueue. Typical use scenario would be the main thread...
Definition: unrefqueue.hpp:24
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
PhysicsSystem(Resource::ResourceSystem *resourceSystem, osg::ref_ptr< osg::Group > parentNode)
Definition: physicssystem.cpp:680
osg::Vec3f mHitNormal
Definition: physicssystem.hpp:112
std::map< MWWorld::ConstPtr, Actor * > ActorMap
Definition: physicssystem.hpp:192
Resource::BulletShapeManager * getShapeManager()
Definition: physicssystem.cpp:750
void updateWater()
Definition: physicssystem.cpp:1544
bool canMoveToWaterSurface(const MWWorld::ConstPtr &actor, const float waterlevel)
Definition: physicssystem.cpp:1061
MWWorld::Ptr mHitObject
Definition: physicssystem.hpp:113
Definition: physicssystem.cpp:510
Definition: bulletshapemanager.hpp:25
void queueObjectMovement(const MWWorld::Ptr &ptr, const osg::Vec3f &velocity)
Definition: physicssystem.cpp:1359
void addObject(const MWWorld::Ptr &ptr, const std::string &mesh, int collisionType=CollisionType_World)
Definition: physicssystem.cpp:1174
float getHitDistance(const osg::Vec3f &point, const MWWorld::ConstPtr &target) const
Definition: physicssystem.cpp:907