CrystalSpace

Public API Reference

Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class 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 
00025 
00026 struct iBodyGroup;
00027 struct iJoint;
00028 struct iMeshWrapper;
00029 struct iObject;
00030 struct iPolygonMesh;
00031 struct iRigidBody;
00032 
00033 class csMatrix3;
00034 class csOrthoTransform;
00035 class csPlane3;
00036 class csVector3;
00037 
00038 struct iDynamicsCollisionCallback;
00039 struct iDynamicsMoveCallback;
00040 struct iDynamicSystem;
00041 
00042 SCF_VERSION (iDynamics, 0, 0, 2);
00043 
00061 struct iDynamics : public iBase
00062 {
00064   virtual csPtr<iDynamicSystem> CreateSystem () = 0;
00065 
00067   virtual void RemoveSystem (iDynamicSystem* system) = 0;
00068 
00070   virtual iDynamicSystem* FindSystem (const char *name) = 0;
00071 
00073   virtual void Step (float stepsize) = 0;
00074 };
00075 
00076 SCF_VERSION (iDynamicSystem, 0, 0, 2);
00077 
00078 struct iDynamicsSystemCollider;
00079 
00095 struct iDynamicSystem : public iBase
00096 {
00098   virtual iObject *QueryObject (void) = 0;
00100   virtual void SetGravity (const csVector3& v) = 0;
00102   virtual const csVector3 GetGravity () const = 0;
00104   virtual void SetLinearDampener (float d) = 0;
00106   virtual float GetLinearDampener () const = 0;
00108   virtual void SetRollingDampener (float d) = 0;
00110   virtual float GetRollingDampener () const = 0;
00111 
00116   virtual void EnableAutoDisable (bool enable) = 0;
00117   virtual bool AutoDisableEnabled () =0;
00125   virtual void SetAutoDisableParams (float linear, float angular, int steps, float time)=0;
00126 
00128   virtual void Step (float stepsize) = 0;
00129 
00131   virtual csPtr<iRigidBody> CreateBody () = 0;
00132 
00134   virtual void RemoveBody (iRigidBody* body) = 0;
00135 
00137   virtual iRigidBody *FindBody (const char *name) = 0;
00138 
00140   virtual iRigidBody *GetBody (unsigned int index) = 0;
00141 
00143   virtual int GetBodysCount () = 0;
00144 
00146   virtual csPtr<iBodyGroup> CreateGroup () = 0;
00147 
00149   virtual void RemoveGroup (iBodyGroup* group) = 0;
00150 
00152   virtual csPtr<iJoint> CreateJoint () = 0;
00153 
00155   virtual void RemoveJoint (iJoint* joint) = 0;
00156 
00158   virtual iDynamicsMoveCallback* GetDefaultMoveCallback () = 0;
00159 
00173   virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00174     const csOrthoTransform& trans, float friction,
00175     float elasticity, float softness = 0.01f) = 0;
00176 
00191   virtual bool AttachColliderCylinder (float length, float radius,
00192     const csOrthoTransform& trans, float friction,
00193     float elasticity, float softness = 0.01f) = 0;
00194 
00208   virtual bool AttachColliderBox (const csVector3 &size,
00209     const csOrthoTransform& trans, float friction,
00210     float elasticity, float softness = 0.01f) = 0;
00211 
00226   virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00227     float friction, float elasticity, float softness = 0.01f) = 0;
00228 
00241   virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00242     float elasticity, float softness = 0.01f) = 0;
00243 
00245   virtual void DestroyColliders () = 0;
00246 
00248   virtual void DestroyCollider (iDynamicsSystemCollider* collider) = 0;
00249 
00251   virtual void AttachCollider (iDynamicsSystemCollider* collider) = 0;
00252 
00258   virtual csRef<iDynamicsSystemCollider> CreateCollider () = 0;
00259 
00261   virtual csRef<iDynamicsSystemCollider> GetCollider (unsigned int index) = 0;
00262 
00264   virtual int GetColliderCount () = 0;
00265 };
00266 
00267 SCF_VERSION (iDynamicsMoveCallback, 0, 0, 1);
00268 
00283 struct iDynamicsMoveCallback : public iBase
00284 {
00285   virtual void Execute (iMeshWrapper* mesh, csOrthoTransform& t) = 0;
00286   virtual void Execute (csOrthoTransform& t) = 0;
00287 };
00288 
00289 SCF_VERSION (iDynamicsCollisionCallback, 0, 0, 1);
00290 
00303 struct iDynamicsCollisionCallback : public iBase
00304 {
00305   virtual void Execute (iRigidBody *thisbody, iRigidBody *otherbody) = 0;
00306 };
00307 
00308 SCF_VERSION (iBodyGroup, 0, 0, 1);
00309 
00330 struct iBodyGroup : public iBase
00331 {
00333    virtual void AddBody (iRigidBody *body) = 0;
00335    virtual void RemoveBody (iRigidBody *body) = 0;
00337    virtual bool BodyInGroup (iRigidBody *body) = 0;
00338 };
00339 
00340 SCF_VERSION (iRigidBody, 0, 0, 2);
00341 
00361 struct iRigidBody : public iBase
00362 {
00364   virtual iObject *QueryObject (void) = 0;
00370   virtual bool MakeStatic (void) = 0;
00372   virtual bool MakeDynamic (void) = 0;
00374   virtual bool IsStatic (void) = 0;
00378   virtual bool Disable (void) = 0;
00380   virtual bool Enable (void) = 0;
00382   virtual bool IsEnabled (void) = 0;  
00383 
00385   virtual csRef<iBodyGroup> GetGroup (void) = 0;
00386 
00402   virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00403     const csOrthoTransform& trans, float friction, float density,
00404     float elasticity, float softness = 0.01f) = 0;
00405 
00422   virtual bool AttachColliderCylinder (float length, float radius,
00423     const csOrthoTransform& trans, float friction, float density,
00424     float elasticity, float softness = 0.01f) = 0;
00425 
00441   virtual bool AttachColliderBox (const csVector3 &size,
00442     const csOrthoTransform& trans, float friction, float density,
00443     float elasticity, float softness = 0.01f) = 0;
00444 
00460   virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00461     float friction, float density, float elasticity,
00462     float softness = 0.01f) = 0;
00463 
00478   virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00479     float density, float elasticity, float softness = 0.01f) = 0;
00480 
00487   virtual void AttachCollider (iDynamicsSystemCollider* collider) = 0;
00488 
00490   virtual void DestroyColliders () = 0;
00491 
00493   virtual void DestroyCollider (iDynamicsSystemCollider* collider) = 0;
00494 
00496   virtual void SetPosition (const csVector3& trans) = 0;
00498   virtual const csVector3 GetPosition () const = 0;
00500   virtual void SetOrientation (const csMatrix3& trans) = 0;
00502   virtual const csMatrix3 GetOrientation () const = 0;
00504   virtual void SetTransform (const csOrthoTransform& trans) = 0;
00506   virtual const csOrthoTransform GetTransform () const = 0;
00508   virtual void SetLinearVelocity (const csVector3& vel) = 0;
00510   virtual const csVector3 GetLinearVelocity () const = 0;
00512   virtual void SetAngularVelocity (const csVector3& vel) = 0;
00514   virtual const csVector3 GetAngularVelocity () const = 0;
00515 
00517   virtual void SetProperties (float mass, const csVector3& center,
00518     const csMatrix3& inertia) = 0;
00520   virtual void GetProperties (float* mass, csVector3* center,
00521     csMatrix3* inertia) = 0;
00523   virtual float GetMass () = 0;
00525   virtual csVector3 GetCenter () = 0;
00527   virtual csMatrix3 GetInertia () = 0;
00528 
00530   virtual void AdjustTotalMass (float targetmass) = 0;
00531 
00533   virtual void AddForce (const csVector3& force) = 0;
00535   virtual void AddTorque (const csVector3& force) = 0;
00537   virtual void AddRelForce (const csVector3& force) = 0;
00539   virtual void AddRelTorque (const csVector3& force) = 0 ;
00544   virtual void AddForceAtPos (const csVector3& force, const csVector3& pos) = 0;
00549   virtual void AddForceAtRelPos (const csVector3& force,
00550     const csVector3& pos) = 0;
00555   virtual void AddRelForceAtPos (const csVector3& force,
00556     const csVector3& pos) = 0;
00561   virtual void AddRelForceAtRelPos (const csVector3& force,
00562     const csVector3& pos) = 0;
00563 
00565   virtual const csVector3 GetForce () const = 0;
00567   virtual const csVector3 GetTorque () const = 0;
00568 
00569   /*
00571   virtual const csVector3& GetRelForce () const = 0;
00573   virtual const csVector3& GetRelTorque () const = 0;
00574   */
00575 
00576   /*
00578   virtual int GetJointCount () const = 0;
00579   */
00580 
00582   virtual void AttachMesh (iMeshWrapper* mesh) = 0;
00584   virtual csRef<iMeshWrapper> GetAttachedMesh () = 0;
00585 
00590   virtual void SetMoveCallback (iDynamicsMoveCallback* cb) = 0;
00595   virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0;
00596 
00598   virtual void Collision (iRigidBody *other) = 0;
00599 
00601   virtual void Update () = 0;
00602 
00604   virtual csRef<iDynamicsSystemCollider> GetCollider (unsigned int index) = 0;
00605 
00607   virtual int GetColliderCount () = 0;
00608 };
00609 
00610 enum csColliderGeometryType
00611 {
00612   BOX_COLLIDER_GEOMETRY = 1,
00613   PLANE_COLLIDER_GEOMETRY,
00614   TRIMESH_COLLIDER_GEOMETRY,
00615   CYLINDER_COLLIDER_GEOMETRY,
00616   SPHERE_COLLIDER_GEOMETRY
00617 };
00618 
00619 SCF_VERSION (iDynamicsSystemCollider, 0, 0, 1);
00620 
00621 struct iGeneralFactoryState;
00622 struct csBox3;
00623 struct csSphere;
00624 struct csReversibleTransform;
00625 
00650 struct iDynamicsSystemCollider : public iBase
00651 {
00653   virtual bool CreateSphereGeometry (const csSphere& sphere) = 0;
00654 
00656   virtual bool CreatePlaneGeometry (const csPlane3& plane) = 0;
00657 
00659   virtual bool CreateMeshGeometry (iMeshWrapper *mesh) = 0;
00660 
00662   virtual bool CreateBoxGeometry (const csVector3& box_size) = 0;
00663 
00665   virtual bool CreateCCylinderGeometry (float length, float radius) = 0;
00666 
00667   //FIXME: This should be implememented, but it is not so obvious - it
00668   //should be valid also for static colliders.
00669   //virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0;
00670 
00672   virtual void SetFriction (float friction) = 0;
00673 
00675   virtual void SetSoftness (float softness) = 0;
00676 
00682   virtual void SetDensity (float density) = 0;
00683 
00685   virtual void SetElasticity (float elasticity) = 0;
00686   
00688   virtual float GetFriction () = 0;
00689 
00691   virtual float GetSoftness () = 0;
00692 
00694   virtual float GetDensity () = 0;
00695 
00697   virtual float GetElasticity () = 0;
00698 
00700   virtual void FillWithColliderGeometry (csRef<iGeneralFactoryState> genmesh_fact) = 0;
00701 
00703   virtual csColliderGeometryType GetGeometryType () = 0;
00704 
00706   virtual csOrthoTransform GetTransform () = 0;
00707 
00712   virtual void SetTransform (const csOrthoTransform& trans) = 0;
00713 };
00714 
00715 SCF_VERSION (iJoint, 0, 0, 1);
00716 
00733 struct iJoint : public iBase
00734 {
00736   virtual void Attach (iRigidBody* body1, iRigidBody* body2) = 0;
00738   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00744   virtual void SetTransform (const csOrthoTransform &trans) = 0;
00746   virtual csOrthoTransform GetTransform () = 0;
00754   virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0;
00756   virtual bool IsXTransConstrained () = 0;
00758   virtual bool IsYTransConstrained () = 0;
00760   virtual bool IsZTransConstrained () = 0;
00762   virtual void SetMinimumDistance (const csVector3 &min) = 0;
00764   virtual csVector3 GetMinimumDistance () = 0;
00766   virtual void SetMaximumDistance (const csVector3 &max) = 0;
00768   virtual csVector3 GetMaximumDistance () = 0;
00774   virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0;
00776   virtual bool IsXRotConstrained () = 0;
00778   virtual bool IsYRotConstrained () = 0;
00780   virtual bool IsZRotConstrained () = 0;
00782   virtual void SetMinimumAngle (const csVector3 &min) = 0;
00784   virtual csVector3 GetMinimumAngle () = 0;
00786   virtual void SetMaximumAngle (const csVector3 &max) = 0;
00788   virtual csVector3 GetMaximumAngle () = 0;
00789 
00795   virtual void SetBounce (const csVector3 & bounce ) = 0;
00797   virtual csVector3 GetBounce () = 0;
00799   virtual void SetDesiredVelocity (const csVector3 & velocity ) = 0;
00800   virtual csVector3 GetDesiredVelocity () = 0;
00802   virtual void SetMaxForce (const csVector3 & maxForce ) = 0;
00803   virtual csVector3 GetMaxForce () = 0;
00804 };
00805 
00806 #endif // __CS_IVARIA_DYNAMICS_H__
00807 

Generated for Crystal Space by doxygen 1.4.4