00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
00451
00456 virtual void SetLinearVelocity (const csVector3& vel) = 0;
00457
00462 virtual void SetAngularVelocity (const csVector3& vel) = 0;
00463
00464
00466
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
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
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
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