propclass/mechsys.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2005 by Jorrit Tyberghein 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef __CEL_PF_MECHANICS_SYSTEM__ 00021 #define __CEL_PF_MECHANICS_SYSTEM__ 00022 00023 #include "cstypes.h" 00024 #include "csutil/scf.h" 00025 00026 #include "propclass/mechcommon.h" 00027 00028 class csVector3; 00029 class csBox3; 00030 class csOrthoTransform; 00031 class csPlane3; 00032 struct iDynamicSystem; 00033 struct iRigidBody; 00034 struct iSector; 00035 struct iPcMesh; 00036 struct iPcLight; 00037 struct iPcCamera; 00038 struct iPcMechanicsObject; 00039 struct iJoint; 00040 00056 struct iPcMechanicsSystem : public virtual iBase 00057 { 00058 SCF_INTERFACE (iPcMechanicsSystem, 0, 0, 1); 00059 00065 virtual void SetDynamicSystem (iDynamicSystem* dynsys) = 0; 00066 00072 virtual void SetDynamicSystem (const char *dynsysname) = 0; 00073 00074 00078 virtual iDynamicSystem* GetDynamicSystem () = 0; 00079 00084 virtual void SetStepTime (float delta) = 0; 00085 00089 virtual float GetStepTime () const = 0; 00090 00095 virtual void SetGravity (const csVector3& grav) = 0; 00096 00100 virtual const csVector3 GetGravity () = 0; 00101 00114 virtual void AddForceDuration (iPcMechanicsObject* pcobject, 00115 const csVector3& force, bool relative, const csVector3& position, 00116 float seconds) = 0; 00117 00128 virtual void AddForceFrame (iPcMechanicsObject* pcobject, 00129 const csVector3& force, bool relative, const csVector3& position) = 0; 00130 00143 virtual void AddForceTagged (iPcMechanicsObject* pcobject, 00144 const csVector3& force, bool relative, const csVector3& position, 00145 uint32 forceid) = 0; 00146 00154 virtual void RemoveForceTagged (iPcMechanicsObject* pcobject, 00155 uint32 forceid) = 0; 00156 00163 virtual void ClearForces (iPcMechanicsObject* pcobject) = 0; 00164 00168 virtual void ClearAllForces () = 0; 00169 00173 virtual csPtr<iRigidBody> CreateBody () = 0; 00174 00179 virtual void RemoveBody (iRigidBody* body) = 0; 00180 00187 virtual void AddBodyToGroup (iRigidBody* body, const char* group) = 0; 00188 00194 virtual void RemoveBodyFromGroup (iRigidBody* body, const char* group) = 0; 00195 00199 virtual iJoint* CreateJoint (iRigidBody* body1, iRigidBody* body2) = 0; 00200 00204 virtual void RemoveJoint (iJoint* joint) = 0; 00205 00210 virtual void DisableStepFast () = 0; 00215 virtual void EnableStepFast () = 0; 00219 virtual void EnableQuickStep () = 0; 00220 }; 00221 00272 struct iPcMechanicsObject : public virtual iBase 00273 { 00274 SCF_INTERFACE (iPcMechanicsObject, 0, 0, 1); 00275 00282 virtual void SetMesh (iPcMesh* mesh) = 0; 00283 00287 virtual iPcMesh* GetMesh () = 0; 00288 00295 virtual void SetLight (iPcLight* light) = 0; 00296 00300 virtual iPcLight* GetLight () = 0; 00301 00308 virtual void SetCamera (iPcCamera* camera) = 0; 00309 00313 virtual iPcCamera* GetCamera () = 0; 00314 00321 virtual void SetMechanicsSystem (iPcMechanicsSystem* mechsys) = 0; 00322 00326 virtual iPcMechanicsSystem* GetMechanicsSystem () = 0; 00327 00331 virtual iRigidBody* GetBody () = 0; 00332 00333 00335 //Object properties. 00336 00342 virtual void SetFriction (float friction) = 0; 00343 00349 virtual void SetMass (float mass) = 0; 00350 00356 virtual void SetElasticity (float elasticity) = 0; 00357 00363 virtual void SetDensity (float density) = 0; 00364 00370 virtual void SetSoftness (float softness) = 0; 00371 00377 virtual void SetLift (const csVector3& lift) = 0; 00378 00384 virtual void SetDrag (float drag) = 0; 00385 00390 virtual float GetFriction () = 0; 00391 00396 virtual float GetMass () = 0; 00397 00402 virtual float GetElasticity () = 0; 00403 00408 virtual float GetDensity () = 0; 00409 00414 virtual float GetSoftness () = 0; 00415 00420 virtual const csVector3& GetLift () = 0; 00421 00426 virtual float GetDrag () = 0; 00427 00428 00430 //Initial velocities 00431 00436 virtual void SetLinearVelocity (const csVector3& vel) = 0; 00437 00442 virtual void SetAngularVelocity (const csVector3& vel) = 0; 00443 00444 00446 //Reading velocities 00447 00451 virtual const csVector3 GetLinearVelocity () = 0; 00452 00456 virtual const csVector3 GetAngularVelocity () = 0; 00457 00458 00460 //Static objects 00461 00467 virtual void MakeStatic (bool stat) = 0; 00468 00472 virtual bool IsStatic () const = 0; 00473 00474 00476 //Colliders 00477 00484 virtual void AttachColliderSphere (float radius, const csVector3& offset) = 0; 00485 00492 virtual void AttachColliderCylinder (float length, float radius, 00493 const csOrthoTransform& trans) = 0; 00494 00500 virtual void AttachColliderBox (const csVector3& size, 00501 const csOrthoTransform& trans) = 0; 00502 00507 virtual void AttachColliderPlane (const csPlane3& plane) = 0; 00508 00512 virtual void AttachColliderMesh () = 0; 00513 00514 00516 //Forces 00517 00525 virtual void AddForceOnce (const csVector3& force, bool relative, 00526 const csVector3& position) = 0; 00527 00536 virtual void AddForceDuration (const csVector3& force, bool relative, 00537 const csVector3& position, float seconds) = 0; 00538 00546 virtual void AddForceFrame (const csVector3& force, bool relative, 00547 const csVector3& position) = 0; 00548 00558 virtual uint32 AddForceTagged (const csVector3& force, bool relative, 00559 const csVector3& position) = 0; 00560 00565 virtual void RemoveForceTagged (uint32 forceid) = 0; 00566 00570 virtual void ClearForces () = 0; 00571 00572 00574 //Groups and Joints 00575 00581 virtual void AddToGroup (const char* group) = 0; 00582 00587 virtual void RemoveFromGroup (const char* group) = 0; 00588 00592 virtual iJoint* CreateJoint (iPcMechanicsObject* other) = 0; 00593 00597 virtual csVector3 LocalToWorld(csVector3 local) = 0; 00601 virtual csVector3 WorldToLocal(csVector3 world) = 0; 00602 }; 00603 00619 struct iPcMechanicsJoint : public virtual iBase 00620 { 00621 SCF_INTERFACE (iPcMechanicsJoint, 0, 0, 1); 00622 00626 virtual iJoint* GetJoint () = 0; 00627 }; 00628 00629 #endif // __CEL_PF_MECHANICS_SYSTEM__ 00630
Generated for CEL: Crystal Entity Layer by doxygen 1.4.6