10
#include "worldobject.h"
15
class CarObject : public WorldObject
18
CarObject(ssgEntity *bodymodel, ssgEntity *wheelmodel, ssgEntity *licplatemodel, dWorldID world, dSpaceID bigspace, sgVec3 initialpos);
20
void Recover(float dt);
21
void Simulate(float dt);
22
void Sustain(float dt);
23
void SetAccelerator(float v) { accelerator=v; }
24
void SetSteer(float v) { steer = v; }
25
void SetBrake(float v) { brake = v; }
26
void SetEBrake(bool b) { ebrake = b; }
27
float GetAccelerator(void) { return accelerator; }
28
float GetBrake(void) { return brake; }
29
void SetAction(bool a) { action = a; }
30
bool GetAction(void) { return action; }
31
ssgTransform *GetTransform(void) { return chassis_trf; }
32
void GetPos(sgVec3 dst) const { sgMat4 m; chassis_trf->getTransform(m); sgCopyVec3(dst, m[3]); }
33
float GetWheelVelocity(void);
34
bool IsBackWheelGeometry(dGeomID id) { return id==wheel_geoms[2] || id==wheel_geoms[3]; }
35
void SetGround(DynamicObject *dwo) { ground_object = dwo; }
36
bool IsStationary(void) const;
37
bool SnapShot(bool revert);
39
ssgSimpleState *FindState(const std::string &statename, ssgEntity *ent);
40
void SetBrakeLight(void);
41
ssgSimpleState *brakelightstate;
42
ssgTransform *chassis_trf;
43
ssgTransform *sink_trf; // for lowering center of mass
44
ssgTransform *wheel_trfs[4];
47
dBodyID wheel_bodies[4];
49
dGeomID transform_geom;
50
dGeomID wheel_geoms[4];
51
dJointID joint[4]; // joint[0..1] are the front wheels
60
DynamicObject *ground_object;
61
bool snapshot_available;