00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_IVARIA_ODE_H__
00021 #define __CS_IVARIA_ODE_H__
00022
00027 #include "csutil/scf_interface.h"
00028
00033 struct iODEFrameUpdateCallback : public virtual iBase
00034 {
00035 SCF_INTERFACE(iODEFrameUpdateCallback, 2, 0, 0);
00036
00038 virtual void Execute (float stepsize) = 0;
00039 };
00040
00046 struct iODEDynamicState : public virtual iBase
00047 {
00048 SCF_INTERFACE(iODEDynamicState, 2, 0, 0);
00049
00050
00052 virtual void SetGlobalERP (float erp) = 0;
00053 virtual float GlobalERP () = 0;
00054
00056 virtual void SetGlobalCFM (float cfm) = 0;
00057 virtual float GlobalCFM () = 0;
00058
00060 virtual void EnableStepFast (bool enable) = 0;
00061 virtual bool StepFastEnabled () = 0;
00062 virtual void SetStepFastIterations (int iter) = 0;
00063 virtual int StepFastIterations () = 0;
00064
00065 virtual void EnableQuickStep (bool enable) = 0;
00066 virtual bool QuickStepEnabled () = 0;
00067 virtual void SetQuickStepIterations (int iter) = 0;
00068 virtual int QuickStepIterations () = 0;
00069
00085 virtual void EnableFrameRate (bool enable) = 0;
00086 virtual bool FrameRateEnabled () = 0;
00087
00088 virtual void SetFrameRate (float hz) = 0;
00089 virtual float FrameRate () = 0;
00090
00091 virtual void SetFrameLimit (float hz) = 0;
00092 virtual float FrameLimit () = 0;
00093
00094 virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00095 virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00096
00102 virtual void EnableEventProcessing (bool enable) = 0;
00103 virtual bool EventProcessingEnabled () = 0;
00104
00116 virtual void EnableFastObjects (bool enable) = 0;
00117 virtual bool FastObjectsEnabled () = 0;
00118
00119 };
00120
00121 struct iODEBallJoint;
00122 struct iODEHingeJoint;
00123 struct iODEHinge2Joint;
00124 struct iODEAMotorJoint;
00125 struct iODEUniversalJoint;
00126 struct iODESliderJoint;
00127
00134 struct iODEDynamicSystemState : public virtual iBase
00135 {
00136 SCF_INTERFACE(iODEDynamicSystemState, 2, 1, 0);
00137
00143 virtual void SetERP (float erp) = 0;
00144 virtual float ERP () = 0;
00145
00151 virtual void SetCFM (float cfm) = 0;
00152 virtual float CFM () = 0;
00153
00159 virtual void EnableStepFast (bool enable) = 0;
00160 virtual bool StepFastEnabled () = 0;
00161 virtual void SetStepFastIterations (int iter) = 0;
00162 virtual int StepFastIterations () = 0;
00163
00164 virtual void EnableQuickStep (bool enable) = 0;
00165 virtual bool QuickStepEnabled () = 0;
00166 virtual void SetQuickStepIterations (int iter) = 0;
00167 virtual int QuickStepIterations () = 0;
00168
00174 virtual void EnableAutoDisable (bool enable) = 0;
00175 virtual bool AutoDisableEnabled () =0;
00185 virtual void SetAutoDisableParams (float linear, float angular, int steps,
00186 float time)=0;
00187
00204 virtual void EnableFrameRate (bool enable) = 0;
00205 virtual bool FrameRateEnabled () = 0;
00206
00207 virtual void SetFrameRate (float hz) = 0;
00208 virtual float FrameRate () = 0;
00209
00210 virtual void SetFrameLimit (float hz) = 0;
00211 virtual float FrameLimit () = 0;
00212
00213 virtual void AddFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00214 virtual void RemoveFrameUpdateCallback (iODEFrameUpdateCallback *cb) = 0;
00215
00229 virtual void EnableFastObjects (bool enable) = 0;
00230 virtual bool FastObjectsEnabled () = 0;
00231
00233 virtual csPtr<iODEBallJoint> CreateBallJoint () = 0;
00234
00236 virtual csPtr<iODEHingeJoint> CreateHingeJoint () = 0;
00237
00239 virtual csPtr<iODEHinge2Joint> CreateHinge2Joint () = 0;
00240
00242 virtual csPtr<iODEAMotorJoint> CreateAMotorJoint () = 0;
00243
00245 virtual csPtr<iODEUniversalJoint> CreateUniversalJoint () = 0;
00246
00248 virtual csPtr<iODESliderJoint> CreateSliderJoint () = 0;
00249
00251 virtual void RemoveJoint (iODEBallJoint* joint) = 0;
00252
00254 virtual void RemoveJoint (iODEHingeJoint* joint) = 0;
00255
00257 virtual void RemoveJoint (iODEAMotorJoint* joint) = 0;
00258
00260 virtual void RemoveJoint (iODEUniversalJoint* joint) = 0;
00261
00263 virtual void RemoveJoint (iODESliderJoint* joint) = 0;
00264
00266 virtual void RemoveJoint (iODEHinge2Joint* joint) = 0;
00267
00275 virtual void SetContactMaxCorrectingVel (float v) = 0;
00276
00283 virtual float GetContactMaxCorrectingVel () = 0;
00284
00294 virtual void SetContactSurfaceLayer (float depth) = 0;
00295
00305 virtual float GetContactSurfaceLayer () = 0;
00306
00311 virtual void EnableOldInertia (bool enable) = 0;
00312 virtual bool IsOldInertiaEnabled () const = 0;
00313 };
00314
00318 enum ODEJointType
00319 {
00320 CS_ODE_JOINT_TYPE_UNKNOWN = -1,
00321 CS_ODE_JOINT_TYPE_BALL,
00322 CS_ODE_JOINT_TYPE_HINGE,
00323 CS_ODE_JOINT_TYPE_SLIDER,
00324 CS_ODE_JOINT_TYPE_CONTACT,
00325 CS_ODE_JOINT_TYPE_UNIVERSAL,
00326 CS_ODE_JOINT_TYPE_HINGE2,
00327 CS_ODE_JOINT_TYPE_FIXED,
00328 CS_ODE_JOINT_TYPE_AMOTOR
00329 };
00330
00334 struct iODEJointState : public virtual iBase
00335 {
00336 SCF_INTERFACE(iODEJointState, 2, 0, 0);
00337
00338 virtual ODEJointType GetType() = 0;
00339
00344 virtual void SetLoStop (const csVector3 &value) = 0;
00345
00351 virtual void SetHiStop (const csVector3 &value) = 0;
00352
00354 virtual void SetVel (const csVector3 &value) = 0;
00355
00361 virtual void SetFMax (const csVector3 &value) = 0;
00362
00373 virtual void SetFudgeFactor (const csVector3 &value) = 0;
00374
00380 virtual void SetBounce (const csVector3 &value) = 0;
00381
00386 virtual void SetCFM (const csVector3 &value) = 0;
00387
00389 virtual void SetStopERP (const csVector3 &value) = 0;
00390
00397 virtual void SetStopCFM (const csVector3 &value) = 0;
00398
00400 virtual void SetSuspensionERP (const csVector3 &value) = 0;
00401
00403 virtual void SetSuspensionCFM (const csVector3 &value) = 0;
00404
00406 virtual csVector3 GetLoStop () = 0;
00407
00409 virtual csVector3 GetHiStop () = 0;
00410
00412 virtual csVector3 GetVel () = 0;
00413
00418 virtual csVector3 GetMaxForce () = 0;
00419
00421 virtual csVector3 GetFudgeFactor () = 0;
00422
00424 virtual csVector3 GetBounce () = 0;
00425
00430 virtual csVector3 GetCFM () = 0;
00431
00433 virtual csVector3 GetStopERP () = 0;
00434
00436 virtual csVector3 GetStopCFM () = 0;
00437
00439 virtual csVector3 GetSuspensionERP () = 0;
00440
00442 virtual csVector3 GetSuspensionCFM () = 0;
00443
00444 };
00445
00449 struct iODEGeneralJointState : public virtual iBase
00450 {
00451 SCF_INTERFACE(iODEGeneralJointState, 2, 0, 0);
00452
00457 virtual void SetLoStop (float value, int axis) = 0;
00458
00464 virtual void SetHiStop (float value, int axis) = 0;
00465
00467 virtual void SetVel (float value, int axis) = 0;
00468
00474 virtual void SetFMax (float value, int axis) = 0;
00475
00486 virtual void SetFudgeFactor (float value, int axis) = 0;
00487
00493 virtual void SetBounce (float value, int axis) = 0;
00494
00499 virtual void SetCFM (float value, int axis) = 0;
00500
00502 virtual void SetStopERP (float value, int axis) = 0;
00503
00510 virtual void SetStopCFM (float value, int axis) = 0;
00511
00513 virtual void SetSuspensionERP (float value, int axis) = 0;
00514
00516 virtual void SetSuspensionCFM (float value, int axis) = 0;
00517
00519 virtual float GetLoStop (int axis) = 0;
00520
00522 virtual float GetHiStop (int axis) = 0;
00523
00525 virtual float GetVel (int axis) = 0;
00526
00531 virtual float GetFMax (int axis) = 0;
00532
00534 virtual float GetFudgeFactor (int axis) = 0;
00535
00537 virtual float GetBounce (int axis) = 0;
00538
00543 virtual float GetCFM (int axis) = 0;
00544
00546 virtual float GetStopERP (int axis) = 0;
00547
00549 virtual float GetStopCFM (int axis) = 0;
00550
00552 virtual float GetSuspensionERP (int axis) = 0;
00553
00555 virtual float GetSuspensionCFM (int axis) = 0;
00556
00564 virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00565
00567 virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00568
00570 virtual csVector3 GetFeedbackForce1 () = 0;
00571
00573 virtual csVector3 GetFeedbackTorque1 () = 0;
00574
00576 virtual csVector3 GetFeedbackForce2 () = 0;
00577
00579 virtual csVector3 GetFeedbackTorque2 () = 0;
00580
00581 };
00582
00583 struct iODESliderJoint : public virtual iODEGeneralJointState
00584 {
00585 SCF_INTERFACE(iODESliderJoint, 2, 1, 0);
00586
00588 virtual void SetSliderAxis (float x, float y, float z) = 0;
00589
00591 virtual csVector3 GetSliderAxis () = 0;
00592
00598 virtual float GetSliderPosition () = 0;
00599
00601 virtual float GetSliderPositionRate () = 0;
00602 };
00603
00611 struct iODEUniversalJoint : public virtual iODEGeneralJointState
00612 {
00613 SCF_INTERFACE(iODEUniversalJoint, 2, 1, 0);
00614
00616 virtual void SetUniversalAnchor (float x, float y, float z) = 0;
00617
00619 virtual void SetUniversalAxis1 (float x, float y, float z) = 0;
00620
00622 virtual void SetUniversalAxis2 (float x, float y, float z) = 0;
00623
00629 virtual csVector3 GetUniversalAnchor1 () = 0;
00630
00636 virtual csVector3 GetUniversalAnchor2 () = 0;
00637
00639 virtual csVector3 GetUniversalAxis1 () = 0;
00640
00642 virtual csVector3 GetUniversalAxis2 () = 0;
00643
00644 };
00645
00646 enum ODEAMotorMode
00647 {
00648 CS_ODE_AMOTOR_MODE_UNKNOWN = -1,
00649
00650 CS_ODE_AMOTOR_MODE_USER = 0,
00651 CS_ODE_AMOTOR_MODE_EULER,
00652
00653 CS_ODE_AMOTOR_MODE_LAST
00654 };
00655
00667 struct iODEAMotorJoint : public virtual iODEGeneralJointState
00668 {
00669 SCF_INTERFACE(iODEAMotorJoint, 2, 1, 0);
00670
00680 virtual void SetAMotorMode (ODEAMotorMode mode) = 0;
00681
00685 virtual ODEAMotorMode GetAMotorMode () = 0;
00686
00693 virtual void SetAMotorNumAxes (int axis_num) = 0;
00694
00699 virtual int GetAMotorNumAxes () = 0;
00700
00710 virtual void SetAMotorAxis (int axis_num, int rel_orient, float x, float y,
00711 float z) = 0;
00712
00721 virtual void SetAMotorAxis (int axis_num, int rel_orient,
00722 const csVector3 &axis) = 0;
00723
00727 virtual csVector3 GetAMotorAxis (int axis_num) = 0;
00728
00735 virtual int GetAMotorAxisRelOrientation (int axis_num) = 0;
00736
00744 virtual void SetAMotorAngle (int axis_num, float angle) = 0;
00745
00751 virtual float GetAMotorAngle (int axis_num) = 0;
00752
00758 virtual float GetAMotorAngleRate (int axis_num) = 0;
00759 };
00760
00765 struct iODEHinge2Joint : public virtual iODEGeneralJointState
00766 {
00767 SCF_INTERFACE(iODEHinge2Joint, 2, 1, 0);
00768
00773 virtual void SetHingeAnchor (const csVector3 &pos) = 0;
00774
00778 virtual void SetHingeAxis1 (const csVector3 &axis) = 0;
00779
00783 virtual void SetHingeAxis2 (const csVector3 &axis) = 0;
00784
00785
00790 virtual csVector3 GetHingeAnchor1 () = 0;
00791
00796 virtual csVector3 GetHingeAnchor2 () = 0;
00797
00801 virtual csVector3 GetHingeAxis1 () = 0;
00802
00806 virtual csVector3 GetHingeAxis2 () = 0;
00807
00814 virtual float GetHingeAngle () = 0;
00815
00819 virtual float GetHingeAngleRate1 () = 0;
00820
00824 virtual float GetHingeAngleRate2 () = 0;
00825
00829 virtual csVector3 GetAnchorError () = 0;
00830
00831 };
00832
00836 struct iODEHingeJoint : public virtual iODEGeneralJointState
00837 {
00838 SCF_INTERFACE(iODEHingeJoint, 2, 1, 0);
00839
00844 virtual void SetHingeAnchor (const csVector3 &pos) = 0;
00845
00849 virtual void SetHingeAxis (const csVector3 &axis) = 0;
00850
00855 virtual csVector3 GetHingeAnchor1 () = 0;
00856
00861 virtual csVector3 GetHingeAnchor2 () = 0;
00862
00866 virtual csVector3 GetHingeAxis () = 0;
00867
00874 virtual float GetHingeAngle () = 0;
00875
00879 virtual float GetHingeAngleRate () = 0;
00880
00884 virtual csVector3 GetAnchorError () = 0;
00885
00886 };
00887
00891 struct iODEBallJoint : public virtual iBase
00892 {
00893 SCF_INTERFACE(iODEBallJoint, 2, 0, 0);
00894
00899 virtual void SetBallAnchor (const csVector3 &pos) = 0;
00900
00905 virtual csVector3 GetBallAnchor1 () = 0;
00906
00911 virtual csVector3 GetBallAnchor2 () = 0;
00912
00916 virtual csVector3 GetAnchorError () = 0;
00917
00925 virtual void Attach (iRigidBody *body1, iRigidBody *body2) = 0;
00926
00928 virtual csRef<iRigidBody> GetAttachedBody (int body) = 0;
00929
00931 virtual csVector3 GetFeedbackForce1 () = 0;
00932
00934 virtual csVector3 GetFeedbackTorque1 () = 0;
00935
00937 virtual csVector3 GetFeedbackForce2 () = 0;
00938
00940 virtual csVector3 GetFeedbackTorque2 () = 0;
00941 };
00942
00943 #endif // __CS_IVARIA_ODE_H__