Merge pull request #49 from eightyeight/vehicle-steering

Vehicle steering return-to-centre merged into development branch.
This commit is contained in:
SilentMike 2013-01-11 08:39:35 -08:00
commit b2e2c7b50f
2 changed files with 39 additions and 0 deletions

View file

@ -172,6 +172,10 @@ VehicleData::VehicleData()
jetEnergyDrain = 0.8f;
minJetEnergy = 1;
steeringReturn = 0.0f;
steeringReturnSpeedScale = 0.01f;
powerSteering = false;
for (S32 i = 0; i < Body::MaxSounds; i++)
body.sound[i] = 0;
@ -292,6 +296,10 @@ void VehicleData::packData(BitStream* stream)
stream->write(jetEnergyDrain);
stream->write(minJetEnergy);
stream->write(steeringReturn);
stream->write(steeringReturnSpeedScale);
stream->writeFlag(powerSteering);
stream->writeFlag(cameraRoll);
stream->write(cameraLag);
stream->write(cameraDecay);
@ -384,6 +392,10 @@ void VehicleData::unpackData(BitStream* stream)
stream->read(&jetEnergyDrain);
stream->read(&minJetEnergy);
stream->read(&steeringReturn);
stream->read(&steeringReturnSpeedScale);
powerSteering = stream->readFlag();
cameraRoll = stream->readFlag();
stream->read(&cameraLag);
stream->read(&cameraDecay);
@ -462,6 +474,13 @@ void VehicleData::initPersistFields()
addField( "minJetEnergy", TypeF32, Offset(minJetEnergy, VehicleData),
"Minimum vehicle energy level to begin jetting." );
addField( "steeringReturn", TypeF32, Offset(steeringReturn, VehicleData),
"Rate at which the vehicle's steering returns to forwards when it is moving." );
addField( "steeringReturnSpeedScale", TypeF32, Offset(steeringReturnSpeedScale, VehicleData),
"Amount of effect the vehicle's speed has on its rate of steering return." );
addField( "powerSteering", TypeBool, Offset(powerSteering, VehicleData),
"If true, steering does not auto-centre while the vehicle is being steered by its driver." );
addField( "massCenter", TypePoint3F, Offset(massCenter, VehicleData),
"Defines the vehicle's center of mass (offset from the origin of the model)." );
addField( "massBox", TypePoint3F, Offset(massBox, VehicleData),
@ -1085,6 +1104,22 @@ void Vehicle::updateMove(const Move* move)
mSteering.y = 0;
}
// Steering return
if(mDataBlock->steeringReturn > 0.0f &&
(!mDataBlock->powerSteering || (move->yaw == 0.0f && move->pitch == 0.0f)))
{
Point2F returnAmount(mSteering.x * mDataBlock->steeringReturn * TickSec,
mSteering.y * mDataBlock->steeringReturn * TickSec);
if(mDataBlock->steeringReturnSpeedScale > 0.0f)
{
Point3F vel;
mWorldToObj.mulV(getVelocity(), &vel);
returnAmount += Point2F(mSteering.x * vel.y * mDataBlock->steeringReturnSpeedScale * TickSec,
mSteering.y * vel.y * mDataBlock->steeringReturnSpeedScale * TickSec);
}
mSteering -= returnAmount;
}
// Jetting flag
if (move->trigger[3]) {
if (!mJetting && getEnergyLevel() >= mDataBlock->minJetEnergy)

View file

@ -107,6 +107,10 @@ struct VehicleData: public ShapeBaseData
F32 jetEnergyDrain; ///< Energy drain/tick
F32 minJetEnergy;
F32 steeringReturn;
F32 steeringReturnSpeedScale;
bool powerSteering;
ParticleEmitterData * dustEmitter;
S32 dustID;
F32 triggerDustHeight; ///< height vehicle has to be under to kick up dust