00001 00002 #ifndef _VRSODE_BUGGY_CAR_H_ 00003 #define _VRSODE_BUGGY_CAR_H_ 00004 00005 #include "Car.h" 00006 00007 #include "vrsode/CollisionSpaceSimple.h" 00008 #include "vrsode/PhysicsBody.h" 00009 #include "vrsode/PhysicsJointHinge.h" 00010 #include "vrsode/PhysicsJointHinge2.h" 00011 #include "vrsode/PhysicsJointSlider.h" 00012 00013 #include <vrs/sharedobj.h> 00014 #include <vrs/camera.h> 00015 #include <vrs/sg/scenething.h> 00016 00017 namespace VRS 00018 { 00019 class Translation; 00020 } // namespace VRS 00021 00022 00023 namespace random_racer 00024 { 00025 00026 class BuggyCar : public Car 00027 { 00028 double m_springLengthFront; 00029 double m_springLengthRear; 00030 double m_springPowerFront; 00031 double m_springPowerRear; 00032 double m_springSpeedFront; 00033 double m_springSpeedRear; 00034 00035 double m_wheelRad; 00036 double m_wheelWidth; 00037 00038 double m_wheelMass; 00039 double m_bodyMass; 00040 double m_helperMass; 00041 00042 double m_carMaxSpeed; 00043 double m_carPower; 00044 00045 double m_suspensionSoftness; 00046 00047 double m_steeringRadius; 00048 00049 double m_wheelMu; 00050 double m_wheelSlip1; 00051 double m_wheelSlip2; 00052 00053 VRS::Vector m_wheelOffsetFL; 00054 VRS::Vector m_wheelOffsetFR; 00055 VRS::Vector m_wheelOffsetRL; 00056 VRS::Vector m_wheelOffsetRR; 00057 VRS::Vector m_axisOffsetFL; 00058 VRS::Vector m_axisOffsetFR; 00059 VRS::Vector m_axisOffsetRL; 00060 VRS::Vector m_axisOffsetRR; 00061 VRS::Vector m_chassisOffset; 00062 00063 VRS::Vector m_suspensionOffsetFL; 00064 VRS::Vector m_suspensionOffsetFR; 00065 VRS::Vector m_suspensionOffsetRL; 00066 VRS::Vector m_suspensionOffsetRR; 00067 00068 VRS::Vector m_steerOffsetFL; 00069 VRS::Vector m_steerOffsetFR; 00070 00071 VRS::Vector m_suspensionSoftnessOffsetFL; 00072 VRS::Vector m_suspensionSoftnessOffsetFR; 00073 VRS::Vector m_suspensionSoftnessOffsetRL; 00074 VRS::Vector m_suspensionSoftnessOffsetRR; 00075 00076 00077 VRS::SO<vrsode::PhysicsBody> m_hook; 00078 VRS::SO<vrsode::PhysicsJointSlider> m_hookJoint; 00079 00080 VRS::SO<VRS::SceneThing> m_rootNode; 00081 VRS::SO<vrsode::PhysicsBody> m_chassis; 00082 00083 VRS::SO<vrsode::PhysicsBody> m_wheelFL; 00084 VRS::SO<vrsode::PhysicsBody> m_wheelFR; 00085 VRS::SO<vrsode::PhysicsBody> m_wheelRL; 00086 VRS::SO<vrsode::PhysicsBody> m_wheelRR; 00087 00088 VRS::SO<vrsode::PhysicsBody> m_springFL; 00089 VRS::SO<vrsode::PhysicsBody> m_springFR; 00090 VRS::SO<vrsode::PhysicsBody> m_springRL; 00091 VRS::SO<vrsode::PhysicsBody> m_springRR; 00092 00093 VRS::SO<vrsode::PhysicsBody> m_suspensionFL; 00094 VRS::SO<vrsode::PhysicsBody> m_suspensionFR; 00095 VRS::SO<vrsode::PhysicsBody> m_suspensionRL; 00096 VRS::SO<vrsode::PhysicsBody> m_suspensionRR; 00097 00098 VRS::SO<vrsode::PhysicsBody> m_steerFL; 00099 VRS::SO<vrsode::PhysicsBody> m_steerFR; 00100 00101 VRS::SO<vrsode::PhysicsJointHinge> m_axisFL; 00102 VRS::SO<vrsode::PhysicsJointHinge> m_axisFR; 00103 VRS::SO<vrsode::PhysicsJointHinge> m_axisRL; 00104 VRS::SO<vrsode::PhysicsJointHinge> m_axisRR; 00105 00106 VRS::SO<vrsode::PhysicsJointHinge> m_suspensionSoftnessFL; 00107 VRS::SO<vrsode::PhysicsJointHinge> m_suspensionSoftnessFR; 00108 VRS::SO<vrsode::PhysicsJointHinge> m_suspensionSoftnessRL; 00109 VRS::SO<vrsode::PhysicsJointHinge> m_suspensionSoftnessRR; 00110 00111 VRS::SO<vrsode::PhysicsJointHinge> m_steerControlFL; 00112 VRS::SO<vrsode::PhysicsJointHinge> m_steerControlFR; 00113 00114 VRS::SO<vrsode::PhysicsJointSlider> m_springSliderFL; 00115 VRS::SO<vrsode::PhysicsJointSlider> m_springSliderFR; 00116 VRS::SO<vrsode::PhysicsJointSlider> m_springSliderRL; 00117 VRS::SO<vrsode::PhysicsJointSlider> m_springSliderRR; 00118 00119 void enableAllBodies(); 00120 00121 public: 00122 BuggyCar(VRS::SO<VRS::SceneThing>); 00123 ~BuggyCar(); 00124 00129 void accelerate(double); 00130 00131 void steer(double); 00132 00133 void handBreak(double); 00134 00135 void nitro(double); 00136 00137 VRS::SO<VRS::SceneThing> sceneThing(); 00138 00139 void attachCamera(VRS::SO<VRS::Camera>); 00140 00145 void setPosition(VRS::Vector); 00146 00151 void setPosition(double, double, double); 00152 00156 VRS::Vector position(); 00157 00162 inline VRS::SO<vrsode::CollisionBody> cameraHook() 00163 { 00164 return m_hook; 00165 } 00166 00167 inline VRS::SO<vrsode::CollisionBody> chassis() 00168 { 00169 return m_chassis; 00170 } 00171 00172 00173 }; 00174 00175 } 00176 00177 #endif
1.5.1