09-09-2013, 02:45 AM
Steering should already work now, as it is. the cEntity::SteerVehicle is called when the packet is received, and it adds speed to the vehicle entity (any vehicle entity).
If you think you need special steering for entities, create a new virtual function in cEntity, let's call it OnSteered(cEntity & a_Driver, float a_Forward, float a_Sideways) and make it do what SteerVehicle does to m_AttachedTo. Then you can override it in any cEntity's descendant to provide specific steering.
If you think you need special steering for entities, create a new virtual function in cEntity, let's call it OnSteered(cEntity & a_Driver, float a_Forward, float a_Sideways) and make it do what SteerVehicle does to m_AttachedTo. Then you can override it in any cEntity's descendant to provide specific steering.
void cEntity::SteerVehicle(float a_Forward, float a_Sideways)
{
if (m_AttachedTo == NULL)
{
return;
}
m_AttachedTo->OnSteered(*this, a_Forward, a_Sideways);
}
void cEntity::OnSteered(cEntity & a_Driver, float a_Forward, float a_Sideways)
{
if ((a_Forward != 0) || (a_Sideways != 0))
{
Vector3d LookVector = a_Driver.GetLookVector();
double AddSpeedX = LookVector.x * a_Forward + LookVector.z * a_Sideways;
double AddSpeedZ = LookVector.z * a_Forward - LookVector.x * a_Sideways;
AddSpeed(AddSpeedX, 0, AddSpeedZ);
}
}

