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 #include "csgeom/vector3.h"
00028 class csBox3;
00029 class csOrthoTransform;
00030 class csPlane3;
00031 struct iDynamicSystem;
00032 struct iRigidBody;
00033 struct iSector;
00034 struct iPcMesh;
00035 struct iPcLight;
00036 struct iPcCamera;
00037 struct iPcMechanicsObject;
00038 struct iJoint;
00039 
00052 struct iPcMechanicsSystem : public virtual iBase
00053 {
00054   SCF_INTERFACE (iPcMechanicsSystem, 0, 0, 1);
00055 
00061   virtual void SetDynamicSystem (iDynamicSystem* dynsys) = 0;
00062 
00068   virtual void SetDynamicSystem (const char *dynsysname) = 0;
00069 
00070 
00074   virtual iDynamicSystem* GetDynamicSystem () = 0;
00075 
00080   virtual void SetStepTime (float delta) = 0;
00081 
00085   virtual float GetStepTime () const = 0;
00086   
00092   virtual void SetSimulationSpeed (float simulationspeed) = 0;
00093   
00097   virtual float GetSimulationSpeed () = 0;
00098   
00103   virtual void SetGravity (const csVector3& grav) = 0;
00104 
00108   virtual const csVector3 GetGravity () = 0;
00109 
00122   virtual void AddForceDuration (iPcMechanicsObject* pcobject,
00123         const csVector3& force, bool relative, const csVector3& position,
00124         float seconds) = 0;
00125 
00136   virtual void AddForceFrame (iPcMechanicsObject* pcobject,
00137         const csVector3& force, bool relative, const csVector3& position) = 0;
00138 
00151   virtual void AddForceTagged (iPcMechanicsObject* pcobject,
00152         const csVector3& force, bool relative, const csVector3& position,
00153         uint32 forceid) = 0;
00154 
00162   virtual void RemoveForceTagged (iPcMechanicsObject* pcobject,
00163         uint32 forceid) = 0;
00164 
00171   virtual void ClearForces (iPcMechanicsObject* pcobject) = 0;
00172 
00176   virtual void ClearAllForces () = 0;
00177 
00181   virtual csPtr<iRigidBody> CreateBody () = 0;
00182 
00187   virtual void RemoveBody (iRigidBody* body) = 0;
00188 
00195   virtual void AddBodyToGroup (iRigidBody* body, const char* group) = 0;
00196 
00202   virtual void RemoveBodyFromGroup (iRigidBody* body, const char* group) = 0;
00203 
00207   virtual iJoint* CreateJoint (iRigidBody* body1, iRigidBody* body2) = 0;
00208 
00212   virtual void RemoveJoint (iJoint* joint) = 0;
00213 
00218   virtual void DisableStepFast () = 0;
00223   virtual void EnableStepFast () = 0;
00227   virtual void EnableQuickStep () = 0;
00228 };
00229 
00292 struct iPcMechanicsObject : public virtual iBase
00293 {
00294   SCF_INTERFACE (iPcMechanicsObject, 1, 0, 0);
00295 
00302   virtual void SetMesh (iPcMesh* mesh) = 0;
00303 
00307   virtual iPcMesh* GetMesh () = 0;
00308 
00315   virtual void SetLight (iPcLight* light) = 0;
00316 
00320   virtual iPcLight* GetLight () = 0;
00321 
00328   virtual void SetCamera (iPcCamera* camera) = 0;
00329 
00333   virtual iPcCamera* GetCamera () = 0;
00334 
00341   virtual void SetMechanicsSystem (iPcMechanicsSystem* mechsys) = 0;
00342 
00346   virtual iPcMechanicsSystem* GetMechanicsSystem () = 0;
00347 
00351   virtual iRigidBody* GetBody () = 0;
00352 
00353 
00355   //Object properties.
00356 
00362   virtual void SetFriction (float friction) = 0;
00363 
00369   virtual void SetMass (float mass) = 0;
00370 
00376   virtual void SetElasticity (float elasticity) = 0;
00377 
00383   virtual void SetDensity (float density) = 0;
00384 
00390   virtual void SetSoftness (float softness) = 0;
00391 
00397   virtual void SetLift (const csVector3& lift) = 0;
00398 
00404   virtual void SetDrag (float drag) = 0;
00405 
00410   virtual float GetFriction () = 0;
00411 
00416   virtual float GetMass () = 0;
00417 
00422   virtual float GetElasticity () = 0;
00423 
00428   virtual float GetDensity () = 0;
00429 
00434   virtual float GetSoftness () = 0;
00435 
00440   virtual const csVector3& GetLift () = 0;
00441 
00446   virtual float GetDrag () = 0;
00447 
00448 
00450   //Initial velocities
00451 
00456   virtual void SetLinearVelocity (const csVector3& vel) = 0;
00457 
00462   virtual void SetAngularVelocity (const csVector3& vel) = 0;
00463 
00464 
00466   //Reading velocities
00467 
00471   virtual const csVector3 GetLinearVelocity () = 0;
00472 
00476   virtual const csVector3 GetAngularVelocity () = 0;
00477 
00483   virtual void MakeStatic (bool stat) = 0;
00484 
00488   virtual bool IsStatic () const = 0;
00489 
00494   virtual void SetCollisionCallbackEnabled (bool en) = 0;
00495 
00497   virtual bool IsCollisionCallbackEnabled () const = 0;
00498 
00500   //Colliders
00501 
00507   virtual void AttachColliderBoundingSphere (float radiusadjustment = 0.0f) = 0;
00508 
00515   virtual void AttachColliderSphere (float radius, const csVector3& offset) = 0;
00516 
00523   virtual void AttachColliderCylinder (float length, float radius,
00524         const csOrthoTransform& trans) = 0;
00525 
00530   virtual void AttachColliderBoundingBox (const csVector3& sizeadjustment = csVector3(0)) = 0;
00531 
00537   virtual void AttachColliderBox (const csVector3& size,
00538         const csOrthoTransform& trans) = 0;
00539 
00544   virtual void AttachColliderPlane (const csPlane3& plane) = 0;
00545 
00549   virtual void AttachColliderMesh () = 0;
00550 
00554   virtual void AttachColliderConvexMesh () = 0;
00555 
00556 
00558   //Forces
00559 
00567   virtual void AddForceOnce (const csVector3& force, bool relative,
00568         const csVector3& position) = 0;
00569 
00578   virtual void AddForceDuration (const csVector3& force, bool relative,
00579         const csVector3& position, float seconds) = 0;
00580 
00588   virtual void AddForceFrame (const csVector3& force, bool relative,
00589         const csVector3& position) = 0;
00590 
00600   virtual uint32 AddForceTagged (const csVector3& force, bool relative, 
00601         const csVector3& position) = 0;
00602 
00607   virtual void RemoveForceTagged (uint32 forceid) = 0;
00608 
00612   virtual void ClearForces () = 0;
00613 
00614 
00616   //Groups and Joints
00617 
00623   virtual void AddToGroup (const char* group) = 0;
00624 
00629   virtual void RemoveFromGroup (const char* group) = 0;
00630 
00634   virtual iJoint* CreateJoint (iPcMechanicsObject* other) = 0;
00635 
00639   virtual csVector3 LocalToWorld(csVector3 local) = 0;
00643   virtual csVector3 WorldToLocal(csVector3 world) = 0;
00644 };
00645 
00658 struct iPcMechanicsJoint : public virtual iBase
00659 {
00660   SCF_INTERFACE (iPcMechanicsJoint, 0, 0, 1);
00661 
00665   virtual iJoint* GetJoint () = 0;
00666 };
00667 
00668 #endif // __CEL_PF_MECHANICS_SYSTEM__
00669 

Generated for CEL: Crystal Entity Layer 2.0 by doxygen 1.7.6.1