00001
00002
00003
00004
00005
00006 #ifndef _WORLD_H_
00007 #define _WORLD_H_
00008
00014 #include <matrix4.h>
00015 #include <irrTypes.h>
00016 #include <irrArray.h>
00017
00018 #include <btScalar.h>
00019
00020 class Object;
00021
00022 namespace irr
00023 {
00024 class IrrlichtDevice;
00025 }
00026
00027 class btVector3;
00028 class btTransform;
00029 class btQuaternion;
00030 class btConstraintSolver;
00031 class btCollisionObject;
00032 class btCollisionDispatcher;
00033 class btBroadphaseInterface;
00034 class btDiscreteDynamicsWorld;
00035 class btCollisionConfiguration;
00036
00037 class World
00038 {
00039 public:
00040 World(irr::IrrlichtDevice *d);
00041 ~World();
00042
00043 void addObject(Object *o);
00044 void removeObject(Object *o);
00045
00046 void debug();
00047 void update(irr::f32 dt);
00048
00049 bool raycast(const btVector3& org,
00050 btVector3& dst,
00051 btVector3& ort,
00052 btCollisionObject *o = 0
00053 );
00054
00055 bool raycast(const irr::core::vector3df& org,
00056 irr::core::vector3df& dst,
00057 irr::core::vector3df& ort,
00058 btCollisionObject *o = 0
00059 );
00060
00061 irr::IrrlichtDevice* getDevice() const;
00062 btDiscreteDynamicsWorld* getDynamicsWorld() const;
00063
00064 static void irrToBullet(const irr::core::matrix4& m, btTransform& t);
00065 static void bulletToIrr(const btTransform& t, irr::core::matrix4& m);
00066
00067 static void quaternionToEuler(const btQuaternion& q, btVector3& e);
00068
00069 private:
00070 irr::IrrlichtDevice *m_device;
00071
00072 btDiscreteDynamicsWorld *m_world;
00073 btConstraintSolver *m_constraint;
00074 btCollisionDispatcher *m_dispatcher;
00075 btBroadphaseInterface *m_broadphase;
00076 btCollisionConfiguration *m_configuration;
00077
00078 irr::core::array<Object*> m_objects;
00079 };
00080
00081 #endif