Revision: 2655
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2655&view=rev
Author: ulteq
Date: 2012-05-24 23:39:49 +0000 (Thu, 24 May 2012)
Log Message:
-----------
-Codechange: reduced code smell in BeamEngine
Modified Paths:
--------------
trunk/source/main/gameplay/BeamEngine.cpp
trunk/source/main/gameplay/BeamEngine.h
trunk/source/main/gameplay/OutProtocol.cpp
trunk/source/main/gameplay/RoRFrameListener.cpp
Modified: trunk/source/main/gameplay/BeamEngine.cpp
===================================================================
--- trunk/source/main/gameplay/BeamEngine.cpp 2012-05-24 22:30:18 UTC (rev
2654)
+++ trunk/source/main/gameplay/BeamEngine.cpp 2012-05-24 23:39:49 UTC (rev
2655)
@@ -23,57 +23,48 @@
#include "Scripting.h"
BeamEngine::BeamEngine( float iddle, float max, float torque,
std::vector<float> gears, float diff, int trucknum) :
- clutch_time(0.2f)
- , shift_time(0.5f)
- , post_shift_time(0.2f)
-
- , numGears((int)gears.size() - 2)
- , gearsRatio( gears )
- , inertia(10.0)
+ apressure(0.0f)
+ , autocurAcc(0.0f)
+ , automode(AUTOMATIC)
+ , autoselect(DRIVE)
+ , brakingTorque(-torque / 5.0f)
, clutchForce(10000.0f)
-
+ , clutch_time(0.2f)
+ , contact(0.0f)
+ , curAcc(0.0f)
+ , curClutch(0.0f)
+ , curClutchTorque(0.0f)
+ , curEngineRPM(0.0f)
, curGear(0)
-
- , curEngineRPM(0.0f)
+ , curGearRange(0)
, curGearboxRPM(0.0f)
- , curClutch(0.0f)
- , curAcc(0.0f)
- , curClutchTorque(0.0f)
-
- , shifting(0)
- , postshifting(0)
-
- , autocurAcc(0)
- , starter(0)
- , autoselect(DRIVE)
-
, curTurboRPM(0.0f)
- , apressure(0)
- , automode(AUTOMATIC)
- , trucknum(trucknum)
- , torqueCurve (new TorqueCurve())
-
-
+ , engineTorque(torque - brakingTorque)
+ , gearsRatio(gears)
+ , hasair(true)
+ , hasturbo(true)
+ , hydropump(0.0f)
, iddleRPM(iddle)
+ , inertia(10.0f)
, maxRPM(max)
+ , numGears((int)gears.size() - 2)
+ , post_shift_time(0.2f)
+ , postshiftclock(0.0f)
+ , postshifting(0)
+ , prime(0)
+ , running(0)
+ , shift_time(0.5f)
+ , shiftclock(0.0f)
+ , shifting(0)
+ , shiftval(0)
, stallRPM(300.0f)
- , brakingTorque(-torque/5.0f)
- , engineTorque(torque - brakingTorque)
-
- , hasturbo(true)
- , hasair(true)
+ , starter(0)
+ , torqueCurve(new TorqueCurve())
+ , trucknum(trucknum)
, type('t')
- , running(0)
- , contact(0)
- , hydropump(0.0)
- , prime(0)
- , curGearRange(0)
- , shiftval(0)
- , shiftclock(0)
- , postshiftclock(0)
{
gearsRatio[0] = -gearsRatio[0];
- for(std::vector< float >::iterator it = gearsRatio.begin(); it !=
gearsRatio.end(); ++it)
+ for (std::vector< float >::iterator it = gearsRatio.begin(); it !=
gearsRatio.end(); ++it)
{
(*it) *= diff;
}
@@ -81,27 +72,32 @@
void BeamEngine::setOptions(float einertia, char etype, float eclutch, float
ctime, float stime, float pstime)
{
- inertia=einertia;
- type=etype;
- clutchForce=eclutch;
+ inertia = einertia;
+ type = etype;
+ clutchForce = eclutch;
- if (ctime > 0) clutch_time=ctime;
- if (stime > 0) shift_time=stime;
- if (pstime > 0) post_shift_time=pstime;
+ clutch_time = std::max(0.0f, ctime);
+ post_shift_time = std::max(0.0f, pstime);
+ shift_time = std::max(0.0f, stime);
if (etype=='c')
{
- // its a car!
- hasturbo=false;
- hasair=false;
+ // it's a car!
+ hasturbo = false;
+ hasair = false;
// set default clutch force
- if(clutchForce < 0) clutchForce = 5000.0f;
+ if (clutchForce < 0.0f)
+ {
+ clutchForce = 5000.0f;
+ }
} else
{
- // its a truck
- if(clutchForce < 0) clutchForce = 10000.0f;
+ // it's a truck
+ if (clutchForce < 0.0f)
+ {
+ clutchForce = 10000.0f;
+ }
}
-
}
void BeamEngine::update(float dt, int doUpdate)
@@ -109,166 +105,251 @@
if (hasair)
{
//air pressure
- apressure+=dt*curEngineRPM;
- if (apressure>50000.0)
+ apressure += dt * curEngineRPM;
+ if (apressure > 50000.0f)
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum,
SS_TRIG_AIR_PURGE);
-#endif //OPENAL
- apressure=0;
- };
+#endif // USE_OPENAL
+ apressure = 0.0f;
+ }
}
+
if (hasturbo)
{
- //update turbo speed (lag)
- float turbotorque=0.0f;
- float turboInertia=0.000003f;
- //braking (compression)
- turbotorque-=curTurboRPM/200000.0f;
- //powering (exhaust) with limiter
- if (curTurboRPM<200000 && running && curAcc>0.06)
- turbotorque+=1.5*curAcc*(curEngineRPM/maxRPM);
- else
- turbotorque+=0.1*(curEngineRPM/maxRPM);
+ // update turbo speed (lag)
+ float turbotorque = 0.0f;
+ float turboInertia = 0.000003f;
+
+ // braking (compression)
+ turbotorque -= curTurboRPM / 200000.0f;
+
+ // powering (exhaust) with limiter
+ if (curTurboRPM < 200000.0f && running && curAcc > 0.06f)
+ {
+ turbotorque += 1.5f * curAcc * (curEngineRPM / maxRPM);
+ } else
+ {
+ turbotorque += 0.1f * (curEngineRPM / maxRPM);
+ }
- //integration
- curTurboRPM+=dt*turbotorque/turboInertia;
+ // integration
+ curTurboRPM += dt * turbotorque / turboInertia;
}
- //update engine speed
- float totaltorque=0.0f;
- //engine braking
- if (contact) totaltorque+=brakingTorque*curEngineRPM/maxRPM;
- else totaltorque+=10.0*brakingTorque*curEngineRPM/maxRPM;
- //braking by hydropump
- if (curEngineRPM>100.0)
totaltorque-=8.0f*hydropump/(curEngineRPM*0.105f*dt);
- //engine power
- //with limiter
+ // update engine speed
+ float totaltorque = 0.0f;
+
+ // engine braking
+ if (contact)
+ {
+ totaltorque += brakingTorque * curEngineRPM / maxRPM;
+ } else
+ {
+ totaltorque += 10.0f * brakingTorque * curEngineRPM / maxRPM;
+ }
+
+ // braking by hydropump
+ if (curEngineRPM > 100.0f)
+ {
+ totaltorque -= 8.0f * hydropump / (curEngineRPM * 0.105f * dt);
+ }
+
+ // engine power with limiter
float tqValue = 1.0f;
- float rpmRatio = curEngineRPM / (maxRPM*1.25);
- if (rpmRatio > 1.0f) rpmRatio = 1.0f;
- if (torqueCurve) tqValue = torqueCurve->getEngineTorque(rpmRatio);
- if (running && contact && curEngineRPM<(maxRPM*1.25) &&
curEngineRPM>stallRPM)
+
+ float rpmRatio = curEngineRPM / (maxRPM * 1.25f);
+
+ if (rpmRatio > 1.0f)
+ {
+ rpmRatio = 1.0f;
+ }
+
+ if (torqueCurve)
+ {
+ tqValue = torqueCurve->getEngineTorque(rpmRatio);
+ }
+
+ if (running && contact && curEngineRPM < (maxRPM * 1.25f) &&
curEngineRPM > stallRPM)
+ {
totaltorque += engineTorque * curAcc * tqValue;
- if (running && curEngineRPM<stallRPM) stop();
- //starter
- if (contact && starter && curEngineRPM<stallRPM*1.5)
totaltorque+=-brakingTorque;//1000.0f;
- //restart
- if (!running && curEngineRPM>stallRPM && contact)
+ }
+
+ if (running && curEngineRPM < stallRPM)
{
- running=1;
+ stop();
+ }
+
+ // starter
+ if (contact && starter && curEngineRPM < stallRPM * 1.5f)
+ {
+ totaltorque += -brakingTorque;//1000.0f;
+ }
+
+ // restart
+ if (!running && curEngineRPM > stallRPM && contact)
+ {
+ running = 1;
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStart(trucknum,
SS_TRIG_ENGINE);
-#endif //OPENAL
+#endif // USE_OPENAL
}
- //clutch
- float retorque=0.0f;
+ // clutch
+ float retorque = 0.0f;
+
if (curGear)
- retorque=curClutchTorque/gearsRatio[curGear + 1];
-
+ {
+ retorque = curClutchTorque / gearsRatio[curGear + 1];
+ }
+
totaltorque -= retorque;
- //integration
- curEngineRPM += dt*totaltorque/inertia;
+ // integration
+ curEngineRPM += dt * totaltorque / inertia;
- //update clutch torque
+ // update clutch torque
if (curGear)
{
- float gearboxspinner = curEngineRPM/gearsRatio[curGear + 1];
- curClutchTorque =
(gearboxspinner-curGearboxRPM)*curClutch*clutchForce;
+ float gearboxspinner = curEngineRPM / gearsRatio[curGear + 1];
+ curClutchTorque = (gearboxspinner - curGearboxRPM) * curClutch
* clutchForce;
} else
{
- curClutchTorque=0.0f;
+ curClutchTorque = 0.0f;
}
- if (curEngineRPM<0.0f) curEngineRPM=0.0f;
+ if (curEngineRPM < 0.0f)
+ {
+ curEngineRPM = 0.0f;
+ }
- if (automode<MANUAL)
+ if (automode < MANUAL)
{
- //autoshift
+ // auto-shift
if (shifting)
{
shiftclock += dt;
- //clutch
+ // clutch
if (shiftclock < clutch_time)
- curClutch = 1.0f - (shiftclock/clutch_time);
- else if (shiftclock > (shift_time - clutch_time))
- curClutch = 1.0f - (shift_time -
shiftclock)/clutch_time;
- else curClutch = 0.0f;
-
- //shift
- if (shiftval && shiftclock>clutch_time/2)
{
+ curClutch = 1.0f - (shiftclock / clutch_time);
+ } else if (shiftclock > (shift_time - clutch_time))
+ {
+ curClutch = 1.0f - (shift_time - shiftclock) /
clutch_time;
+ } else
+ {
+ curClutch = 0.0f;
+ }
+
+ // shift
+ if (shiftval && shiftclock > clutch_time / 2.0f)
+ {
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStart(trucknum, SS_TRIG_SHIFT);
-#endif //OPENAL
+#endif // USE_OPENAL
curGear += shiftval;
if (automode == AUTOMATIC)
+ {
while (curGear > 2 && curGearboxRPM *
gearsRatio[curGear + 1] < iddleRPM)
+ {
curGear -= 2;
-
- if (curGear < -1) curGear = -1;
- if (curGear > numGears) curGear = numGears;
+ }
+ }
+ curGear = std::max(-1, curGear);
+ curGear = std::min(curGear, numGears);
shiftval = 0;
- };
+ }
- //end of shifting
- if (shiftclock>shift_time)
+ // end of shifting
+ if (shiftclock > shift_time)
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStop(trucknum, SS_TRIG_SHIFT);
-#endif //OPENAL
+#endif // USE_OPENAL
setAcc(autocurAcc);
- shifting=0;
- curClutch=1.0;
- postshifting=1;
- postshiftclock=0.0;
+ shifting = 0;
+ curClutch = 1.0f;
+ postshifting = 1;
+ postshiftclock = 0.0f;
}
}
if (postshifting)
{
- postshiftclock+=dt;
- if (postshiftclock>post_shift_time) postshifting=0;
+ postshiftclock += dt;
+ if (postshiftclock > post_shift_time)
+ {
+ postshifting = 0.0f;
+ }
}
- //auto-declutch
+ // auto release clutch
if (shifting)
{
- //we are shifting, just avoid stalling in worst case
- if (curEngineRPM<stallRPM*1.2) curClutch=0;
+ // we are shifting, just avoid stalling in worst case
+ if (curEngineRPM < stallRPM * 1.2f)
+ {
+ curClutch = 0.0f;
+ }
} else if (postshifting)
{
- //we are postshifting, no gear change
- if (curEngineRPM<stallRPM*1.2 && curAcc<0.5)
curClutch=0;
- else curClutch=1.0;
- } else if (curEngineRPM<stallRPM*1.2 && curAcc<0.5)
+ // we are postshifting, no gear change
+ if (curEngineRPM < stallRPM * 1.2f && curAcc < 0.5f)
+ {
+ curClutch = 0.0f;
+ } else
+ {
+ curClutch = 1.0f;
+ }
+ } else if (curEngineRPM < stallRPM * 1.2f && curAcc < 0.5f)
{
- curClutch=0; /*curGear=0;*/
- } else if (curGear==1 || curGear==-1)
+ curClutch = 0.0f; /*curGear=0;*/
+ } else if (std::abs(curGear) == 1)
{
- //1st gear : special
- if (curEngineRPM>iddleRPM)
+ // 1st gear : special
+ if (curEngineRPM > iddleRPM)
{
- curClutch = ((curEngineRPM - iddleRPM)/(maxRPM
- iddleRPM));
- if (curClutch>1.0) curClutch=1.0;
+ curClutch = ((curEngineRPM - iddleRPM) /
(maxRPM - iddleRPM));
+ curClutch = std::min(curClutch, 1.0f);
+ } else
+ {
+ curClutch = 0.0f;
}
- else curClutch=0.0;
+ } else
+ {
+ curClutch = 1.0f;
}
- else curClutch=1.0;
}
- //audio stuff
+ if (doUpdate)
+ {
+ // gear hack
+ if (curGear < 0 || automode != AUTOMATIC) return;
+
+ if (!shifting && !postshifting && autoselect == DRIVE)
+ {
+ if (curEngineRPM > maxRPM - 100.0f && curGear <
numGears )
+ {
+ shift(1);
+ } else if (curEngineRPM < iddleRPM && curGear > 1 )
+ {
+ shift(-1);
+ }
+ }
+ }
+
+ // audio stuff
updateAudio(doUpdate);
}
-void BeamEngine::updateAudio(int doUpdate) // updates more, just not sound,
misleading!
+void BeamEngine::updateAudio(int doUpdate)
{
#ifdef USE_OPENAL
if (hasturbo)
+ {
SoundScriptManager::getSingleton().modulate(trucknum,
SS_MOD_TURBO, curTurboRPM);
-#endif //OPENAL
+ }
+#endif // USE_OPENAL
if (doUpdate)
{
@@ -276,27 +357,18 @@
SoundScriptManager::getSingleton().modulate(trucknum,
SS_MOD_ENGINE, curEngineRPM);
SoundScriptManager::getSingleton().modulate(trucknum,
SS_MOD_TORQUE, curClutchTorque);
SoundScriptManager::getSingleton().modulate(trucknum,
SS_MOD_GEARBOX, curGearboxRPM);
-#endif //OPENAL
- //gear hack
- if (curGear<0 || automode!=AUTOMATIC) return;
-
- if (!shifting && !postshifting && autoselect == DRIVE)
- {
- if(curEngineRPM > maxRPM-100.0 && curGear < numGears )
- shift(1);
- else if(curEngineRPM < iddleRPM && curGear > 1 )
- shift(-1);
- }
-
+#endif // USE_OPENAL
}
#ifdef USE_OPENAL
// reverse gear beep
- if (curGear==-1 && running)
+ if (curGear == -1 && running)
+ {
SoundScriptManager::getSingleton().trigStart(trucknum,
SS_TRIG_REVERSE_GEAR);
- else
+ } else
+ {
SoundScriptManager::getSingleton().trigStop(trucknum,
SS_TRIG_REVERSE_GEAR);
-#endif //OPENAL
-
+ }
+#endif // USE_OPENAL
}
@@ -312,18 +384,19 @@
void BeamEngine::toggleAutoMode()
{
- automode++;
- if (automode>MANUAL_RANGES) automode=AUTOMATIC;
+ automode = (automode + 1) % MANUAL_RANGES;
// this switches off all automatic symbols when in manual mode
- if(automode!=AUTOMATIC) autoselect = MANUALMODE;
- else autoselect = NEUTRAL;
+ if (automode != AUTOMATIC)
+ autoselect = MANUALMODE;
+ else
+ autoselect = NEUTRAL;
- if (automode==MANUAL_RANGES)
- {
- this->setGearRange(0);
- this->setGear(0);
- }
+ if (automode == MANUAL_RANGES)
+ {
+ this->setGearRange(0);
+ this->setGear(0);
+ }
}
int BeamEngine::getAutoMode()
@@ -340,16 +413,26 @@
{
if (prime)
{
- if (curEngineRPM<850) val=1.0;
- else if (curEngineRPM<900) {float
t=(900.0f-curEngineRPM)/50.0f;if (t>val) val=t;};
+ if (curEngineRPM < 850.0f)
+ {
+ val = 1.0f;
+ } else if (curEngineRPM < 900.0f)
+ {
+ float t = (900.0f - curEngineRPM) / 50.0f;
+
+ val = std::max(val, t);
+ }
}
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().modulate(trucknum, SS_MOD_INJECTOR,
val);
-#endif //OPENAL
- curAcc=val*0.94f+0.06f;
+#endif // USE_OPENAL
+ curAcc = val * 0.94f + 0.06f;
}
-float BeamEngine::getTurboPSI() {return curTurboRPM/10000.0f;}
+float BeamEngine::getTurboPSI()
+{
+ return curTurboRPM / 10000.0f;
+}
float BeamEngine::getAcc()
{
@@ -365,21 +448,28 @@
curGear = gear;
running = _running; //(fabs(rpm)>10.0);
contact = _contact;
- if(_automode != -1)
- automode = _automode;
+ if (_automode != -1)
+ {
+ automode = _automode;
+ }
}
float BeamEngine::getSmoke()
{
const int maxTurboRPM = 200000.0f;
- if (running) return
curAcc*(1.0f-curTurboRPM/maxTurboRPM);//*engineTorque/5000.0;
- else return -1;
+
+ if (running)
+ {
+ return curAcc * (1.0f - curTurboRPM / maxTurboRPM);// *
engineTorque / 5000.0f;
+ }
+
+ return -1;
}
float BeamEngine::getTorque()
{
- if (curClutchTorque>1000000.0) return 1000000.0;
- if (curClutchTorque<-1000000.0) return -1000000.0;
+ if (curClutchTorque > 1000000.0) return 1000000.0;
+ if (curClutchTorque < -1000000.0) return -1000000.0;
return curClutchTorque;
}
@@ -388,10 +478,10 @@
curGearboxRPM=rpm;
}
-//for hydros acceleration
+// for hydros acceleration
float BeamEngine::getCrankFactor()
{
- return 1.0f+4.0f*(curEngineRPM-800.0f)/(maxRPM-800.0f);
+ return 1.0f + 4.0f * (curEngineRPM - 800.0f) / (maxRPM - 800.0f);
}
void BeamEngine::setClutch(float clutch)
@@ -417,7 +507,7 @@
SoundScriptManager::getSingleton().trigStart(trucknum,
SS_TRIG_IGNITION);
else
SoundScriptManager::getSingleton().trigStop(trucknum,
SS_TRIG_IGNITION);
-#endif //OPENAL
+#endif // USE_OPENAL
}
//quick start
@@ -452,139 +542,145 @@
SoundScriptManager::getSingleton().trigStart(trucknum,
SS_TRIG_IGNITION);
setAcc(0);
SoundScriptManager::getSingleton().trigStart(trucknum, SS_TRIG_ENGINE);
-#endif //OPENAL
+#endif // USE_OPENAL
}
void BeamEngine::offstart()
{
- curGear=0;
- curClutch=0;
- autoselect=NEUTRAL;
- curEngineRPM=0.0f;
- running=0;
- contact=0;
+ curGear = 0;
+ curClutch = 0.0f;
+ autoselect= NEUTRAL;
+ curEngineRPM = 0.0f;
+ running = 0;
+ contact = 0;
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStop(trucknum, SS_TRIG_IGNITION);
-// setAcc(0);
SoundScriptManager::getSingleton().trigStop(trucknum, SS_TRIG_ENGINE);
-#endif //OPENAL
+#endif // USE_OPENAL
}
void BeamEngine::setstarter(int v)
{
- starter=v;
- if (v && curEngineRPM<750.0) setAcc(1.0f);
+ starter = v;
+ if (v && curEngineRPM < 750.0f)
+ {
+ setAcc(1.0f);
+ }
}
+int BeamEngine::getGear()
+{
+ return curGear;
+}
+
//low level gear changing
-int BeamEngine::getGear() {return curGear;}
-void BeamEngine::setGear(int v) {curGear=v;}
+void BeamEngine::setGear(int v)
+{
+ curGear = v;
+}
-int BeamEngine::getGearRange() {return curGearRange;}
-void BeamEngine::setGearRange(int v) {curGearRange=v;}
+int BeamEngine::getGearRange()
+{
+ return curGearRange;
+}
+void BeamEngine::setGearRange(int v)
+{
+ curGearRange = v;
+}
-//stalling engine
void BeamEngine::stop()
{
if (!running) return;
-// curGear=0;
-// curClutch=0;
- running=0;
+
+ running = 0;
//Script Event - engine death
TRIGGER_EVENT(SE_TRUCK_ENGINE_DIED, trucknum);
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStop(trucknum, SS_TRIG_ENGINE);
-#endif //OPENAL
+#endif // USE_OPENAL
}
-
-//high level controls
+// high level controls
void BeamEngine::autoSetAcc(float val)
{
- autocurAcc=val;
- if (!shifting) setAcc(val);
+ autocurAcc = val;
+ if (!shifting)
+ {
+ setAcc(val);
+ }
}
-
void BeamEngine::shift(int val)
{
- if (automode<MANUAL)
+ if (automode < MANUAL)
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigStart(trucknum,
SS_TRIG_SHIFT);
-#endif //OPENAL
- shiftval=val;
- shifting=1;
- shiftclock=0.0;
- setAcc(0.0);
+#endif // USE_OPENAL
+ shiftval = val;
+ shifting = 1;
+ shiftclock = 0.0f;
+ setAcc(0.0f);
}
else
{
- if (curClutch>0.25)
+ if (curClutch > 0.25f)
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum,
SS_TRIG_GEARSLIDE);
-#endif //OPENAL
- }
- else
+#endif // USE_OPENAL
+ } else
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum,
SS_TRIG_SHIFT);
-#endif //OPENAL
- curGear+=val;
- if (curGear<-1) curGear=-1;
- if (curGear>numGears) curGear=numGears;
+#endif // USE_OPENAL
+ curGear += val;
+ curGear = std::max(-1, curGear);
+ curGear = std::min(curGear, numGears);
}
}
}
-void BeamEngine::shiftTo(int val)
+void BeamEngine::shiftTo(int newGear)
{
- if (val==curGear || val>(int)getNumGears()) return;
- if (automode<MANUAL)
+ if (newGear == curGear || newGear > (int)getNumGears()) return;
+ if (automode < MANUAL)
{
- shiftval=val-curGear;
- shifting=1;
- shiftclock=0.0;
- setAcc(0.0);
- }
- else
+ shiftval = newGear - curGear;
+ shifting = 1;
+ shiftclock = 0.0f;
+ setAcc(0.0f);
+ } else
{
- if (curClutch>0.25)
+ if (curClutch > 0.25f)
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum,
SS_TRIG_GEARSLIDE);
-#endif //OPENAL
- }
- else
+#endif // USE_OPENAL
+ } else
{
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum,
SS_TRIG_SHIFT);
-#endif //OPENAL
- curGear=val;
- if (curGear<-1) curGear=-1;
- if (curGear>numGears) curGear=numGears;
+#endif // USE_OPENAL
+ curGear = newGear;
+ curGear = std::max(-1, curGear);
+ curGear = std::min(curGear, numGears);
}
}
}
void BeamEngine::updateShifts()
{
-/* if (autoselect==REAR) shiftTo(-1);
- if (autoselect==NEUTRAL) shiftTo(0);
- if (autoselect==DRIVE) shiftTo(1);
- if (autoselect==TWO) shiftTo(2);
- if (autoselect==ONE) shiftTo(1);
-*/
#ifdef USE_OPENAL
SoundScriptManager::getSingleton().trigOnce(trucknum, SS_TRIG_SHIFT);
-#endif //OPENAL
- if (autoselect==REAR) curGear=-1;
- if (autoselect==NEUTRAL) curGear=0;
- if (autoselect==DRIVE && curGear <= 0) curGear=1;
- if (autoselect==TWO) curGear=2;
- if (autoselect==ONE) curGear=1;
+#endif // USE_OPENAL
+
+ if (autoselect==REAR) curGear = -1;
+ if (autoselect==NEUTRAL) curGear = 0;
+ if (autoselect==DRIVE) curGear = std::max(1, curGear);
+ if (autoselect==TWO) curGear = 2;
+ if (autoselect==ONE) curGear = 1;
}
void BeamEngine::autoShiftSet(int mode)
@@ -595,18 +691,18 @@
void BeamEngine::autoShiftUp()
{
- if (autoselect!=REAR)
+ if (autoselect != REAR)
{
- autoselect=(autoswitch)(autoselect-1);
+ autoselect = (autoswitch)(autoselect-1);
updateShifts();
}
}
void BeamEngine::autoShiftDown()
{
- if (autoselect!=ONE)
+ if (autoselect != ONE)
{
- autoselect=(autoswitch)(autoselect+1);
+ autoselect = (autoswitch)(autoselect+1);
updateShifts();
}
}
@@ -618,10 +714,10 @@
void BeamEngine::setManualClutch(float val)
{
- if (automode>=MANUAL)
+ if (automode >= MANUAL)
{
- if (val<0) val=0;
- curClutch=1.0-val;
+ val = std::max(0.0f, val);
+ curClutch = 1.0 - val;
}
}
@@ -629,5 +725,6 @@
{
// delete NULL is safe
//delete gearsRatio; gearsRatio = NULL;
- delete torqueCurve; torqueCurve = NULL;
+ delete torqueCurve;
+ torqueCurve = NULL;
}
Modified: trunk/source/main/gameplay/BeamEngine.h
===================================================================
--- trunk/source/main/gameplay/BeamEngine.h 2012-05-24 22:30:18 UTC (rev
2654)
+++ trunk/source/main/gameplay/BeamEngine.h 2012-05-24 23:39:49 UTC (rev
2655)
@@ -17,122 +17,140 @@
You should have received a copy of the GNU General Public License
along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _Engine_H__
-#define _Engine_H__
+#ifndef __BeamEngine_H_
+#define __BeamEngine_H_
#include "RoRPrerequisites.h"
class BeamEngine
{
+ friend class Beam;
+
public:
- enum shiftmodes {AUTOMATIC, SEMIAUTO, MANUAL, MANUAL_STICK,
MANUAL_RANGES};
- enum autoswitch {REAR, NEUTRAL, DRIVE, TWO, ONE, MANUALMODE};
-
- float iddleRPM;
- float maxRPM;
- float stallRPM;
- float brakingTorque;
- float engineTorque;
-
- bool hasturbo;
- bool hasair;
- char type;
- int running;
- int contact;
- //char status[256];
- float hydropump;
- int prime;
-
BeamEngine(float iddle, float max, float torque, std::vector<float>
gears, float diff, int trucknum);
~BeamEngine();
+
+ float getRPM();
void setOptions(float einertia, char etype, float eclutch, float ctime,
float stime, float pstime);
+ void setRPM(float value);
void update(float dt, int doUpdate);
void updateAudio(int doUpdate);
- float getRPM();
- void setRPM(float value);
- void toggleAutoMode();
int getAutoMode();
void setAutoMode(int mode);
+ void toggleAutoMode();
- void setAcc(float val);
- float getTurboPSI();
float getAcc();
- void netForceSettings(float rpm, float force, float clutch, int gear,
bool running, bool contact, char automode);
float getSmoke();
float getTorque();
+ float getTurboPSI();
+ void netForceSettings(float rpm, float force, float clutch, int gear,
bool running, bool contact, char automode);
+ void setAcc(float val);
void setSpin(float rpm);
- //for hydros acceleration
+
+ // for hydros acceleration
+ float getClutch();
+ float getClutchForce();
float getCrankFactor();
void setClutch(float clutch);
- float getClutch();
- float getClutchForce();
void toggleContact();
+
//quick start
- void start();
void offstart();
void setstarter(int v);
+ void start();
+
//low level gear changing
int getGear();
int getGearRange();
void setGear(int v);
void setGearRange(int v);
- //stalling engine
+
+ // stall engine
void stop();
- //high level controls
+
+ // high level controls
+ bool hasContact() { return contact != 0; };
+ bool hasTurbo() { return hasturbo; };
+ bool isRunning() { return running != 0; };
+ char getType() { return type; };
+ float getEngineTorque() { return engineTorque; };
+ float getIdleRPM() { return iddleRPM; };
+ float getMaxRPM() { return maxRPM; };
+ int getAutoShift();
+ size_t getNumGears() { return gearsRatio.size() - 2; };
+ size_t getNumGearsRanges() {return getNumGears()/6+1; }
+ TorqueCurve *getTorqueCurve() { return torqueCurve; };
void autoSetAcc(float val);
+ void autoShiftDown();
+ void autoShiftSet(int mode);
+ void autoShiftUp();
+ void setManualClutch(float val);
void shift(int val);
void shiftTo(int val);
void updateShifts();
- void autoShiftUp();
- void autoShiftDown();
- void autoShiftSet(int mode);
- int getAutoShift();
- void setManualClutch(float val);
- size_t getNumGears() { return gearsRatio.size() - 2; };
- size_t getNumGearsRanges() {return getNumGears()/6+1; }
- float getMaxRPM() { return maxRPM; };
- float getIdleRPM() { return iddleRPM; };
- char getType() { return type; };
- TorqueCurve *getTorqueCurve() { return torqueCurve; };
- float getEngineTorque() { return engineTorque; };
+ enum shiftmodes {AUTOMATIC, SEMIAUTO, MANUAL, MANUAL_STICK,
MANUAL_RANGES};
+ enum autoswitch {REAR, NEUTRAL, DRIVE, TWO, ONE, MANUALMODE};
+
protected:
- float clutch_time;
- float shift_time;
- float post_shift_time;
+ float iddleRPM;
+ float maxRPM;
+ float stallRPM;
+ float brakingTorque;
+ float engineTorque;
+ bool hasturbo;
+ bool hasair;
+ char type;
+ int running;
+ int contact;
+ float hydropump;
+ int prime;
+
+
+ // gear stuff
+ float curGearboxRPM;
+ int curGear;
+ int curGearRange;
int numGears;
std::vector<float> gearsRatio;
- float inertia;
+
+ // clutch
float clutchForce;
+ float clutch_time;
+ float curClutch;
+ float curClutchTorque;
- int curGear;
- int curGearRange;
+ // engine stuff
+ float curAcc;
float curEngineRPM;
- float curGearboxRPM;
- float curClutch;
- float curAcc;
- float curClutchTorque;
- //shifting
+ float inertia;
+
+ // shifting
+ float post_shift_time;
+ float postshiftclock;
+ float shift_time;
+ float shiftclock;
+ int postshifting;
int shifting;
int shiftval;
- float shiftclock;
- int postshifting;
- float postshiftclock;
- //auto
+
+ // auto
+ autoswitch autoselect;
float autocurAcc;
int starter;
- autoswitch autoselect;
- //turbo
+
+ // turbo
float curTurboRPM;
- //air pressure
+
+ // air pressure
+ TorqueCurve *torqueCurve;
float apressure;
int automode;
int trucknum;
- TorqueCurve *torqueCurve;
};
-#endif // _Engine_H__
+#endif // __BeamEngine_H_
Modified: trunk/source/main/gameplay/OutProtocol.cpp
===================================================================
--- trunk/source/main/gameplay/OutProtocol.cpp 2012-05-24 22:30:18 UTC (rev
2654)
+++ trunk/source/main/gameplay/OutProtocol.cpp 2012-05-24 23:39:49 UTC (rev
2655)
@@ -144,7 +144,7 @@
} else if ( truck && truck->engine )
{
// truck and engine valid
- if ( truck->engine->hasturbo )
+ if ( truck->engine->hasTurbo() )
{
gd.Flags |= OG_TURBO;
}
@@ -170,7 +170,7 @@
gd.ShowLights = 0;
if(truck->parkingbrake) gd.ShowLights |= DL_HANDBRAKE;
if(truck->lights) gd.ShowLights |= DL_FULLBEAM;
- if(truck->engine->contact && !truck->engine->running)
gd.ShowLights |= DL_BATTERY;
+ if(truck->engine->hasContact() && !truck->engine->isRunning())
gd.ShowLights |= DL_BATTERY;
if(truck->left_blink_on) gd.ShowLights |= DL_SIGNAL_L;
if(truck->right_blink_on) gd.ShowLights |= DL_SIGNAL_R;
if(truck->warn_blink_on) gd.ShowLights |= DL_SIGNAL_ANY;
Modified: trunk/source/main/gameplay/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/gameplay/RoRFrameListener.cpp 2012-05-24 22:30:18 UTC
(rev 2654)
+++ trunk/source/main/gameplay/RoRFrameListener.cpp 2012-05-24 23:39:49 UTC
(rev 2655)
@@ -428,8 +428,8 @@
ow->turbotexture->setTextureRotate(Degree(angle));
// indicators
- ow->igno->setMaterialName(String("tracks/ign-") +
((curr_truck->engine->contact)?"on":"off"));
- ow->batto->setMaterialName(String("tracks/batt-") +
((curr_truck->engine->contact && !curr_truck->engine->running)?"on":"off"));
+ ow->igno->setMaterialName(String("tracks/ign-") +
((curr_truck->engine->hasContact())?"on":"off"));
+ ow->batto->setMaterialName(String("tracks/batt-") +
((curr_truck->engine->hasContact() &&
!curr_truck->engine->isRunning())?"on":"off"));
ow->pbrakeo->setMaterialName(String("tracks/pbrake-") +
((curr_truck->parkingbrake)?"on":"off"));
ow->lockedo->setMaterialName(String("tracks/locked-") +
((curr_truck->isLocked())?"on":"off"));
ow->lopresso->setMaterialName(String("tracks/lopress-") +
((!curr_truck->canwork)?"on":"off"));
@@ -1825,8 +1825,8 @@
INPUTENGINE.getEventValue(EV_TRUCK_MANUAL_CLUTCH) > 0.05f ||
(curr_truck->cc_target_speed <
curr_truck->cc_target_speed_lower_limit) ||
(curr_truck->parkingbrake && curr_truck->engine->getGear() > 0)
||
- !curr_truck->engine->running ||
- !curr_truck->engine->contact)
+ !curr_truck->engine->isRunning() ||
+ !curr_truck->engine->hasContact())
{
curr_truck->cruisecontrolToggle();
return;
@@ -2409,7 +2409,7 @@
} else
{
// start engine
- if (accval > 0 &&
curr_truck->engine && curr_truck->engine->contact &&
!curr_truck->engine->running)
+ if (accval > 0 &&
curr_truck->engine && curr_truck->engine->hasContact() &&
!curr_truck->engine->isRunning())
{
curr_truck->engine->start();
}
@@ -2477,7 +2477,7 @@
}
if
(INPUTENGINE.getEventBoolValueBounce(EV_TRUCK_TOGGLE_CONTACT))
curr_truck->engine->toggleContact();
- if
(INPUTENGINE.getEventBoolValue(EV_TRUCK_STARTER) && curr_truck->engine->contact
&& !curr_truck->replaymode)
+ if
(INPUTENGINE.getEventBoolValue(EV_TRUCK_STARTER) &&
curr_truck->engine->hasContact() && !curr_truck->replaymode)
{
//starter
curr_truck->engine->setstarter(1);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel