Rigs of Rods 2026.01
Soft-body Physics Simulation
Loading...
Searching...
No Matches
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#include "SimData.h"
29
30#include <Ogre.h>
31#include <vector>
32
33namespace RoR {
34
37
40
42class Engine : public RefCountingObject<Engine>
43{
44 friend class ActorSpawner;
45 friend class Actor; // For `get/setSimAttribute()`
46
47public:
48
49 Engine(float min_rpm, float max_rpm, float torque, float reverse_gear, float neutral_gear, std::vector<float> gears, float dratio, ActorPtr actor);
50 ~Engine();
51
52
53 void SetEngineOptions(float einertia, char etype, float eclutch, float ctime, float stime, float pstime, float irpm, float srpm, float maximix, float minimix, float ebraking);
54 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);
55
58 float getShiftDownRPM() const { return m_engine_min_rpm; }
59 float getShiftUpRPM() const { return m_engine_max_rpm; }
60 float getEngineTorque() const { return m_engine_torque; }
61 float getDiffRatio() const { return m_diff_ratio; }
62 float getGearRatio(int pos);
63 int getNumGears() const { return m_num_gears; }
64 int getNumGearsRanges() const { return getNumGears() / 6 + 1; }
66
69 float getEngineInertia() const { return m_engine_inertia; }
70 char getEngineType() const { return m_engine_type; }
71 bool isElectric() const { return m_engine_is_electric; }
72 bool hasAir() const { return m_engine_has_air; }
73 bool hasTurbo() const { return m_engine_has_turbo; }
74 float getClutchForce() const { return m_clutch_force; }
75 float getShiftTime() const { return m_shift_time; }
76 float getClutchTime() const { return m_clutch_time; }
77 float getPostShiftTime() const { return m_post_shift_time; }
78 float getStallRPM() const { return m_engine_stall_rpm; }
79 float getIdleRPM() const { return m_engine_idle_rpm; }
80 float getMaxIdleMixture() const { return m_max_idle_mixture; }
81 float getMinIdleMixture() const { return m_min_idle_mixture; }
82 float getBrakingTorque() const { return m_braking_torque; }
84
89
92 float getAcc();
93 float getClutch() const { return m_cur_clutch; };
94 float getCrankFactor();
95 float getRPM() { return m_cur_engine_rpm; }
96 float getSmoke();
97 float getTorque();
98 float getTurboPSI();
100 int getGear();
101 int getGearRange();
103 bool hasContact() { return m_contact; }
106 float getDriveRatio() { return m_gear_ratios[m_cur_gear + 1]; }
108 float getEnginePower(float rpm);
109 float getTurboPower();
110 float getIdleMixture();
111 float getPrimeMixture();
112 int getAutoShift();
113 float getAccToHoldRPM();
114 float getWheelSpin() const { return m_cur_wheel_revolutions; }
116
120 float getShiftClock() { return m_shift_clock; }
121 bool isPostShifting() { return m_post_shifting != 0; }
122 bool isShifting() { return m_shifting != 0; }
128
131 void pushNetworkState(float engine_rpm, float acc, float clutch, int gear, bool running, bool contact, char auto_mode, char auto_select = -1);
132 void setAcc(float val);
133 void autoSetAcc(float val);
134 void setClutch(float clutch) { m_cur_clutch = clutch; }
135 void setRPM(float rpm);
136 void setWheelSpin(float rpm);
137 void setAutoMode(SimGearboxMode mode);
138 void setPrime(bool p);
139 void setHydroPump(float work);
140 void setManualClutch(float val);
141 void setTCaseRatio(float ratio);
142 void toggleContact();
143 void offStart();
144 void startEngine();
145 void stopEngine();
147
150 void toggleAutoMode();
151 void autoShiftDown();
152 void autoShiftSet(int mode);
153 void autoShiftUp();
154 void setGear(int v);
155 void setGearRange(int v);
156 void shift(int val);
157 void shiftTo(int val);
159
162 void updateShifts();
163 void UpdateEngine(float dt, int doUpdate);
164 void UpdateEngineAudio();
165 void UpdateInputEvents(float dt);
167
177
179 {
181 NEW
182 };
183
184private:
185
186 // Vehicle
188
189 // Gearbox
195 std::vector<float> m_gear_ratios;
196
197 // Clutch
202
203 // Engine
211 float m_cur_acc;
229
230 // Ignition
233
234 // Shifting
242
243 // Auto transmission
253 std::deque<float> m_rpms;
254 std::deque<float> m_accs;
255 std::deque<float> m_brakes;
256
257 // Turbo
258#define MAXTURBO 4
278};
279
282
283} // namespace RoR
Central state/object manager and communications hub.
#define MAXTURBO
Definition Engine.h:258
Core data structures for simulation; Everything affected by by either physics, network or user intera...
Self reference-counting objects, as requred by AngelScript garbage collector.
Softbody object; can be anything from soda can to a space shuttle Constructed from a truck definition...
Definition Actor.h:55
Processes a RigDef::Document (parsed from 'truck' file format) into a simulated gameplay object (Acto...
A land vehicle engine + transmission.
Definition Engine.h:43
float getCrankFactor()
Definition Engine.cpp:979
float m_tcase_ratio
Engine.
Definition Engine.h:215
float m_engine_addi_torque[MAXTURBO]
Definition Engine.h:264
int m_turbo_ver
Definition Engine.h:259
void setWheelSpin(float rpm)
Definition Engine.cpp:943
float getCurEngineTorque()
Definition Engine.h:104
void autoShiftSet(int mode)
Definition Engine.cpp:1164
char getEngineType() const
't' = truck (default), 'c' = car, 'e' = electric car ('engoption' attr #2)
Definition Engine.h:70
float getRPM()
Definition Engine.h:95
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:895
float getEngineInertia() const
('engoption' attr #1)
Definition Engine.h:69
float m_antilag_power_factor
Definition Engine.h:277
std::deque< float > m_rpms
Definition Engine.h:253
char m_engine_type
't' = truck (default), 'c' = car ('engoption' attr #2)
Definition Engine.h:209
void UpdateInputEvents(float dt)
Definition Engine.cpp:1270
float m_cur_engine_torque
Engine.
Definition Engine.h:213
bool m_turbo_has_antilag
Definition Engine.h:274
bool m_turbo_has_bov
Definition Engine.h:266
float m_one_third_rpm_range
Definition Engine.h:248
float m_hydropump_state
Engine.
Definition Engine.h:217
SimGearboxMode getAutoMode()
Definition Engine.cpp:852
int m_post_shifting
Definition Engine.h:239
float getAccToHoldRPM()
estimate required throttle input to hold the current rpm
Definition Engine.cpp:1079
void setGearRange(int v)
low level gear changing (bypasses shifting logic)
Definition Engine.cpp:1064
void startEngine()
Quick engine start. Plays sounds.
Definition Engine.cpp:1005
int getShifTargetGear()
Definition Engine.h:123
float getClutchForce() const
('engoption' attr #3)
Definition Engine.h:74
float m_cur_wheel_revolutions
Gears; measured wheel revolutions.
Definition Engine.h:191
int m_engine_turbo_mode
Engine attribute.
Definition Engine.h:207
float getStallRPM() const
('engoption' attr #7)
Definition Engine.h:78
float m_diff_ratio
Global gear ratio ('engine' attr #4)
Definition Engine.h:214
NodeNum_t m_air_intake_node
Node number of the air intake node (if any) - defaults to cinecam ref node (classic behavior) but can...
Definition Engine.h:228
int m_max_turbo_rpm
Definition Engine.h:263
int m_shift_val
Definition Engine.h:241
float m_post_shift_clock
Definition Engine.h:236
float m_engine_inertia
('engoption' attr #1)
Definition Engine.h:220
float m_antilag_rand_chance
Definition Engine.h:276
float m_min_wastegate_psi
Definition Engine.h:270
float getTurboPower()
Definition Engine.cpp:1205
float m_cur_engine_rpm
Engine.
Definition Engine.h:212
bool hasAir() const
Definition Engine.h:72
float getMinIdleMixture() const
Minimum throttle to maintain the idle RPM ('engoption' attr #10)
Definition Engine.h:81
float getDriveRatio()
Definition Engine.h:106
float getIdleRPM() const
('engoption' attr #8)
Definition Engine.h:79
void setPrime(bool p)
Definition Engine.cpp:933
float m_engine_idle_rpm
('engoption' attr #8)
Definition Engine.h:223
bool m_turbo_has_wastegate
Definition Engine.h:269
float getSmoke()
Definition Engine.cpp:913
void autoShiftDown()
Definition Engine.cpp:1181
bool m_engine_has_air
Engine attribute.
Definition Engine.h:205
float m_max_idle_mixture
Maximum throttle to maintain the idle RPM ('engoption' attr #9)
Definition Engine.h:219
float getClutch() const
Definition Engine.h:93
void setHydroPump(float work)
Definition Engine.cpp:938
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
float getTorque()
Definition Engine.cpp:923
void setTCaseRatio(float ratio)
Set current transfer case gear (reduction) ratio.
Definition Engine.cpp:948
void UpdateEngine(float dt, int doUpdate)
Definition Engine.cpp:258
int getUpshiftDelayCounter()
Definition Engine.h:125
float m_auto_cur_acc
Definition Engine.h:246
float getEnginePower()
Definition Engine.h:107
int getNumGears() const
Definition Engine.h:63
bool m_contact
Ignition switch is in ON/RUN position.
Definition Engine.h:231
std::deque< float > m_accs
Definition Engine.h:254
float m_cur_turbo_rpm[MAXTURBO]
Definition Engine.h:260
std::deque< float > m_brakes
Definition Engine.h:255
float getDiffRatio() const
Global gear ratio ('engine' attr #4)
Definition Engine.h:61
TorqueCurve * m_torque_curve
Definition Engine.h:226
void offStart()
Quick start of vehicle engine.
Definition Engine.cpp:1023
float m_turbo_wg_threshold_n
Definition Engine.h:273
float getBrakingTorque() const
Definition Engine.h:82
float getEngineTorque() const
Torque in N/m ('engine' attr #3)
Definition Engine.h:60
float m_braking_torque
Engine attribute.
Definition Engine.h:210
int m_cur_gear
Gears; Current gear {-1 = reverse, 0 = neutral, 1...21 = forward}.
Definition Engine.h:192
int m_cur_gear_range
Gears.
Definition Engine.h:193
float getShiftDownRPM() const
Shift down RPM ('engine' attr #1)
Definition Engine.h:58
float m_turbo_bov_rpm[MAXTURBO]
Definition Engine.h:267
int getKickdownDelayCounter()
Definition Engine.h:126
int m_kickdown_delay_counter
Definition Engine.h:252
float getMaxIdleMixture() const
Maximum throttle to maintain the idle RPM ('engoption' attr #9)
Definition Engine.h:80
float m_air_pressure
Definition Engine.h:227
float getPostShiftClock()
Definition Engine.h:119
float m_half_rpm_range
Definition Engine.h:249
float m_turbo_wg_threshold_p
Definition Engine.h:272
float m_turbo_engine_rpm_operation
Definition Engine.h:265
int m_min_bov_psi
Definition Engine.h:268
float getAutoShiftBehavior()
Definition Engine.h:124
TorqueCurve * getTorqueCurve()
Definition Engine.h:87
float m_shift_time
Time (in seconds) that it takes to shift ('engoption' attr #4)
Definition Engine.h:237
float m_cur_clutch
Definition Engine.h:200
float getShiftUpRPM() const
Shift up RPM ('engine' attr #2)
Definition Engine.h:59
autoswitch m_autoselect
Definition Engine.h:245
float m_full_rpm_range
Definition Engine.h:247
float getPrimeMixture()
Definition Engine.cpp:1249
bool m_turbo_flutters
Definition Engine.h:271
float m_antilag_min_rpm
Definition Engine.h:275
float getShiftClock()
Definition Engine.h:120
float m_clutch_time
Time (in seconds) the clutch takes to apply ('engoption' attr #5)
Definition Engine.h:199
void setGear(int v)
low level gear changing (bypasses shifting logic)
Definition Engine.cpp:1054
float m_shift_clock
Definition Engine.h:238
ActorPtr m_actor
Definition Engine.h:187
bool m_engine_has_turbo
Engine attribute.
Definition Engine.h:206
std::vector< float > m_gear_ratios
[R|N|1|...] ('engine' attrs #4[global],#5[R],#6[N],#7[1]...)
Definition Engine.h:195
void autoSetAcc(float val)
Definition Engine.cpp:1085
bool isElectric() const
Definition Engine.h:71
float m_cur_clutch_torque
Definition Engine.h:201
float m_ref_wheel_revolutions
Gears; estimated wheel revolutions based on current vehicle speed along the longi....
Definition Engine.h:190
float m_min_idle_mixture
Minimum throttle to maintain the idle RPM ('engoption' attr #10)
Definition Engine.h:218
void stopEngine()
stall engine
Definition Engine.cpp:1069
int m_num_gears
Num. forward gears.
Definition Engine.h:194
int getAutoShift()
Definition Engine.cpp:1191
bool m_starter
Ignition switch is in START position.
Definition Engine.h:232
SimGearboxMode m_auto_mode
Definition Engine.h:244
int m_upshift_delay_counter
Definition Engine.h:251
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
float m_clutch_force
('engoption' attr #3)
Definition Engine.h:198
void autoShiftUp()
Definition Engine.cpp:1172
float getClutchTime() const
Time (in seconds) the clutch takes to apply ('engoption' attr #5)
Definition Engine.h:76
void setAutoMode(SimGearboxMode mode)
Definition Engine.cpp:857
void setManualClutch(float val)
Definition Engine.cpp:1196
bool m_engine_is_priming
Engine.
Definition Engine.h:225
int getGear()
Definition Engine.cpp:1048
void shift(int val)
Changes gear by a relative offset. Plays sounds.
Definition Engine.cpp:1094
bool m_engine_is_electric
Engine attribute.
Definition Engine.h:204
void setClutch(float clutch)
Definition Engine.h:134
float m_engine_min_rpm
Shift down RPM ('engine' attr #1)
Definition Engine.h:222
bool isPostShifting()
Definition Engine.h:121
float getIdleMixture()
Definition Engine.cpp:1242
float m_post_shift_time
Time (in seconds) until full torque is transferred ('engoption' attr #6)
Definition Engine.h:235
bool m_engine_is_running
Engine state.
Definition Engine.h:208
void toggleContact()
Ignition.
Definition Engine.cpp:992
void toggleAutoMode()
Definition Engine.cpp:827
void updateShifts()
Changes gears. Plays sounds.
Definition Engine.cpp:1123
float m_engine_max_rpm
Shift up RPM ('engine' attr #2)
Definition Engine.h:221
float m_engine_stall_rpm
('engoption' attr #7)
Definition Engine.h:224
int getNumGearsRanges() const
Definition Engine.h:64
float getShiftTime() const
Time (in seconds) that it takes to shift ('engoption' attr #4)
Definition Engine.h:75
void setAcc(float val)
Definition Engine.cpp:862
float getAcc()
Definition Engine.cpp:890
float m_shift_behaviour
Definition Engine.h:250
bool isShifting()
Definition Engine.h:122
void UpdateEngineAudio()
Definition Engine.cpp:800
bool hasTurbo() const
Definition Engine.h:73
float m_cur_acc
Engine.
Definition Engine.h:211
float m_turbo_inertia_factor
Definition Engine.h:261
float m_engine_torque
Torque in N/m ('engine' attr #3)
Definition Engine.h:216
int m_num_turbos
Definition Engine.h:262
void shiftTo(int val)
Changes gear to given value. Plays sounds.
Definition Engine.cpp:1118
float getWheelSpin() const
Wheel RPM.
Definition Engine.h:114
bool isRunning()
Definition Engine.h:102
float getInputShaftRPM()
Definition Engine.h:105
float getPostShiftTime() const
Time (in seconds) until full torque is transferred ('engoption' attr #6)
Definition Engine.h:77
void setRPM(float rpm)
Definition Engine.cpp:928
int getGearRange()
Definition Engine.cpp:1059
float getGearRatio(int pos)
-1=R, 0=N, 1... ('engine' attrs #5[R],#6[N],#7[1]...)
Definition Engine.cpp:966
int m_shifting
Definition Engine.h:240
float getTurboPSI()
Definition Engine.cpp:867
bool hasContact()
Ignition.
Definition Engine.h:103
This class loads and processes a torque curve for a vehicle.
Definition TorqueCurve.h:43
SimGearboxMode
static const NodeNum_t NODENUM_INVALID
uint16_t NodeNum_t
Node position within Actor::ar_nodes; use RoR::NODENUM_INVALID as empty value.