True Axis Physics SDK 1.2.0.1 Beta Documentation
www.trueaxis.com

DynamicObjectCar.h

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------------
00002 // File Name: DynamicObjectCar.h
00003 // Description:
00006 //
00007 // Copyright (C) 2004 - 2006 True Axis Pty Ltd, Australia. 
00008 // All Rights Reserved.
00009 //
00010 // History:
00011 //      Created File.
00012 //---------------------------------------------------------------------------------
00013 
00014 #ifndef TA_DYNAMICOBJECTCAR_H
00015 #define TA_DYNAMICOBJECTCAR_H
00016 
00017 #ifndef TA_DYNAMICOBJECT_H
00018 #include "DynamicObject.h"
00019 #endif // TA_DYNAMICOBJECT_H
00020 
00021 TA_OBFUSCATION_SKIP_PASS_2
00022 
00023 namespace TA
00024 {
00025 
00026 class CollisionObjectCombo;
00027 class CarTemplate;
00028 class SurfaceAttribute;
00029 
00030 class TAPHYSICS_CLASS DynamicObjectCar : public DynamicObject
00031 {
00032 public:
00033     enum WheelFlag
00034     {
00035         WHEEL_FLAG_STEERING =               0x1,
00036         WHEEL_FLAG_DRIVING =                0x2,
00037         WHEEL_FLAG_HAND_BRAKE_AFFECTED =    0x4,
00038         WHEEL_FLAG_CAMBER_CHANGED =         0x8,
00039     };
00040     TA_OBFUSCATION_RESERVED_ON
00041     struct Wheel
00042     {
00043     public:
00044         typedef float (TAC_CALL *FnSlipRatioToNormalisedTraction)(float fSlipRatio, const SurfaceAttribute& surfaceAttribute);
00045         typedef float (TAC_CALL *FnSlipAngleToLateralForce)(float fSlipAngle, float fLongitudinalSlipRatio, const SurfaceAttribute& surfaceAttribute);
00046 
00047         const MFrame& GetLocalGraphicsFrame() const;
00048         
00049         void SetRadius(float fRadius);
00050         float GetRadius() const;
00051 
00052         void SetInvInertia(float fInvInertia);
00053         float GetInvInertia() const;
00054 
00055         void SetBrakeTorque(float fBrakeTorque);
00056         float GetBrakeTorque() const;
00057 
00058         void SetRollResistance(float fRollResistance);
00059         float GetRollResistance() const;
00060 
00061         void SetSuspensionSpringConstant(float fSuspensionSpringConstant);
00062         float GetSuspensionSpringConstant() const;
00063 
00064         void SetSuspensionDampingConstant(float fSuspensionDampingConstant);
00065         float GetSuspensionDampingConstant() const;
00066         
00067         void SetSlipRatioToNormalisedTractionCallBack(FnSlipRatioToNormalisedTraction pCallBack);
00068         FnSlipRatioToNormalisedTraction GetSlipRatioToNormalisedTractionCallBack() const;
00069     
00070         void SetSlipAngleToLateralForceCallBack(FnSlipAngleToLateralForce pCallBack);
00071         FnSlipAngleToLateralForce GetSlipAngleToLateralForceCallBack() const;
00072 
00073         void SetSteeringFlag(bool bSteering);
00074         bool GetSteeringFlag() const;
00075 
00076         void SetDrivingFlag(bool bDriving);
00077         bool GetDrivingFlag() const;
00078 
00079         void SetHandBrakeFlag(bool bHandBrake);
00080         bool GetHandBrakeFlag() const;
00081 
00082         void SetYaw(float fYaw);
00083         float GetYaw() const;
00084 
00085         void SetPitch(float fPitch);
00086         float GetPitch() const;
00087 
00088         void SetPitchVelocity(float fPitchVelocity);
00089         float GetPitchVelocity() const;
00090 
00091         void SetCamberAngle(float fCamberAngle);
00092         float GetCamberAngle() const;
00093 
00094         TA_OBFUSCATION_RESERVED_OFF
00095 
00096     private:
00097         friend class DynamicObjectCar;
00098 
00099         MFrame m_localGraphicsFrame;
00100         Mat33 m_m33DefaultRotation;
00101         Mat33 m_m33TotalRotation;       
00102         Vec3 m_v3AccumulatedImpulse;
00103         float m_fRadius;
00104         float m_fInvRadius;
00105         float m_fPitchVelocity;
00106         float m_fPitch;
00107         float m_fCamberAngle;
00108         float m_fYaw;
00109         float m_fRollResistance;
00110         float m_fBrakeTorque;
00111         float m_fInvInertia;
00112         float m_fSuspensionSpringConstant;
00113         float m_fSuspensionDampingConstant;
00114         float (TAC_CALL *m_pFnSlipRatioToNormalisedTraction)(float fSlipRatio, const SurfaceAttribute& surfaceAttribute);
00115         float (TAC_CALL *m_pFnSlipAngleToLateralForce)(float fSlipAngle, float fLongitudinalSlipRatio, const SurfaceAttribute& surfaceAttribute);
00116         u32 m_nFlags;
00117     };
00118 
00119     TA_OBFUSCATION_RESERVED_ON
00121 
00122     void Initialise(CarTemplate* pCarTemplate);
00123     void Initialise(const Char* szFileName);
00124     void Finalise();
00126 
00128 
00129     virtual void Update(float fDt);
00130 
00131     void ClearControls();
00132     void UpdateControls(
00133         float fSteeringAngle,
00134         float fAccelerator,
00135         float fBrake,
00136         float fHandBrake,
00137         float fSteeringHelp,
00138         float fTractionControl,
00139         int nGear = -1);
00141 
00142 
00144 
00145     float GetRPM() const;
00146     int GetGear() const;
00147     int GetNumGears() const;
00148     float GetCarSpeedFromWheels();
00149     
00150     void SetTorqueMultiplier(float fTorqueMultiplier);
00151     float GetTorqueMultiplier() const;
00152 
00153     void SetAntiRollFudge(float fAntiRollFudge);
00154     float GetAntiRollFudge() const;
00155     const Wheel& GetWheel(int nIndex) const;
00156     Wheel& GetWheel(int nIndex);
00157     int GetNumWheels() const;
00158 
00159     void SetOrientation(const Vec3& v3Forward, const Vec3& v3Up);
00160     const Vec3& GetForward() const;
00161     const Vec3& GetUp() const;
00163 
00164     static DynamicObjectCar* TAC_CALL CreateNew();
00165 
00166 protected:
00167     DynamicObjectCar();
00168     ~DynamicObjectCar();
00169 
00170     TA_OBFUSCATION_RESERVED_OFF
00171 
00172 private:
00173     struct Controls
00174     {
00175         float fSteeringAngle;
00176         float fAccelerator;
00177         float fBrake;
00178         float fHandBrake;
00179         float fSteeringHelp;
00180         float fTractionControl;
00181         int nGear;
00182     };
00183 
00184     Controls m_controls;
00185     Vec3 m_v3Forward;
00186     Vec3 m_v3Up;
00187     Array<Wheel, false> m_wheelArray;
00188 
00189     int m_nCurrentGear;
00190 
00191     float m_fEngineRadsPerSec;
00192     float m_fInvNumDrivingWheels;
00193 
00194     Array<float, false> m_gearRatioArray;
00195     float m_fDifferentialRatio;
00196     float m_fTransmissionEfficiency;
00197     float m_fTorqueMultiplier;
00198     float m_fAntiRollFudge;
00199     float (TAC_CALL *m_pFnTorqueCurve)(float fRadsPerSec);
00200 
00201     float m_fAirResistance;
00202     float m_fDownForce;
00203 
00204     void InitialiseCommon();
00205     void UpdateDefaultWheelRotation(Wheel& wheel);
00206 };
00207 
00208 }
00209 
00210 #include "DynamicObjectCar.inl"
00211 
00212 #endif // TA_DYNAMICOBJECTCAR_H


© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.