CEL

Public API Reference

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