00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_IVARIA_DYNAMICS_H__
00021 #define __CS_IVARIA_DYNAMICS_H__
00022
00023 #include "csutil/scf.h"
00024 #include "csutil/ref.h"
00025
00026 class csVector3;
00027 class csOrthoTransform;
00028 class csMatrix3;
00029 class csPlane3;
00030 struct iMeshWrapper;
00031 struct iSkeletonBone;
00032
00033 struct iDynamicSystem;
00034 struct iRigidBody;
00035 struct iBodyGroup;
00036 struct iDynamicsMoveCallback;
00037 struct iDynamicsCollisionCallback;
00038 struct iJoint;
00039 struct iPolygonMesh;
00040
00041 SCF_VERSION (iDynamics, 0, 0, 2);
00042
00047 struct iDynamics : public iBase
00048 {
00050 virtual csPtr<iDynamicSystem> CreateSystem () = 0;
00051
00053 virtual void RemoveSystem (iDynamicSystem* system) = 0;
00054
00056 virtual iDynamicSystem* FindSystem (const char *name) = 0;
00057
00059 virtual void Step (float stepsize) = 0;
00060 };
00061
00062 SCF_VERSION (iDynamicSystem, 0, 0, 2);
00063
00070 struct iDynamicSystem : public iBase
00071 {
00073 virtual iObject *QueryObject (void) = 0;
00075 virtual void SetGravity (const csVector3& v) = 0;
00077 virtual const csVector3 GetGravity () const = 0;
00078
00080 virtual void Step (float stepsize) = 0;
00081
00083 virtual csPtr<iRigidBody> CreateBody () = 0;
00084
00086 virtual void RemoveBody( iRigidBody* body ) = 0;
00087
00089 virtual iRigidBody *FindBody (const char *name) = 0;
00090
00092 virtual csPtr<iBodyGroup> CreateGroup () = 0;
00093
00095 virtual void RemoveGroup (iBodyGroup* group) = 0;
00096
00098 virtual csPtr<iJoint> CreateJoint () = 0;
00099
00101 virtual void RemoveJoint (iJoint* joint) = 0;
00102
00104 virtual iDynamicsMoveCallback* GetDefaultMoveCallback () = 0;
00105 };
00106
00107 SCF_VERSION (iDynamicsMoveCallback, 0, 0, 1);
00108
00113 struct iDynamicsMoveCallback : public iBase
00114 {
00115 virtual void Execute (iMeshWrapper* mesh, csOrthoTransform& t) = 0;
00116 virtual void Execute (iSkeletonBone* bone, csOrthoTransform& t) = 0;
00117 };
00118
00119 SCF_VERSION (iDynamicsCollisionCallback, 0, 0, 1);
00120
00124 struct iDynamicsCollisionCallback : public iBase
00125 {
00126 virtual void Execute (iRigidBody *thisbody, iRigidBody *otherbody) = 0;
00127 };
00128
00129 SCF_VERSION (iBodyGroup, 0, 0, 1);
00130
00138 struct iBodyGroup : public iBase
00139 {
00141 virtual void AddBody (iRigidBody *body) = 0;
00143 virtual void RemoveBody (iRigidBody *body) = 0;
00145 virtual bool BodyInGroup (iRigidBody *body) = 0;
00146 };
00147
00148 SCF_VERSION (iRigidBody, 0, 0, 2);
00149
00156 struct iRigidBody : public iBase
00157 {
00159 virtual iObject *QueryObject (void) = 0;
00165 virtual bool MakeStatic (void) = 0;
00167 virtual bool MakeDynamic (void) = 0;
00169 virtual bool IsStatic (void) = 0;
00170
00172 virtual csRef<iBodyGroup> GetGroup (void) = 0;
00173
00175 virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00176 const csOrthoTransform& trans, float friction, float density,
00177 float elasticity) = 0;
00179 virtual bool AttachColliderCylinder (float length, float radius,
00180 const csOrthoTransform& trans, float friction, float density,
00181 float elasticity) = 0;
00182 virtual bool AttachColliderBox (const csVector3 &size,
00183 const csOrthoTransform& trans, float friction, float density,
00184 float elasticity) = 0;
00185 virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00186 float friction, float density, float elasticity) = 0;
00187 virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00188 float density, float elasticity) = 0;
00189
00191 virtual void SetPosition (const csVector3& trans) = 0;
00193 virtual const csVector3 GetPosition () const = 0;
00195 virtual void SetOrientation (const csMatrix3& trans) = 0;
00197 virtual const csMatrix3 GetOrientation () const = 0;
00199 virtual void SetTransform (const csOrthoTransform& trans) = 0;
00201 virtual const csOrthoTransform GetTransform () const = 0;
00203 virtual void SetLinearVelocity (const csVector3& vel) = 0;
00205 virtual const csVector3 GetLinearVelocity () const = 0;
00207 virtual void SetAngularVelocity (const csVector3& vel) = 0;
00209 virtual const csVector3 GetAngularVelocity () const = 0;
00210
00212 virtual void SetProperties (float mass, const csVector3& center,
00213 const csMatrix3& inertia) = 0;
00215 virtual void GetProperties (float* mass, csVector3* center,
00216 csMatrix3* inertia) = 0;
00218 virtual void AdjustTotalMass (float targetmass) = 0;
00219
00221 virtual void AddForce (const csVector3& force) = 0;
00223 virtual void AddTorque (const csVector3& force) = 0;
00225 virtual void AddRelForce (const csVector3& force) = 0;
00227 virtual void AddRelTorque (const csVector3& force) = 0 ;
00232 virtual void AddForceAtPos (const csVector3& force, const csVector3& pos) = 0;
00237 virtual void AddForceAtRelPos (const csVector3& force,
00238 const csVector3& pos) = 0;
00243 virtual void AddRelForceAtPos (const csVector3& force,
00244 const csVector3& pos) = 0;
00249 virtual void AddRelForceAtRelPos (const csVector3& force,
00250 const csVector3& pos) = 0;
00251
00253 virtual const csVector3 GetForce () const = 0;
00255 virtual const csVector3 GetTorque () const = 0;
00256
00257
00259
00261
00262
00263
00264
00266
00267
00268
00270 virtual void AttachMesh (iMeshWrapper* mesh) = 0;
00272 virtual csRef<iMeshWrapper> GetAttachedMesh () = 0;
00274 virtual void AttachBone (iSkeletonBone* bone) = 0;
00276 virtual csRef<iSkeletonBone> GetAttachedBone () = 0;
00277
00282 virtual void SetMoveCallback (iDynamicsMoveCallback* cb) = 0;
00287 virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0;
00288
00290 virtual void Collision (iRigidBody *other) = 0;
00291
00293 virtual void Update () = 0;
00294 };
00295
00296 SCF_VERSION (iJoint, 0, 0, 1);
00297
00305 struct iJoint : public iBase
00306 {
00308 virtual void Attach (iRigidBody* body1, iRigidBody* body2) = 0;
00310 virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00316 virtual void SetTransform (const csOrthoTransform &trans) = 0;
00318 virtual csOrthoTransform GetTransform () = 0;
00326 virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0;
00328 virtual bool IsXTransConstrained () = 0;
00330 virtual bool IsYTransConstrained () = 0;
00332 virtual bool IsZTransConstrained () = 0;
00334 virtual void SetMinimumDistance (const csVector3 &min) = 0;
00336 virtual csVector3 GetMinimumDistance () = 0;
00338 virtual void SetMaximumDistance (const csVector3 &max) = 0;
00340 virtual csVector3 GetMaximumDistance () = 0;
00346 virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0;
00348 virtual bool IsXRotConstrained () = 0;
00350 virtual bool IsYRotConstrained () = 0;
00352 virtual bool IsZRotConstrained () = 0;
00354 virtual void SetMinimumAngle (const csVector3 &min) = 0;
00356 virtual csVector3 GetMinimumAngle () = 0;
00358 virtual void SetMaximumAngle (const csVector3 &max) = 0;
00360 virtual csVector3 GetMaximumAngle () = 0;
00361 };
00362
00363 #endif // __CS_IVARIA_DYNAMICS_H__
00364