Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2005-07-16 14:15:31 +0400
committerErwin Coumans <blender@erwincoumans.com>2005-07-16 14:15:31 +0400
commit502c34ee4971bcc7cd4cb97090f84c9235518a9b (patch)
tree66201b4bbb3f3d256f50fa6e33f15d2b2e3b92af /source/gameengine/Physics/Bullet/CcdPhysicsController.h
parentfeb4f51103a7d6d22f564510deeb53ba83eaa931 (diff)
added Bullet physics binding files
Diffstat (limited to 'source/gameengine/Physics/Bullet/CcdPhysicsController.h')
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
new file mode 100644
index 00000000000..3a8590e261c
--- /dev/null
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -0,0 +1,133 @@
+
+#ifndef BULLET2_PHYSICSCONTROLLER_H
+#define BULLET2_PHYSICSCONTROLLER_H
+
+#include "PHY_IPhysicsController.h"
+
+/// PHY_IPhysicsController is the abstract simplified Interface to a physical object.
+/// It contains the IMotionState and IDeformableMesh Interfaces.
+#include "SimdVector3.h"
+#include "SimdScalar.h"
+class CollisionShape;
+
+struct CcdConstructionInfo
+{
+ CcdConstructionInfo()
+ : m_gravity(0,0,0),
+ m_mass(0.f),
+ m_friction(0.1f),
+ m_restitution(0.1f),
+ m_linearDamping(0.1f),
+ m_angularDamping(0.1f),
+ m_MotionState(0),
+ m_collisionShape(0)
+
+ {
+ }
+ SimdVector3 m_localInertiaTensor;
+ SimdVector3 m_gravity;
+ SimdScalar m_mass;
+ SimdScalar m_friction;
+ SimdScalar m_restitution;
+
+ SimdScalar m_linearDamping;
+ SimdScalar m_angularDamping;
+ void* m_broadphaseHandle;
+ class PHY_IMotionState* m_MotionState;
+
+ CollisionShape* m_collisionShape;
+
+};
+
+
+class RigidBody;
+
+///CcdPhysicsController is a physics object that supports continuous collision detection and time of impact based physics resolution.
+class CcdPhysicsController : public PHY_IPhysicsController
+{
+ RigidBody* m_body;
+ class PHY_IMotionState* m_MotionState;
+ CollisionShape* m_collisionShape;
+
+ int m_sleepingCounter;
+ public:
+
+ int m_collisionDelay;
+
+ SimdScalar m_friction;
+ SimdScalar m_restitution;
+ void* m_broadphaseHandle;
+
+ CcdPhysicsController (const CcdConstructionInfo& ci);
+
+ virtual ~CcdPhysicsController();
+
+
+ RigidBody* GetRigidBody() { return m_body;}
+
+ CollisionShape* GetCollisionShape() { return m_collisionShape;}
+ ////////////////////////////////////
+ // PHY_IPhysicsController interface
+ ////////////////////////////////////
+
+
+ /**
+ SynchronizeMotionStates ynchronizes dynas, kinematic and deformable entities (and do 'late binding')
+ */
+ virtual bool SynchronizeMotionStates(float time);
+ /**
+ WriteMotionStateToDynamics ynchronizes dynas, kinematic and deformable entities (and do 'late binding')
+ */
+
+ virtual void WriteMotionStateToDynamics(bool nondynaonly);
+ virtual void WriteDynamicsToMotionState();
+ // controller replication
+ virtual void PostProcessReplica(class PHY_IMotionState* motionstate,class PHY_IPhysicsController* parentctrl);
+
+ // kinematic methods
+ virtual void RelativeTranslate(float dlocX,float dlocY,float dlocZ,bool local);
+ virtual void RelativeRotate(const float drot[9],bool local);
+ virtual void getOrientation(float &quatImag0,float &quatImag1,float &quatImag2,float &quatReal);
+ virtual void setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal);
+ virtual void setPosition(float posX,float posY,float posZ);
+ virtual void getPosition(PHY__Vector3& pos) const;
+
+ virtual void setScaling(float scaleX,float scaleY,float scaleZ);
+
+ // physics methods
+ virtual void ApplyTorque(float torqueX,float torqueY,float torqueZ,bool local);
+ virtual void ApplyForce(float forceX,float forceY,float forceZ,bool local);
+ virtual void SetAngularVelocity(float ang_velX,float ang_velY,float ang_velZ,bool local);
+ virtual void SetLinearVelocity(float lin_velX,float lin_velY,float lin_velZ,bool local);
+ virtual void applyImpulse(float attachX,float attachY,float attachZ, float impulseX,float impulseY,float impulseZ);
+ virtual void SetActive(bool active);
+
+ // reading out information from physics
+ virtual void GetLinearVelocity(float& linvX,float& linvY,float& linvZ);
+ virtual void GetVelocity(const float posX,const float posY,const float posZ,float& linvX,float& linvY,float& linvZ);
+ virtual void getReactionForce(float& forceX,float& forceY,float& forceZ);
+
+ // dyna's that are rigidbody are free in orientation, dyna's with non-rigidbody are restricted
+ virtual void setRigidBody(bool rigid);
+
+
+ virtual void resolveCombinedVelocities(float linvelX,float linvelY,float linvelZ,float angVelX,float angVelY,float angVelZ);
+
+ // clientinfo for raycasts for example
+ virtual void* getNewClientInfo();
+ virtual void setNewClientInfo(void* clientinfo);
+ virtual PHY_IPhysicsController* GetReplica() {return 0;}
+
+ virtual void calcXform() {} ;
+ virtual void SetMargin(float margin) {};
+ virtual float GetMargin() const {return 0.f;};
+
+
+ bool wantsSleeping();
+
+ void SetAabb(const SimdVector3& aabbMin,const SimdVector3& aabbMax);
+
+
+};
+
+#endif //BULLET2_PHYSICSCONTROLLER_H