CrystalSpace

Public API Reference

Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

dynamics.h

00001 /*
00002     Copyright (C) 2002 Anders Stenberg
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public
00015     License along with this library; if not, write to the Free
00016     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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   virtual const csVector3& GetRelForce () const = 0;
00420   virtual const csVector3& GetRelTorque () const = 0;
00421   */
00422 
00423   /*
00425   virtual int GetJointCount () const = 0;
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 

Generated for Crystal Space by doxygen 1.2.14