CrystalSpace

Public API Reference

Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | 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 #include "csutil/ref.h"
00025 
00026 class csVector3;
00027 class csOrthoTransform;
00028 class csMatrix3;
00029 class csPlane3;
00030 struct iMeshWrapper;
00031 
00032 struct iObject;
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 
00060 struct iDynamics : public iBase
00061 {
00063   virtual csPtr<iDynamicSystem> CreateSystem () = 0;
00064 
00066   virtual void RemoveSystem (iDynamicSystem* system) = 0;
00067 
00069   virtual iDynamicSystem* FindSystem (const char *name) = 0;
00070 
00072   virtual void Step (float stepsize) = 0;
00073 };
00074 
00075 SCF_VERSION (iDynamicSystem, 0, 0, 2);
00076 
00092 struct iDynamicSystem : public iBase
00093 {
00095   virtual iObject *QueryObject (void) = 0;
00097   virtual void SetGravity (const csVector3& v) = 0;
00099   virtual const csVector3 GetGravity () const = 0;
00101   virtual void SetLinearDampener (float d) = 0;
00103   virtual float GetLinearDampener () const = 0;
00105   virtual void SetRollingDampener (float d) = 0;
00107   virtual float GetRollingDampener () const = 0;
00108 
00113   virtual void EnableAutoDisable (bool enable) = 0;
00114   virtual bool AutoDisableEnabled () =0;
00122   virtual void SetAutoDisableParams (float linear, float angular, int steps, float time)=0;
00123 
00125   virtual void Step (float stepsize) = 0;
00126 
00128   virtual csPtr<iRigidBody> CreateBody () = 0;
00129 
00131   virtual void RemoveBody (iRigidBody* body) = 0;
00132 
00134   virtual iRigidBody *FindBody (const char *name) = 0;
00135 
00137   virtual csPtr<iBodyGroup> CreateGroup () = 0;
00138 
00140   virtual void RemoveGroup (iBodyGroup* group) = 0;
00141 
00143   virtual csPtr<iJoint> CreateJoint () = 0;
00144 
00146   virtual void RemoveJoint (iJoint* joint) = 0;
00147 
00149   virtual iDynamicsMoveCallback* GetDefaultMoveCallback () = 0;
00150 
00164   virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00165     const csOrthoTransform& trans, float friction,
00166     float elasticity, float softness = 0.01f) = 0;
00167 
00182   virtual bool AttachColliderCylinder (float length, float radius,
00183     const csOrthoTransform& trans, float friction,
00184     float elasticity, float softness = 0.01f) = 0;
00185 
00199   virtual bool AttachColliderBox (const csVector3 &size,
00200     const csOrthoTransform& trans, float friction,
00201     float elasticity, float softness = 0.01f) = 0;
00202 
00217   virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00218     float friction, float elasticity, float softness = 0.01f) = 0;
00219 
00232   virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00233     float elasticity, float softness = 0.01f) = 0;
00234 };
00235 
00236 SCF_VERSION (iDynamicsMoveCallback, 0, 0, 1);
00237 
00252 struct iDynamicsMoveCallback : public iBase
00253 {
00254   virtual void Execute (iMeshWrapper* mesh, csOrthoTransform& t) = 0;
00255   virtual void Execute (csOrthoTransform& t) = 0;
00256 };
00257 
00258 SCF_VERSION (iDynamicsCollisionCallback, 0, 0, 1);
00259 
00272 struct iDynamicsCollisionCallback : public iBase
00273 {
00274   virtual void Execute (iRigidBody *thisbody, iRigidBody *otherbody) = 0;
00275 };
00276 
00277 SCF_VERSION (iBodyGroup, 0, 0, 1);
00278 
00299 struct iBodyGroup : public iBase
00300 {
00302    virtual void AddBody (iRigidBody *body) = 0;
00304    virtual void RemoveBody (iRigidBody *body) = 0;
00306    virtual bool BodyInGroup (iRigidBody *body) = 0;
00307 };
00308 
00309 SCF_VERSION (iRigidBody, 0, 0, 2);
00310 
00330 struct iRigidBody : public iBase
00331 {
00333   virtual iObject *QueryObject (void) = 0;
00339   virtual bool MakeStatic (void) = 0;
00341   virtual bool MakeDynamic (void) = 0;
00343   virtual bool IsStatic (void) = 0;
00347   virtual bool Disable (void) = 0;
00349   virtual bool Enable (void) = 0;
00351   virtual bool IsEnabled (void) = 0;  
00352 
00354   virtual csRef<iBodyGroup> GetGroup (void) = 0;
00355 
00371   virtual bool AttachColliderMesh (iMeshWrapper* mesh,
00372     const csOrthoTransform& trans, float friction, float density,
00373     float elasticity, float softness = 0.01f) = 0;
00374 
00391   virtual bool AttachColliderCylinder (float length, float radius,
00392     const csOrthoTransform& trans, float friction, float density,
00393     float elasticity, float softness = 0.01f) = 0;
00394 
00410   virtual bool AttachColliderBox (const csVector3 &size,
00411     const csOrthoTransform& trans, float friction, float density,
00412     float elasticity, float softness = 0.01f) = 0;
00413 
00429   virtual bool AttachColliderSphere (float radius, const csVector3 &offset,
00430     float friction, float density, float elasticity,
00431     float softness = 0.01f) = 0;
00432 
00447   virtual bool AttachColliderPlane (const csPlane3 &plane, float friction,
00448     float density, float elasticity, float softness = 0.01f) = 0;
00449 
00451   virtual void SetPosition (const csVector3& trans) = 0;
00453   virtual const csVector3 GetPosition () const = 0;
00455   virtual void SetOrientation (const csMatrix3& trans) = 0;
00457   virtual const csMatrix3 GetOrientation () const = 0;
00459   virtual void SetTransform (const csOrthoTransform& trans) = 0;
00461   virtual const csOrthoTransform GetTransform () const = 0;
00463   virtual void SetLinearVelocity (const csVector3& vel) = 0;
00465   virtual const csVector3 GetLinearVelocity () const = 0;
00467   virtual void SetAngularVelocity (const csVector3& vel) = 0;
00469   virtual const csVector3 GetAngularVelocity () const = 0;
00470 
00472   virtual void SetProperties (float mass, const csVector3& center,
00473     const csMatrix3& inertia) = 0;
00475   virtual void GetProperties (float* mass, csVector3* center,
00476     csMatrix3* inertia) = 0;
00478   virtual void AdjustTotalMass (float targetmass) = 0;
00479 
00481   virtual void AddForce (const csVector3& force) = 0;
00483   virtual void AddTorque (const csVector3& force) = 0;
00485   virtual void AddRelForce (const csVector3& force) = 0;
00487   virtual void AddRelTorque (const csVector3& force) = 0 ;
00492   virtual void AddForceAtPos (const csVector3& force, const csVector3& pos) = 0;
00497   virtual void AddForceAtRelPos (const csVector3& force,
00498     const csVector3& pos) = 0;
00503   virtual void AddRelForceAtPos (const csVector3& force,
00504     const csVector3& pos) = 0;
00509   virtual void AddRelForceAtRelPos (const csVector3& force,
00510     const csVector3& pos) = 0;
00511 
00513   virtual const csVector3 GetForce () const = 0;
00515   virtual const csVector3 GetTorque () const = 0;
00516 
00517   /*
00519   virtual const csVector3& GetRelForce () const = 0;
00521   virtual const csVector3& GetRelTorque () const = 0;
00522   */
00523 
00524   /*
00526   virtual int GetJointCount () const = 0;
00527   */
00528 
00530   virtual void AttachMesh (iMeshWrapper* mesh) = 0;
00532   virtual csRef<iMeshWrapper> GetAttachedMesh () = 0;
00533 
00538   virtual void SetMoveCallback (iDynamicsMoveCallback* cb) = 0;
00543   virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0;
00544 
00546   virtual void Collision (iRigidBody *other) = 0;
00547 
00549   virtual void Update () = 0;
00550 };
00551 
00552 SCF_VERSION (iJoint, 0, 0, 1);
00553 
00570 struct iJoint : public iBase
00571 {
00573   virtual void Attach (iRigidBody* body1, iRigidBody* body2) = 0;
00575   virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00581   virtual void SetTransform (const csOrthoTransform &trans) = 0;
00583   virtual csOrthoTransform GetTransform () = 0;
00591   virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0;
00593   virtual bool IsXTransConstrained () = 0;
00595   virtual bool IsYTransConstrained () = 0;
00597   virtual bool IsZTransConstrained () = 0;
00599   virtual void SetMinimumDistance (const csVector3 &min) = 0;
00601   virtual csVector3 GetMinimumDistance () = 0;
00603   virtual void SetMaximumDistance (const csVector3 &max) = 0;
00605   virtual csVector3 GetMaximumDistance () = 0;
00611   virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0;
00613   virtual bool IsXRotConstrained () = 0;
00615   virtual bool IsYRotConstrained () = 0;
00617   virtual bool IsZRotConstrained () = 0;
00619   virtual void SetMinimumAngle (const csVector3 &min) = 0;
00621   virtual csVector3 GetMinimumAngle () = 0;
00623   virtual void SetMaximumAngle (const csVector3 &max) = 0;
00625   virtual csVector3 GetMaximumAngle () = 0;
00626 
00632   virtual void SetBounce (const csVector3 & bounce ) = 0;
00634   virtual csVector3 GetBounce () = 0;
00636   virtual void SetDesiredVelocity (const csVector3 & velocity ) = 0;
00637   virtual csVector3 GetDesiredVelocity () = 0;
00639   virtual void SetMaxForce (const csVector3 & maxForce ) = 0;
00640   virtual csVector3 GetMaxForce () = 0;
00641 };
00642 
00643 #endif // __CS_IVARIA_DYNAMICS_H__
00644 

Generated for Crystal Space by doxygen 1.3.9.1