RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Engine.h
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2023 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #pragma once
23 
25 
26 #include "Application.h"
27 #include "RefCountingObject.h"
28 
29 #include <Ogre.h>
30 #include <vector>
31 
32 namespace RoR {
33 
36 
39 
41 class Engine : public RefCountingObject<Engine>
42 {
43  friend class ActorSpawner;
44  friend class Actor; // For `get/setSimAttribute()`
45 
46 public:
47 
48  Engine(float min_rpm, float max_rpm, float torque, float reverse_gear, float neutral_gear, std::vector<float> gears, float dratio, ActorPtr actor);
49  ~Engine();
50 
51 
52  void SetEngineOptions(float einertia, char etype, float eclutch, float ctime, float stime, float pstime, float irpm, float srpm, float maximix, float minimix, float ebraking);
53  void SetTurboOptions(int type, float tinertiaFactor, int nturbos, float param1, float param2, float param3, float param4, float param5, float param6, float param7, float param8, float param9, float param10, float param11);
54 
57  float getShiftDownRPM() const { return m_engine_shiftup_rpm; }
58  float getShiftUpRPM() const { return m_engine_max_rpm; }
59  float getEngineTorque() const { return m_engine_torque; }
60  float getDiffRatio() const { return m_diff_ratio; }
61  float getGearRatio(int pos);
62  int getNumGears() const { return m_num_gears; }
63  int getNumGearsRanges() const { return getNumGears() / 6 + 1; }
65 
68  float getEngineInertia() const { return m_engine_inertia; }
69  char getEngineType() const { return m_engine_type; }
70  bool isElectric() const { return m_engine_is_electric; }
71  bool hasAir() const { return m_engine_has_air; }
72  bool hasTurbo() const { return m_engine_has_turbo; }
73  float getClutchForce() const { return m_clutch_force; }
74  float getShiftTime() const { return m_shift_time; }
75  float getClutchTime() const { return m_clutch_time; }
76  float getPostShiftTime() const { return m_post_shift_time; }
77  float getStallRPM() const { return m_engine_stall_rpm; }
78  float getIdleRPM() const { return m_engine_idle_rpm; }
79  float getMaxIdleMixture() const { return m_max_idle_mixture; }
80  float getMinIdleMixture() const { return m_min_idle_mixture; }
81  float getBrakingTorque() const { return m_braking_torque; }
83 
88 
91  float getAcc();
92  float getClutch() const { return m_cur_clutch; };
93  float getCrankFactor();
94  float getRPM() { return m_cur_engine_rpm; }
95  float getSmoke();
96  float getTorque();
97  float getTurboPSI();
99  int getGear();
100  int getGearRange();
101  bool isRunning() { return m_engine_is_running; }
102  bool hasContact() { return m_contact; }
105  float getDriveRatio() { return m_gear_ratios[m_cur_gear + 1]; }
107  float getEnginePower(float rpm);
108  float getTurboPower();
109  float getIdleMixture();
110  float getPrimeMixture();
111  int getAutoShift();
112  float getAccToHoldRPM();
113  float getWheelSpin() const { return m_cur_wheel_revolutions; }
114 
119  float getShiftClock() { return m_shift_clock; }
120  bool isPostShifting() { return m_post_shifting != 0; }
121  bool isShifting() { return m_shifting != 0; }
122  int getShifTargetGear() { return m_shift_val; }
127 
130  void pushNetworkState(float engine_rpm, float acc, float clutch, int gear, bool running, bool contact, char auto_mode, char auto_select = -1);
131  void setAcc(float val);
132  void autoSetAcc(float val);
133  void setClutch(float clutch) { m_cur_clutch = clutch; }
134  void setRPM(float rpm);
135  void setWheelSpin(float rpm);
136  void setAutoMode(SimGearboxMode mode);
137  void setPrime(bool p);
138  void setHydroPump(float work);
139  void setManualClutch(float val);
140  void setTCaseRatio(float ratio);
141  void toggleContact();
142  void offStart();
143  void startEngine();
144  void stopEngine();
145 
149  void toggleAutoMode();
150  void autoShiftDown();
151  void autoShiftSet(int mode);
152  void autoShiftUp();
153  void setGear(int v);
154  void setGearRange(int v);
155  void shift(int val);
156  void shiftTo(int val);
157 
161  void updateShifts();
162  void UpdateEngine(float dt, int doUpdate);
163  void UpdateEngineAudio();
164  void UpdateInputEvents(float dt);
166 
168  {
175  };
176 
178  {
181  };
182 
183 private:
184 
185  // Vehicle
187 
188  // Gearbox
194  std::vector<float> m_gear_ratios;
195 
196  // Clutch
201 
202  // Engine
210  float m_cur_acc;
213  float m_diff_ratio;
227 
228  // Ignition
229  bool m_contact;
230  bool m_starter;
231 
232  // Shifting
235  float m_shift_time;
240 
241  // Auto transmission
251  std::deque<float> m_rpms;
252  std::deque<float> m_accs;
253  std::deque<float> m_brakes;
254 
255  // Turbo
256 #define MAXTURBO 4
276 };
277 
280 
281 } // namespace RoR
RoR::Engine::toggleContact
void toggleContact()
Ignition.
Definition: Engine.cpp:982
RoR::Engine::autoShiftSet
void autoShiftSet(int mode)
Definition: Engine.cpp:1154
RoR::Engine::m_cur_acc
float m_cur_acc
Engine.
Definition: Engine.h:210
RoR::Engine::m_contact
bool m_contact
Ignition switch is in ON/RUN position.
Definition: Engine.h:229
RoR::Engine::getCrankFactor
float getCrankFactor()
Definition: Engine.cpp:969
RoR::Engine::ONE
@ ONE
Definition: Engine.h:173
RoR::Engine::setPrime
void setPrime(bool p)
Definition: Engine.cpp:923
RoR::Actor
Softbody object; can be anything from soda can to a space shuttle Constructed from a truck definition...
Definition: Actor.h:50
RoR::Engine::getNumGears
int getNumGears() const
Definition: Engine.h:62
RoR::Engine::Engine
Engine(float min_rpm, float max_rpm, float torque, float reverse_gear, float neutral_gear, std::vector< float > gears, float dratio, ActorPtr actor)
Definition: Engine.cpp:37
RoR::Engine::m_cur_engine_torque
float m_cur_engine_torque
Engine.
Definition: Engine.h:212
RoR::Engine::setGearRange
void setGearRange(int v)
low level gear changing (bypasses shifting logic)
Definition: Engine.cpp:1054
RoR::Engine::m_turbo_wg_threshold_n
float m_turbo_wg_threshold_n
Definition: Engine.h:271
RoR::Engine::getGearRatio
float getGearRatio(int pos)
-1=R, 0=N, 1... ('engine' attrs #5[R],#6[N],#7[1]...)
Definition: Engine.cpp:956
RoR::Engine::SetEngineOptions
void SetEngineOptions(float einertia, char etype, float eclutch, float ctime, float stime, float pstime, float irpm, float srpm, float maximix, float minimix, float ebraking)
Definition: Engine.cpp:196
RoR::Engine::getTorqueCurve
TorqueCurve * getTorqueCurve()
Definition: Engine.h:86
RoR::Engine::isPostShifting
bool isPostShifting()
Definition: Engine.h:120
RoR::Engine::m_shifting
int m_shifting
Definition: Engine.h:238
RoR::Engine::setGear
void setGear(int v)
low level gear changing (bypasses shifting logic)
Definition: Engine.cpp:1044
RoR::Engine::TWO
@ TWO
Definition: Engine.h:172
RoR::Engine::OLD
@ OLD
Definition: Engine.h:179
RoR::Engine::m_full_rpm_range
float m_full_rpm_range
Definition: Engine.h:245
RoR::Engine::autoswitch
autoswitch
Definition: Engine.h:167
RoR::Engine::m_cur_turbo_rpm
float m_cur_turbo_rpm[MAXTURBO]
Definition: Engine.h:258
RoR::Engine::m_auto_cur_acc
float m_auto_cur_acc
Definition: Engine.h:244
RoR::Engine::getAutoMode
SimGearboxMode getAutoMode()
Definition: Engine.cpp:842
RoR::Engine::m_torque_curve
TorqueCurve * m_torque_curve
Definition: Engine.h:225
RoR::Engine::m_actor
ActorPtr m_actor
Definition: Engine.h:186
RoR::Engine::m_engine_is_priming
bool m_engine_is_priming
Engine.
Definition: Engine.h:224
RoR::Engine::getKickdownDelayCounter
int getKickdownDelayCounter()
Definition: Engine.h:125
RoR::Engine::m_engine_turbo_mode
int m_engine_turbo_mode
Engine attribute.
Definition: Engine.h:206
RoR::Engine::m_min_idle_mixture
float m_min_idle_mixture
Minimum throttle to maintain the idle RPM ('engoption' attr #10)
Definition: Engine.h:217
RoR::Engine::m_post_shift_clock
float m_post_shift_clock
Definition: Engine.h:234
RoR::Engine::m_braking_torque
float m_braking_torque
Engine attribute.
Definition: Engine.h:209
RoR::Engine::getSmoke
float getSmoke()
Definition: Engine.cpp:903
RoR::Engine::m_antilag_min_rpm
float m_antilag_min_rpm
Definition: Engine.h:273
RoR::Engine::m_turbo_has_wastegate
bool m_turbo_has_wastegate
Definition: Engine.h:267
RoR::Engine::m_turbo_inertia_factor
float m_turbo_inertia_factor
Definition: Engine.h:259
RoR::Engine::shift
void shift(int val)
Changes gear by a relative offset. Plays sounds.
Definition: Engine.cpp:1084
RoR::Engine::m_turbo_ver
int m_turbo_ver
Definition: Engine.h:257
RoR::Engine::m_min_wastegate_psi
float m_min_wastegate_psi
Definition: Engine.h:268
RoR::TorqueCurve
This class loads and processes a torque curve for a vehicle.
Definition: TorqueCurve.h:42
RoR::Engine::getIdleMixture
float getIdleMixture()
Definition: Engine.cpp:1232
RoR::Engine::m_engine_stall_rpm
float m_engine_stall_rpm
('engoption' attr #7)
Definition: Engine.h:223
RoR::Engine::m_one_third_rpm_range
float m_one_third_rpm_range
Definition: Engine.h:246
RoR::Engine::m_half_rpm_range
float m_half_rpm_range
Definition: Engine.h:247
RoR::Engine::UpdateEngine
void UpdateEngine(float dt, int doUpdate)
Definition: Engine.cpp:258
RoR::Engine::pushNetworkState
void pushNetworkState(float engine_rpm, float acc, float clutch, int gear, bool running, bool contact, char auto_mode, char auto_select=-1)
Definition: Engine.cpp:885
RoR::Engine::m_turbo_bov_rpm
float m_turbo_bov_rpm[MAXTURBO]
Definition: Engine.h:265
RoR::Engine::setAutoMode
void setAutoMode(SimGearboxMode mode)
Definition: Engine.cpp:847
RefCountingObjectPtr< Actor >
RoR::Engine::shiftTo
void shiftTo(int val)
Changes gear to given value. Plays sounds.
Definition: Engine.cpp:1108
RoR::Engine::m_max_idle_mixture
float m_max_idle_mixture
Maximum throttle to maintain the idle RPM ('engoption' attr #9)
Definition: Engine.h:218
RoR::Engine::m_shift_time
float m_shift_time
Time (in seconds) that it takes to shift ('engoption' attr #4)
Definition: Engine.h:235
RoR::Engine::m_turbo_wg_threshold_p
float m_turbo_wg_threshold_p
Definition: Engine.h:270
RoR::SimGearboxMode
SimGearboxMode
Definition: Application.h:338
RoR::ActorSpawner
Processes a RigDef::Document (parsed from 'truck' file format) into a simulated gameplay object (Acto...
Definition: ActorSpawner.h:70
RoR::Engine::m_cur_engine_rpm
float m_cur_engine_rpm
Engine.
Definition: Engine.h:211
RoR::Engine::m_autoselect
autoswitch m_autoselect
Definition: Engine.h:243
RoR::Engine::isElectric
bool isElectric() const
Definition: Engine.h:70
RoR::Engine
A land vehicle engine + transmission.
Definition: Engine.h:41
RoR::Engine::m_ref_wheel_revolutions
float m_ref_wheel_revolutions
Gears; estimated wheel revolutions based on current vehicle speed along the longi....
Definition: Engine.h:189
RoR::Engine::isRunning
bool isRunning()
Definition: Engine.h:101
RoR::Engine::setWheelSpin
void setWheelSpin(float rpm)
Definition: Engine.cpp:933
RoR::Engine::m_min_bov_psi
int m_min_bov_psi
Definition: Engine.h:266
RoR::Engine::m_antilag_power_factor
float m_antilag_power_factor
Definition: Engine.h:275
RoR::Engine::offStart
void offStart()
Quick start of vehicle engine.
Definition: Engine.cpp:1013
RoR::Engine::m_kickdown_delay_counter
int m_kickdown_delay_counter
Definition: Engine.h:250
RoR::Engine::REAR
@ REAR
Definition: Engine.h:169
RoR::Engine::m_shift_clock
float m_shift_clock
Definition: Engine.h:236
RoR::Engine::m_clutch_time
float m_clutch_time
Time (in seconds) the clutch takes to apply ('engoption' attr #5)
Definition: Engine.h:198
RoR::Engine::getRPM
float getRPM()
Definition: Engine.h:94
RoR::Engine::autoShiftDown
void autoShiftDown()
Definition: Engine.cpp:1171
RoR::Engine::getClutch
float getClutch() const
Definition: Engine.h:92
RoR::Engine::getCurEngineTorque
float getCurEngineTorque()
Definition: Engine.h:103
RoR::Engine::m_accs
std::deque< float > m_accs
Definition: Engine.h:252
RoR::Engine::getTurboPower
float getTurboPower()
Definition: Engine.cpp:1195
RoR::Engine::setAcc
void setAcc(float val)
Definition: Engine.cpp:852
RoR::Engine::autoShiftUp
void autoShiftUp()
Definition: Engine.cpp:1162
RoR::Engine::m_cur_clutch
float m_cur_clutch
Definition: Engine.h:199
RoR::Engine::getShiftClock
float getShiftClock()
Definition: Engine.h:119
RoR::Engine::m_turbo_has_antilag
bool m_turbo_has_antilag
Definition: Engine.h:272
RoR::Engine::updateShifts
void updateShifts()
Changes gears. Plays sounds.
Definition: Engine.cpp:1113
RoR::Engine::m_num_turbos
int m_num_turbos
Definition: Engine.h:260
RoR::Engine::m_rpms
std::deque< float > m_rpms
Definition: Engine.h:251
RoR::Engine::m_max_turbo_rpm
int m_max_turbo_rpm
Definition: Engine.h:261
RoR::Engine::getNumGearsRanges
int getNumGearsRanges() const
Definition: Engine.h:63
RoR::Engine::m_engine_has_turbo
bool m_engine_has_turbo
Engine attribute.
Definition: Engine.h:205
RoR::Engine::autoSetAcc
void autoSetAcc(float val)
Definition: Engine.cpp:1075
RoR::Engine::m_diff_ratio
float m_diff_ratio
Global gear ratio ('engine' attr #4)
Definition: Engine.h:213
RefCountingObject.h
RoR::Engine::~Engine
~Engine()
Definition: Engine.cpp:121
RoR::Engine::getTurboPSI
float getTurboPSI()
Definition: Engine.cpp:857
RoR::Engine::hasTurbo
bool hasTurbo() const
Definition: Engine.h:72
Application.h
Central state/object manager and communications hub.
RoR::Engine::m_engine_torque
float m_engine_torque
Torque in N/m ('engine' attr #3)
Definition: Engine.h:215
RoR::Engine::m_air_pressure
float m_air_pressure
Definition: Engine.h:226
RoR::Engine::UpdateEngineAudio
void UpdateEngineAudio()
Definition: Engine.cpp:790
RoR::Engine::m_turbo_has_bov
bool m_turbo_has_bov
Definition: Engine.h:264
RoR::Engine::m_cur_wheel_revolutions
float m_cur_wheel_revolutions
Gears; measured wheel revolutions.
Definition: Engine.h:190
RoR::Engine::m_brakes
std::deque< float > m_brakes
Definition: Engine.h:253
RoR::Engine::setHydroPump
void setHydroPump(float work)
Definition: Engine.cpp:928
RoR::Engine::setTCaseRatio
void setTCaseRatio(float ratio)
Set current transfer case gear (reduction) ratio.
Definition: Engine.cpp:938
RoR::Engine::getPrimeMixture
float getPrimeMixture()
Definition: Engine.cpp:1239
RoR::Engine::DRIVE
@ DRIVE
Definition: Engine.h:171
RoR::Engine::m_engine_idle_rpm
float m_engine_idle_rpm
('engoption' attr #8)
Definition: Engine.h:222
RoR::Engine::m_engine_type
char m_engine_type
't' = truck (default), 'c' = car ('engoption' attr #2)
Definition: Engine.h:208
RoR::Engine::m_shift_val
int m_shift_val
Definition: Engine.h:239
RoR::Engine::m_turbo_engine_rpm_operation
float m_turbo_engine_rpm_operation
Definition: Engine.h:263
RoR::Engine::setClutch
void setClutch(float clutch)
Definition: Engine.h:133
RoR::Engine::m_engine_max_rpm
float m_engine_max_rpm
Shift up RPM ('engine' attr #2)
Definition: Engine.h:220
RoR::Engine::stopEngine
void stopEngine()
stall engine
Definition: Engine.cpp:1059
RoR::Engine::getDriveRatio
float getDriveRatio()
Definition: Engine.h:105
RoR::Engine::m_engine_inertia
float m_engine_inertia
('engoption' attr #1)
Definition: Engine.h:219
RoR::Engine::m_upshift_delay_counter
int m_upshift_delay_counter
Definition: Engine.h:249
RoR::Engine::m_engine_addi_torque
float m_engine_addi_torque[MAXTURBO]
Definition: Engine.h:262
RoR::Engine::m_engine_is_electric
bool m_engine_is_electric
Engine attribute.
Definition: Engine.h:203
RoR::Engine::m_tcase_ratio
float m_tcase_ratio
Engine.
Definition: Engine.h:214
RoR::Engine::NEW
@ NEW
Definition: Engine.h:180
RoR::Engine::UpdateInputEvents
void UpdateInputEvents(float dt)
Definition: Engine.cpp:1260
RoR::Engine::m_cur_gear
int m_cur_gear
Gears; Current gear {-1 = reverse, 0 = neutral, 1...21 = forward}.
Definition: Engine.h:191
RoR::Engine::getUpshiftDelayCounter
int getUpshiftDelayCounter()
Definition: Engine.h:124
RoR::Engine::isShifting
bool isShifting()
Definition: Engine.h:121
RoR::Engine::getGearRange
int getGearRange()
Definition: Engine.cpp:1049
RoR::Engine::m_starter
bool m_starter
Ignition switch is in START position.
Definition: Engine.h:230
RoR::Engine::turbomode
turbomode
Definition: Engine.h:177
RoR::Engine::getAcc
float getAcc()
Definition: Engine.cpp:880
RoR::Engine::m_auto_mode
SimGearboxMode m_auto_mode
Definition: Engine.h:242
RoR::Engine::m_engine_is_running
bool m_engine_is_running
Engine state.
Definition: Engine.h:207
RoR::Engine::setRPM
void setRPM(float rpm)
Definition: Engine.cpp:918
MAXTURBO
#define MAXTURBO
Definition: Engine.h:256
RoR::Engine::getAccToHoldRPM
float getAccToHoldRPM()
estimate required throttle input to hold the current rpm
Definition: Engine.cpp:1069
RoR::Engine::getInputShaftRPM
float getInputShaftRPM()
Definition: Engine.h:104
RoR::Engine::m_cur_clutch_torque
float m_cur_clutch_torque
Definition: Engine.h:200
RoR::Engine::getEnginePower
float getEnginePower()
Definition: Engine.h:106
RoR::Engine::m_turbo_flutters
bool m_turbo_flutters
Definition: Engine.h:269
RoR::Engine::getAutoShiftBehavior
float getAutoShiftBehavior()
Definition: Engine.h:123
RoR::Engine::getBrakingTorque
float getBrakingTorque() const
Definition: Engine.h:81
RoR::Engine::m_hydropump_state
float m_hydropump_state
Engine.
Definition: Engine.h:216
RoR::Engine::getShifTargetGear
int getShifTargetGear()
Definition: Engine.h:122
RoR::Engine::m_gear_ratios
std::vector< float > m_gear_ratios
[R|N|1|...] ('engine' attrs #4[global],#5[R],#6[N],#7[1]...)
Definition: Engine.h:194
RoR::Engine::m_shift_behaviour
float m_shift_behaviour
Definition: Engine.h:248
RefCountingObject
Self reference-counting objects, as requred by AngelScript garbage collector.
Definition: RefCountingObject.h:26
RoR::Engine::getAutoShift
int getAutoShift()
Definition: Engine.cpp:1181
RoR::Engine::m_clutch_force
float m_clutch_force
('engoption' attr #3)
Definition: Engine.h:197
RoR::Engine::m_engine_has_air
bool m_engine_has_air
Engine attribute.
Definition: Engine.h:204
RoR::Engine::m_cur_gear_range
int m_cur_gear_range
Gears.
Definition: Engine.h:192
RoR::Engine::SetTurboOptions
void SetTurboOptions(int type, float tinertiaFactor, int nturbos, float param1, float param2, float param3, float param4, float param5, float param6, float param7, float param8, float param9, float param10, float param11)
Definition: Engine.cpp:128
RoR::Engine::setManualClutch
void setManualClutch(float val)
Definition: Engine.cpp:1186
RoR::Engine::startEngine
void startEngine()
Quick engine start. Plays sounds.
Definition: Engine.cpp:995
RoR::Engine::m_post_shift_time
float m_post_shift_time
Time (in seconds) until full torque is transferred ('engoption' attr #6)
Definition: Engine.h:233
RoR::Engine::MANUALMODE
@ MANUALMODE
Definition: Engine.h:174
RoR::Engine::getGear
int getGear()
Definition: Engine.cpp:1038
RoR
Definition: AppContext.h:36
RoR::Engine::getPostShiftClock
float getPostShiftClock()
Definition: Engine.h:118
RoR::Engine::toggleAutoMode
void toggleAutoMode()
Definition: Engine.cpp:817
RoR::Engine::m_antilag_rand_chance
float m_antilag_rand_chance
Definition: Engine.h:274
RoR::Engine::getTorque
float getTorque()
Definition: Engine.cpp:913
RoR::Engine::m_post_shifting
int m_post_shifting
Definition: Engine.h:237
RoR::Engine::NEUTRAL
@ NEUTRAL
Definition: Engine.h:170
RoR::Engine::hasAir
bool hasAir() const
Definition: Engine.h:71
RoR::Engine::m_engine_shiftup_rpm
float m_engine_shiftup_rpm
Shift down RPM ('engine' attr #1)
Definition: Engine.h:221
RoR::Engine::m_num_gears
int m_num_gears
Num. forward gears.
Definition: Engine.h:193