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 iObject;
00034 struct iDynamicSystem;
00035 struct iRigidBody;
00036 struct iBodyGroup;
00037 struct iDynamicsMoveCallback;
00038 struct iDynamicsCollisionCallback;
00039 struct iJoint;
00040 struct iPolygonMesh;
00041
00042 SCF_VERSION (iDynamics, 0, 0, 2);
00043
00048 struct iDynamics : public iBase
00049 {
00051 virtual csPtr<iDynamicSystem> CreateSystem () = 0;
00052
00054 virtual void RemoveSystem (iDynamicSystem* system) = 0;
00055
00057 virtual iDynamicSystem* FindSystem (const char *name) = 0;
00058
00060 virtual void Step (float stepsize) = 0;
00061 };
00062
00063 SCF_VERSION (iDynamicSystem, 0, 0, 2);
00064
00071 struct iDynamicSystem : public iBase
00072 {
00074 virtual iObject *QueryObject (void) = 0;
00076 virtual void SetGravity (const csVector3& v) = 0;
00078 virtual const csVector3 GetGravity () const = 0;
00080 virtual void SetLinearDampener (float d) = 0;
00082 virtual float GetLinearDampener () const = 0;
00084 virtual void SetRollingDampener (float d) = 0;
00086 virtual float GetRollingDampener () const = 0;
00087
00089 virtual void Step (float stepsize) = 0;
00090
00092 virtual csPtr<iRigidBody> CreateBody () = 0;
00093
00095 virtual void RemoveBody( iRigidBody* body ) = 0;
00096
00098 virtual iRigidBody *FindBody (const char *name) = 0;
00099
00101 virtual csPtr<iBodyGroup> CreateGroup () = 0;
00102
00104 virtual void RemoveGroup (iBodyGroup* group) = 0;
00105
00107 virtual csPtr<iJoint> CreateJoint () = 0;
00108
00110 virtual void RemoveJoint (iJoint* joint) = 0;
00111
00113 virtual iDynamicsMoveCallback* GetDefaultMoveCallback () = 0;
00114
00127 virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00128 const csOrthoTransform& trans, float friction,
00129 float elasticity, float softness = 0.01f) = 0;
00130
00144 virtual bool AttachColliderCylinder (float length, float radius,
00145 const csOrthoTransform& trans, float friction,
00146 float elasticity, float softness = 0.01f) = 0;
00147
00160 virtual bool AttachColliderBox (const csVector3 &size,
00161 const csOrthoTransform& trans, float friction,
00162 float elasticity, float softness = 0.01f) = 0;
00163
00178 virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00179 float friction, float elasticity, float softness = 0.01f) = 0;
00180
00193 virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00194 float elasticity, float softness = 0.01f) = 0;
00195 };
00196
00197 SCF_VERSION (iDynamicsMoveCallback, 0, 0, 1);
00198
00203 struct iDynamicsMoveCallback : public iBase
00204 {
00205 virtual void Execute (iMeshWrapper* mesh, csOrthoTransform& t) = 0;
00206 virtual void Execute (iSkeletonBone* bone, csOrthoTransform& t) = 0;
00207 virtual void Execute (csOrthoTransform& t) = 0;
00208 };
00209
00210 SCF_VERSION (iDynamicsCollisionCallback, 0, 0, 1);
00211
00215 struct iDynamicsCollisionCallback : public iBase
00216 {
00217 virtual void Execute (iRigidBody *thisbody, iRigidBody *otherbody) = 0;
00218 };
00219
00220 SCF_VERSION (iBodyGroup, 0, 0, 1);
00221
00229 struct iBodyGroup : public iBase
00230 {
00232 virtual void AddBody (iRigidBody *body) = 0;
00234 virtual void RemoveBody (iRigidBody *body) = 0;
00236 virtual bool BodyInGroup (iRigidBody *body) = 0;
00237 };
00238
00239 SCF_VERSION (iRigidBody, 0, 0, 2);
00240
00247 struct iRigidBody : public iBase
00248 {
00250 virtual iObject *QueryObject (void) = 0;
00256 virtual bool MakeStatic (void) = 0;
00258 virtual bool MakeDynamic (void) = 0;
00260 virtual bool IsStatic (void) = 0;
00261
00263 virtual csRef<iBodyGroup> GetGroup (void) = 0;
00264
00278 virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00279 const csOrthoTransform& trans, float friction, float density,
00280 float elasticity, float softness = 0.01f) = 0;
00281
00295 virtual bool AttachColliderCylinder (float length, float radius,
00296 const csOrthoTransform& trans, float friction, float density,
00297 float elasticity, float softness = 0.01f) = 0;
00298
00312 virtual bool AttachColliderBox (const csVector3 &size,
00313 const csOrthoTransform& trans, float friction, float density,
00314 float elasticity, float softness = 0.01f) = 0;
00315
00329 virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00330 float friction, float density, float elasticity,
00331 float softness = 0.01f) = 0;
00332
00346 virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00347 float density, float elasticity, float softness = 0.01f) = 0;
00348
00350 virtual void SetPosition (const csVector3& trans) = 0;
00352 virtual const csVector3 GetPosition () const = 0;
00354 virtual void SetOrientation (const csMatrix3& trans) = 0;
00356 virtual const csMatrix3 GetOrientation () const = 0;
00358 virtual void SetTransform (const csOrthoTransform& trans) = 0;
00360 virtual const csOrthoTransform GetTransform () const = 0;
00362 virtual void SetLinearVelocity (const csVector3& vel) = 0;
00364 virtual const csVector3 GetLinearVelocity () const = 0;
00366 virtual void SetAngularVelocity (const csVector3& vel) = 0;
00368 virtual const csVector3 GetAngularVelocity () const = 0;
00369
00371 virtual void SetProperties (float mass, const csVector3& center,
00372 const csMatrix3& inertia) = 0;
00374 virtual void GetProperties (float* mass, csVector3* center,
00375 csMatrix3* inertia) = 0;
00377 virtual void AdjustTotalMass (float targetmass) = 0;
00378
00380 virtual void AddForce (const csVector3& force) = 0;
00382 virtual void AddTorque (const csVector3& force) = 0;
00384 virtual void AddRelForce (const csVector3& force) = 0;
00386 virtual void AddRelTorque (const csVector3& force) = 0 ;
00391 virtual void AddForceAtPos (const csVector3& force, const csVector3& pos) = 0;
00396 virtual void AddForceAtRelPos (const csVector3& force,
00397 const csVector3& pos) = 0;
00402 virtual void AddRelForceAtPos (const csVector3& force,
00403 const csVector3& pos) = 0;
00408 virtual void AddRelForceAtRelPos (const csVector3& force,
00409 const csVector3& pos) = 0;
00410
00412 virtual const csVector3 GetForce () const = 0;
00414 virtual const csVector3 GetTorque () const = 0;
00415
00416
00418
00420
00421
00422
00423
00425
00426
00427
00429 virtual void AttachMesh (iMeshWrapper* mesh) = 0;
00431 virtual csRef<iMeshWrapper> GetAttachedMesh () = 0;
00433 virtual void AttachBone (iSkeletonBone* bone) = 0;
00435 virtual csRef<iSkeletonBone> GetAttachedBone () = 0;
00436
00441 virtual void SetMoveCallback (iDynamicsMoveCallback* cb) = 0;
00446 virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0;
00447
00449 virtual void Collision (iRigidBody *other) = 0;
00450
00452 virtual void Update () = 0;
00453 };
00454
00455 SCF_VERSION (iJoint, 0, 0, 1);
00456
00464 struct iJoint : public iBase
00465 {
00467 virtual void Attach (iRigidBody* body1, iRigidBody* body2) = 0;
00469 virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00475 virtual void SetTransform (const csOrthoTransform &trans) = 0;
00477 virtual csOrthoTransform GetTransform () = 0;
00485 virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0;
00487 virtual bool IsXTransConstrained () = 0;
00489 virtual bool IsYTransConstrained () = 0;
00491 virtual bool IsZTransConstrained () = 0;
00493 virtual void SetMinimumDistance (const csVector3 &min) = 0;
00495 virtual csVector3 GetMinimumDistance () = 0;
00497 virtual void SetMaximumDistance (const csVector3 &max) = 0;
00499 virtual csVector3 GetMaximumDistance () = 0;
00505 virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0;
00507 virtual bool IsXRotConstrained () = 0;
00509 virtual bool IsYRotConstrained () = 0;
00511 virtual bool IsZRotConstrained () = 0;
00513 virtual void SetMinimumAngle (const csVector3 &min) = 0;
00515 virtual csVector3 GetMinimumAngle () = 0;
00517 virtual void SetMaximumAngle (const csVector3 &max) = 0;
00519 virtual csVector3 GetMaximumAngle () = 0;
00520 };
00521
00522 #endif // __CS_IVARIA_DYNAMICS_H__
00523