ivaria/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 00110 virtual void Step (float stepsize) = 0; 00111 00113 virtual csPtr<iRigidBody> CreateBody () = 0; 00114 00116 virtual void RemoveBody (iRigidBody* body) = 0; 00117 00119 virtual iRigidBody *FindBody (const char *name) = 0; 00120 00122 virtual csPtr<iBodyGroup> CreateGroup () = 0; 00123 00125 virtual void RemoveGroup (iBodyGroup* group) = 0; 00126 00128 virtual csPtr<iJoint> CreateJoint () = 0; 00129 00131 virtual void RemoveJoint (iJoint* joint) = 0; 00132 00134 virtual iDynamicsMoveCallback* GetDefaultMoveCallback () = 0; 00135 00149 virtual bool AttachColliderMesh (iMeshWrapper* mesh, 00150 const csOrthoTransform& trans, float friction, 00151 float elasticity, float softness = 0.01f) = 0; 00152 00167 virtual bool AttachColliderCylinder (float length, float radius, 00168 const csOrthoTransform& trans, float friction, 00169 float elasticity, float softness = 0.01f) = 0; 00170 00184 virtual bool AttachColliderBox (const csVector3 &size, 00185 const csOrthoTransform& trans, float friction, 00186 float elasticity, float softness = 0.01f) = 0; 00187 00203 virtual bool AttachColliderSphere (float radius, const csVector3 &offset, 00204 float friction, float elasticity, float softness = 0.01f) = 0; 00205 00219 virtual bool AttachColliderPlane (const csPlane3 &plane, float friction, 00220 float elasticity, float softness = 0.01f) = 0; 00221 }; 00222 00223 SCF_VERSION (iDynamicsMoveCallback, 0, 0, 1); 00224 00239 struct iDynamicsMoveCallback : public iBase 00240 { 00241 virtual void Execute (iMeshWrapper* mesh, csOrthoTransform& t) = 0; 00242 virtual void Execute (csOrthoTransform& t) = 0; 00243 }; 00244 00245 SCF_VERSION (iDynamicsCollisionCallback, 0, 0, 1); 00246 00259 struct iDynamicsCollisionCallback : public iBase 00260 { 00261 virtual void Execute (iRigidBody *thisbody, iRigidBody *otherbody) = 0; 00262 }; 00263 00264 SCF_VERSION (iBodyGroup, 0, 0, 1); 00265 00286 struct iBodyGroup : public iBase 00287 { 00289 virtual void AddBody (iRigidBody *body) = 0; 00291 virtual void RemoveBody (iRigidBody *body) = 0; 00293 virtual bool BodyInGroup (iRigidBody *body) = 0; 00294 }; 00295 00296 SCF_VERSION (iRigidBody, 0, 0, 2); 00297 00317 struct iRigidBody : public iBase 00318 { 00320 virtual iObject *QueryObject (void) = 0; 00326 virtual bool MakeStatic (void) = 0; 00328 virtual bool MakeDynamic (void) = 0; 00330 virtual bool IsStatic (void) = 0; 00331 00333 virtual csRef<iBodyGroup> GetGroup (void) = 0; 00334 00349 virtual bool AttachColliderMesh (iMeshWrapper* mesh, 00350 const csOrthoTransform& trans, float friction, float density, 00351 float elasticity, float softness = 0.01f) = 0; 00352 00367 virtual bool AttachColliderCylinder (float length, float radius, 00368 const csOrthoTransform& trans, float friction, float density, 00369 float elasticity, float softness = 0.01f) = 0; 00370 00385 virtual bool AttachColliderBox (const csVector3 &size, 00386 const csOrthoTransform& trans, float friction, float density, 00387 float elasticity, float softness = 0.01f) = 0; 00388 00403 virtual bool AttachColliderSphere (float radius, const csVector3 &offset, 00404 float friction, float density, float elasticity, 00405 float softness = 0.01f) = 0; 00406 00421 virtual bool AttachColliderPlane (const csPlane3 &plane, float friction, 00422 float density, float elasticity, float softness = 0.01f) = 0; 00423 00425 virtual void SetPosition (const csVector3& trans) = 0; 00427 virtual const csVector3 GetPosition () const = 0; 00429 virtual void SetOrientation (const csMatrix3& trans) = 0; 00431 virtual const csMatrix3 GetOrientation () const = 0; 00433 virtual void SetTransform (const csOrthoTransform& trans) = 0; 00435 virtual const csOrthoTransform GetTransform () const = 0; 00437 virtual void SetLinearVelocity (const csVector3& vel) = 0; 00439 virtual const csVector3 GetLinearVelocity () const = 0; 00441 virtual void SetAngularVelocity (const csVector3& vel) = 0; 00443 virtual const csVector3 GetAngularVelocity () const = 0; 00444 00446 virtual void SetProperties (float mass, const csVector3& center, 00447 const csMatrix3& inertia) = 0; 00449 virtual void GetProperties (float* mass, csVector3* center, 00450 csMatrix3* inertia) = 0; 00452 virtual void AdjustTotalMass (float targetmass) = 0; 00453 00455 virtual void AddForce (const csVector3& force) = 0; 00457 virtual void AddTorque (const csVector3& force) = 0; 00459 virtual void AddRelForce (const csVector3& force) = 0; 00461 virtual void AddRelTorque (const csVector3& force) = 0 ; 00466 virtual void AddForceAtPos (const csVector3& force, const csVector3& pos) = 0; 00471 virtual void AddForceAtRelPos (const csVector3& force, 00472 const csVector3& pos) = 0; 00477 virtual void AddRelForceAtPos (const csVector3& force, 00478 const csVector3& pos) = 0; 00483 virtual void AddRelForceAtRelPos (const csVector3& force, 00484 const csVector3& pos) = 0; 00485 00487 virtual const csVector3 GetForce () const = 0; 00489 virtual const csVector3 GetTorque () const = 0; 00490 00491 /* 00493 virtual const csVector3& GetRelForce () const = 0; 00495 virtual const csVector3& GetRelTorque () const = 0; 00496 */ 00497 00498 /* 00500 virtual int GetJointCount () const = 0; 00501 */ 00502 00504 virtual void AttachMesh (iMeshWrapper* mesh) = 0; 00506 virtual csRef<iMeshWrapper> GetAttachedMesh () = 0; 00507 00512 virtual void SetMoveCallback (iDynamicsMoveCallback* cb) = 0; 00517 virtual void SetCollisionCallback (iDynamicsCollisionCallback* cb) = 0; 00518 00520 virtual void Collision (iRigidBody *other) = 0; 00521 00523 virtual void Update () = 0; 00524 }; 00525 00526 SCF_VERSION (iJoint, 0, 0, 1); 00527 00544 struct iJoint : public iBase 00545 { 00547 virtual void Attach (iRigidBody* body1, iRigidBody* body2) = 0; 00549 virtual csRef<iRigidBody> GetAttachedBody (int body) = 0; 00555 virtual void SetTransform (const csOrthoTransform &trans) = 0; 00557 virtual csOrthoTransform GetTransform () = 0; 00565 virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0; 00567 virtual bool IsXTransConstrained () = 0; 00569 virtual bool IsYTransConstrained () = 0; 00571 virtual bool IsZTransConstrained () = 0; 00573 virtual void SetMinimumDistance (const csVector3 &min) = 0; 00575 virtual csVector3 GetMinimumDistance () = 0; 00577 virtual void SetMaximumDistance (const csVector3 &max) = 0; 00579 virtual csVector3 GetMaximumDistance () = 0; 00585 virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0; 00587 virtual bool IsXRotConstrained () = 0; 00589 virtual bool IsYRotConstrained () = 0; 00591 virtual bool IsZRotConstrained () = 0; 00593 virtual void SetMinimumAngle (const csVector3 &min) = 0; 00595 virtual csVector3 GetMinimumAngle () = 0; 00597 virtual void SetMaximumAngle (const csVector3 &max) = 0; 00599 virtual csVector3 GetMaximumAngle () = 0; 00600 00606 virtual void SetBounce (const csVector3 & bounce ) = 0; 00608 virtual csVector3 GetBounce () = 0; 00610 virtual void SetDesiredVelocity (const csVector3 & velocity ) = 0; 00611 virtual csVector3 GetDesiredVelocity () = 0; 00613 virtual void SetMaxForce (const csVector3 & maxForce ) = 0; 00614 virtual csVector3 GetMaxForce () = 0; 00615 }; 00616 00617 #endif // __CS_IVARIA_DYNAMICS_H__ 00618
Generated for Crystal Space by doxygen 1.2.18