00001
00002
00003
00006
00007
00008
00009
00010
00011
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.