mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 15:44:36 +00:00
Merge pull request #49 from eightyeight/vehicle-steering
Vehicle steering return-to-centre merged into development branch.
This commit is contained in:
commit
b2e2c7b50f
2 changed files with 39 additions and 0 deletions
|
|
@ -172,6 +172,10 @@ VehicleData::VehicleData()
|
||||||
jetEnergyDrain = 0.8f;
|
jetEnergyDrain = 0.8f;
|
||||||
minJetEnergy = 1;
|
minJetEnergy = 1;
|
||||||
|
|
||||||
|
steeringReturn = 0.0f;
|
||||||
|
steeringReturnSpeedScale = 0.01f;
|
||||||
|
powerSteering = false;
|
||||||
|
|
||||||
for (S32 i = 0; i < Body::MaxSounds; i++)
|
for (S32 i = 0; i < Body::MaxSounds; i++)
|
||||||
body.sound[i] = 0;
|
body.sound[i] = 0;
|
||||||
|
|
||||||
|
|
@ -292,6 +296,10 @@ void VehicleData::packData(BitStream* stream)
|
||||||
stream->write(jetEnergyDrain);
|
stream->write(jetEnergyDrain);
|
||||||
stream->write(minJetEnergy);
|
stream->write(minJetEnergy);
|
||||||
|
|
||||||
|
stream->write(steeringReturn);
|
||||||
|
stream->write(steeringReturnSpeedScale);
|
||||||
|
stream->writeFlag(powerSteering);
|
||||||
|
|
||||||
stream->writeFlag(cameraRoll);
|
stream->writeFlag(cameraRoll);
|
||||||
stream->write(cameraLag);
|
stream->write(cameraLag);
|
||||||
stream->write(cameraDecay);
|
stream->write(cameraDecay);
|
||||||
|
|
@ -384,6 +392,10 @@ void VehicleData::unpackData(BitStream* stream)
|
||||||
stream->read(&jetEnergyDrain);
|
stream->read(&jetEnergyDrain);
|
||||||
stream->read(&minJetEnergy);
|
stream->read(&minJetEnergy);
|
||||||
|
|
||||||
|
stream->read(&steeringReturn);
|
||||||
|
stream->read(&steeringReturnSpeedScale);
|
||||||
|
powerSteering = stream->readFlag();
|
||||||
|
|
||||||
cameraRoll = stream->readFlag();
|
cameraRoll = stream->readFlag();
|
||||||
stream->read(&cameraLag);
|
stream->read(&cameraLag);
|
||||||
stream->read(&cameraDecay);
|
stream->read(&cameraDecay);
|
||||||
|
|
@ -462,6 +474,13 @@ void VehicleData::initPersistFields()
|
||||||
addField( "minJetEnergy", TypeF32, Offset(minJetEnergy, VehicleData),
|
addField( "minJetEnergy", TypeF32, Offset(minJetEnergy, VehicleData),
|
||||||
"Minimum vehicle energy level to begin jetting." );
|
"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),
|
addField( "massCenter", TypePoint3F, Offset(massCenter, VehicleData),
|
||||||
"Defines the vehicle's center of mass (offset from the origin of the model)." );
|
"Defines the vehicle's center of mass (offset from the origin of the model)." );
|
||||||
addField( "massBox", TypePoint3F, Offset(massBox, VehicleData),
|
addField( "massBox", TypePoint3F, Offset(massBox, VehicleData),
|
||||||
|
|
@ -1085,6 +1104,22 @@ void Vehicle::updateMove(const Move* move)
|
||||||
mSteering.y = 0;
|
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
|
// Jetting flag
|
||||||
if (move->trigger[3]) {
|
if (move->trigger[3]) {
|
||||||
if (!mJetting && getEnergyLevel() >= mDataBlock->minJetEnergy)
|
if (!mJetting && getEnergyLevel() >= mDataBlock->minJetEnergy)
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,10 @@ struct VehicleData: public ShapeBaseData
|
||||||
F32 jetEnergyDrain; ///< Energy drain/tick
|
F32 jetEnergyDrain; ///< Energy drain/tick
|
||||||
F32 minJetEnergy;
|
F32 minJetEnergy;
|
||||||
|
|
||||||
|
F32 steeringReturn;
|
||||||
|
F32 steeringReturnSpeedScale;
|
||||||
|
bool powerSteering;
|
||||||
|
|
||||||
ParticleEmitterData * dustEmitter;
|
ParticleEmitterData * dustEmitter;
|
||||||
S32 dustID;
|
S32 dustID;
|
||||||
F32 triggerDustHeight; ///< height vehicle has to be under to kick up dust
|
F32 triggerDustHeight; ///< height vehicle has to be under to kick up dust
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue