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