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 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 00526 virtual void SetBounce (const csVector3 & bounce ) = 0; 00528 virtual csVector3 GetBounce () = 0; 00530 virtual void SetDesiredVelocity (const csVector3 & velocity ) = 0; 00531 virtual csVector3 GetDesiredVelocity () = 0; 00533 virtual void SetMaxForce (const csVector3 & maxForce ) = 0; 00534 virtual csVector3 GetMaxForce () = 0; 00535 }; 00536 00537 #endif // __CS_IVARIA_DYNAMICS_H__ 00538
Generated for Crystal Space by doxygen 1.2.18