00001 #ifndef PHYSICS_H_INCLUDED
00002 #define PHYSICS_H_INCLUDED
00003
00004 #include <vector>
00005 #include <btBulletDynamicsCommon.h>
00006
00007 #include "Vec3.h"
00008 #include "IShootable.h"
00009
00010
00011 class IShootable;
00012
00019 class Physics {
00020 private:
00021 btAxisSweep3* _broadphase;
00022 btSequentialImpulseConstraintSolver* _solver;
00023 btDefaultCollisionConfiguration* _collisionConfiguration;
00024 btCollisionDispatcher* _dispatcher;
00025 btDiscreteDynamicsWorld* _dynamicsWorld;
00026
00027 std::vector<IShootable*> _shootableBodies;
00028 std::vector<btRigidBody*> _nonShootableBodies;
00029 public:
00030 Physics();
00031 ~Physics();
00032 void addShootable(IShootable* shootable);
00033 void addNonShootable(btRigidBody* body);
00034 void update(const float timeStep);
00035 bool castRay(const Vec3& from, const Vec3& to, Vec3& collisionPoint, btRigidBody *ignore);
00036 IShootable* castGunRay(const Vec3& from, const Vec3& to, Vec3& collisionPoint, btRigidBody* ignore);
00037 btCollisionWorld* getWorld();
00038 bool removeShootable(IShootable* shootable);
00039 };
00040
00041 #endif