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

CarTemplate.h

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------------
00002 // File Name: CarTemplate.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 
00015 #ifndef TA_CARTEMPLATE_H
00016 #define TA_CARTEMPLATE_H
00017 
00018 #ifndef TA_REFCOUNT_H
00019 #include "../Common/RefCount.h"
00020 #endif // TA_REFCOUNT_H
00021 
00022 #ifndef TA_VECTOR_H
00023 #include "../Common/Vector.h"
00024 #endif // TA_VECTOR_H
00025 
00026 #ifndef TA_LIST_H
00027 #include "../Common/List.h"
00028 #endif // TA_LIST_H
00029 
00030 #ifndef TA_ARRAY_H
00031 #include "../Common/Array.h"
00032 #endif // TA_ARRAY_H
00033 
00034 #ifndef TA_PHYSICSCOMMON_H
00035 #include "PhysicsCommon.h"
00036 #endif // TA_PHYSICSCOMMON_H
00037 
00038 TA_OBFUSCATION_SKIP_PASS_2
00039 
00040 namespace TA
00041 {
00042 
00043 class CollisionObjectConvex;
00044 class CollisionObjectCapsule;
00045 class CollisionObjectCylinder;
00046 class CollisionObjectSphere;
00047 class CollisionObjectCombo;
00048 class DynamicObjectCar;
00049 class SurfaceAttribute;
00050 
00051 class TAPHYSICS_CLASS CarTemplate : public RefCount
00052 {
00053 public:
00054     TA_OBFUSCATION_RESERVED_ON
00055 
00056     typedef float (TAC_CALL *FnTorqueCurve)(float fRadsPerSec);
00057     typedef float (TAC_CALL *FnSlipRatioToNormalisedTraction)(float fSlipRatio, const SurfaceAttribute& surfaceAttribute);
00058     typedef float (TAC_CALL *FnSlipAngleToLateralForce)(float fSlipAngle, float fLongitudinalSlipRatio, const SurfaceAttribute& surfaceAttribute);
00059 
00060     struct Wheel
00061     {
00062     public:
00063         Wheel();
00064         void Clear();
00065 
00066         void SetSuspensionTop(const Vec3& v3SuspensionTop);
00067         const Vec3& GetSuspensionTop() const;
00068 
00069         void SetSuspensionBottom(const Vec3& v3SuspensionBottom);
00070         const Vec3& GetSuspensionBottom() const;
00071 
00072         void SetRadius(float fRadius);
00073         float GetRadius() const;
00074 
00075         void SetInertia(float fInertia);
00076         float GetInertia() const;
00077 
00078         void SetBrakeTorque(float fBrakeTorque);
00079         float GetBrakeTorque() const;
00080 
00081         void SetRollResistance(float fRollResistance);
00082         float GetRollResistance() const;
00083 
00084         void SetSuspensionSpringConstant(float fSuspensionSpringConstant);
00085         float GetSuspensionSpringConstant() const;
00086 
00087         void SetSuspensionDampingConstant(float fSuspensionDampingConstant);
00088         float GetSuspensionDampingConstant() const;
00089         
00090         void SetSlipRatioToNormalisedTractionCallBack(FnSlipRatioToNormalisedTraction pCallBack);
00091         FnSlipRatioToNormalisedTraction GetSlipRatioToNormalisedTractionCallBack() const;
00092     
00093         void SetSlipAngleToLateralForceCallBack(FnSlipAngleToLateralForce pCallBack);
00094         FnSlipAngleToLateralForce GetSlipAngleToLateralForceCallBack() const;
00095 
00096         void SetSteeringFlag(bool bSteering);
00097         bool GetSteeringFlag() const;
00098 
00099         void SetDrivingFlag(bool bDriving);
00100         bool GetDrivingFlag() const;
00101 
00102         void SetHandBrakeFlag(bool bHandBrake);
00103         bool GetHandBrakeFlag() const;
00104 
00105         TA_OBFUSCATION_RESERVED_OFF
00106     private:
00107 
00108         Vec3 m_v3SuspensionTop;
00109         Vec3 m_v3SuspensionBottom;
00110         float m_fRadius;
00111         float m_fInertia;
00112         float m_fBrakeTorque;
00113         float m_fRollResistance;
00114         float m_fSuspensionSpringConstant;
00115         float m_fSuspensionDampingConstant;
00116         FnSlipRatioToNormalisedTraction m_pFnSlipRatioToNormalisedTraction;
00117         FnSlipAngleToLateralForce m_pFnSlipAngleToLateralForce;
00118         struct
00119         {
00120             bool bSteering      : 1;
00121             bool bDriving       : 1;
00122             bool bHandBrake     : 1;
00123         } m_flags;
00124     };
00125     TA_OBFUSCATION_RESERVED_ON
00126 
00127     void BeginInitialise();
00128     void EndInitialise();
00129     void Finalise();
00130 
00131     void AddCollisionObject(CollisionObjectConvex* pCollisionObject);
00132     void AddCollisionObject(CollisionObjectCapsule* pCollisionObject);
00133     void AddCollisionObject(CollisionObjectCylinder* pCollisionObject);
00134     void AddCollisionObject(CollisionObjectSphere* pCollisionObject);
00135 
00136     void AddWheel(const Wheel& wheel);
00137 
00138     void SetOrientation(const Vec3& v3Forward, const Vec3& v3Up);
00139     const Vec3& GetForward() const;
00140     const Vec3& GetUp() const;
00141 
00142     int GetNumGears() const;
00143     void SetNumGears(int nNumGears);
00144     void SetGearRatio(int nIndex, float fGearRatio);
00145     float GetGearRatio(int nIndex) const;
00146 
00147     void SetDifferentialRatio(float fDifferentialRatio);
00148     float GetDifferentialRatio() const;
00149 
00150     void SetMass(float fMass);
00151     float GetMass() const;
00152 
00153     void SetTransmissionEfficiency(float fTransmissionEfficiency);
00154     float GetTransmissionEfficiency() const;
00155 
00156     void SetTorqueMultiplier(float fTorqueMultiplier);
00157     float GetTorqueMultiplier() const;
00158     void SetTorqueCurve(FnTorqueCurve pFnTorqueCurve);
00159 
00160     void SetAirResistance(float fAirResistance);
00161     float GetAirResistance() const;
00162 
00163     void SetDownForce(float fDownForce);
00164     float GetDownForce() const;
00165 
00166     void SetAntiRollFudge(float fAntiRollFudge);
00167     float GetAntiRollFudge() const;
00168 
00169     static CarTemplate* TAC_CALL CreateNew();
00170     static float TAC_CALL StandardTorqueCurve(float fRadsPerSec);
00171     static float TAC_CALL StandardSlipRatioToNormalisedTraction(float fSlipRatio, const SurfaceAttribute& surfaceAttribute);
00172     static float TAC_CALL StandardSlipAngleToLateralForce(float fSlipAngle, float fLongitudinalSlipRatio, const SurfaceAttribute& surfaceAttribute);
00173 
00174 
00175 protected:
00176     CarTemplate();
00177     ~CarTemplate();
00178 
00179     TA_OBFUSCATION_RESERVED_OFF
00180 
00181 private:
00182     friend class DynamicObjectCar;
00183 
00184     bool m_bInitialising;
00185     CollisionObjectCombo* m_pCollisionObjectCombo;
00186     float m_fDifferentialRatio;
00187     float m_fMass;
00188     float m_fTransmissionEfficiency;
00189     float m_fTorqueMultiplier;
00190     FnTorqueCurve m_pFnTorqueCurve;
00191     float m_fAirResistance;
00192     float m_fDownForce;
00193     float m_fAntiRollFudge;
00194     List<Wheel> m_wheelList;
00195     Array<float> m_gearArray;
00196     Vec3 m_v3Forward;
00197     Vec3 m_v3Up;
00198 
00199     void Zero();
00200 };
00201 
00202 }
00203 
00204 #include "CarTemplate.inl"
00205 
00206 #endif // TA_CARTEMPLATE_H


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