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   
00096   virtual void SetSimulationSpeed (float simulationspeed) = 0;
00097   
00101   virtual float GetSimulationSpeed () = 0;
00102   
00107   virtual void SetGravity (const csVector3& grav) = 0;
00108 
00112   virtual const csVector3 GetGravity () = 0;
00113 
00126   virtual void AddForceDuration (iPcMechanicsObject* pcobject,
00127         const csVector3& force, bool relative, const csVector3& position,
00128         float seconds) = 0;
00129 
00140   virtual void AddForceFrame (iPcMechanicsObject* pcobject,
00141         const csVector3& force, bool relative, const csVector3& position) = 0;
00142 
00155   virtual void AddForceTagged (iPcMechanicsObject* pcobject,
00156         const csVector3& force, bool relative, const csVector3& position,
00157         uint32 forceid) = 0;
00158 
00166   virtual void RemoveForceTagged (iPcMechanicsObject* pcobject,
00167         uint32 forceid) = 0;
00168 
00175   virtual void ClearForces (iPcMechanicsObject* pcobject) = 0;
00176 
00180   virtual void ClearAllForces () = 0;
00181 
00185   virtual csPtr<iRigidBody> CreateBody () = 0;
00186 
00191   virtual void RemoveBody (iRigidBody* body) = 0;
00192 
00199   virtual void AddBodyToGroup (iRigidBody* body, const char* group) = 0;
00200 
00206   virtual void RemoveBodyFromGroup (iRigidBody* body, const char* group) = 0;
00207 
00211   virtual iJoint* CreateJoint (iRigidBody* body1, iRigidBody* body2) = 0;
00212 
00216   virtual void RemoveJoint (iJoint* joint) = 0;
00217 
00222   virtual void DisableStepFast () = 0;
00227   virtual void EnableStepFast () = 0;
00231   virtual void EnableQuickStep () = 0;
00232 };
00233 
00284 struct iPcMechanicsObject : public virtual iBase
00285 {
00286   SCF_INTERFACE (iPcMechanicsObject, 0, 0, 1);
00287 
00294   virtual void SetMesh (iPcMesh* mesh) = 0;
00295 
00299   virtual iPcMesh* GetMesh () = 0;
00300 
00307   virtual void SetLight (iPcLight* light) = 0;
00308 
00312   virtual iPcLight* GetLight () = 0;
00313 
00320   virtual void SetCamera (iPcCamera* camera) = 0;
00321 
00325   virtual iPcCamera* GetCamera () = 0;
00326 
00333   virtual void SetMechanicsSystem (iPcMechanicsSystem* mechsys) = 0;
00334 
00338   virtual iPcMechanicsSystem* GetMechanicsSystem () = 0;
00339 
00343   virtual iRigidBody* GetBody () = 0;
00344 
00345 
00347   //Object properties.
00348 
00354   virtual void SetFriction (float friction) = 0;
00355 
00361   virtual void SetMass (float mass) = 0;
00362 
00368   virtual void SetElasticity (float elasticity) = 0;
00369 
00375   virtual void SetDensity (float density) = 0;
00376 
00382   virtual void SetSoftness (float softness) = 0;
00383 
00389   virtual void SetLift (const csVector3& lift) = 0;
00390 
00396   virtual void SetDrag (float drag) = 0;
00397 
00402   virtual float GetFriction () = 0;
00403 
00408   virtual float GetMass () = 0;
00409 
00414   virtual float GetElasticity () = 0;
00415 
00420   virtual float GetDensity () = 0;
00421 
00426   virtual float GetSoftness () = 0;
00427 
00432   virtual const csVector3& GetLift () = 0;
00433 
00438   virtual float GetDrag () = 0;
00439 
00440 
00442   //Initial velocities
00443 
00448   virtual void SetLinearVelocity (const csVector3& vel) = 0;
00449 
00454   virtual void SetAngularVelocity (const csVector3& vel) = 0;
00455 
00456 
00458   //Reading velocities
00459 
00463   virtual const csVector3 GetLinearVelocity () = 0;
00464 
00468   virtual const csVector3 GetAngularVelocity () = 0;
00469 
00470 
00472   //Static objects
00473 
00479   virtual void MakeStatic (bool stat) = 0;
00480   
00484   virtual bool IsStatic () const = 0;
00485 
00486 
00488   //Colliders
00489 
00493   virtual void AttachColliderBoundingSphere () = 0;
00494 
00501   virtual void AttachColliderSphere (float radius, const csVector3& offset) = 0;
00502 
00509   virtual void AttachColliderCylinder (float length, float radius,
00510         const csOrthoTransform& trans) = 0;
00511 
00515   virtual void AttachColliderBoundingBox () = 0;
00516 
00522   virtual void AttachColliderBox (const csVector3& size,
00523         const csOrthoTransform& trans) = 0;
00524 
00529   virtual void AttachColliderPlane (const csPlane3& plane) = 0;
00530 
00534   virtual void AttachColliderMesh () = 0;
00535 
00536 
00538   //Forces
00539 
00547   virtual void AddForceOnce (const csVector3& force, bool relative,
00548         const csVector3& position) = 0;
00549 
00558   virtual void AddForceDuration (const csVector3& force, bool relative,
00559         const csVector3& position, float seconds) = 0;
00560 
00568   virtual void AddForceFrame (const csVector3& force, bool relative,
00569         const csVector3& position) = 0;
00570 
00580   virtual uint32 AddForceTagged (const csVector3& force, bool relative, 
00581         const csVector3& position) = 0;
00582 
00587   virtual void RemoveForceTagged (uint32 forceid) = 0;
00588 
00592   virtual void ClearForces () = 0;
00593 
00594 
00596   //Groups and Joints
00597 
00603   virtual void AddToGroup (const char* group) = 0;
00604 
00609   virtual void RemoveFromGroup (const char* group) = 0;
00610 
00614   virtual iJoint* CreateJoint (iPcMechanicsObject* other) = 0;
00615 
00619   virtual csVector3 LocalToWorld(csVector3 local) = 0;
00623   virtual csVector3 WorldToLocal(csVector3 world) = 0;
00624 };
00625 
00641 struct iPcMechanicsJoint : public virtual iBase
00642 {
00643   SCF_INTERFACE (iPcMechanicsJoint, 0, 0, 1);
00644 
00648   virtual iJoint* GetJoint () = 0;
00649 };
00650 
00651 #endif // __CEL_PF_MECHANICS_SYSTEM__
00652 

Generated for CEL: Crystal Entity Layer by doxygen 1.4.7