Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
29#include <Ogre.h>
30#include <vector>
31
32namespace RoR {
33
36
39
41class Engine : public RefCountingObject<Engine>
42{
43 friend class ActorSpawner;
44 friend class Actor; // For `get/setSimAttribute()`
45
46public:
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();
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; }
115
119 float getShiftClock() { return m_shift_clock; }
120 bool isPostShifting() { return m_post_shifting != 0; }
121 bool isShifting() { return m_shifting != 0; }
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();
146
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);
158
161 void updateShifts();
162 void UpdateEngine(float dt, int doUpdate);
163 void UpdateEngineAudio();
164 void UpdateInputEvents(float dt);
166
176
178 {
180 NEW
181 };
182
183private:
184
185 // Vehicle
187
188 // Gearbox
194 std::vector<float> m_gear_ratios;
195
196 // Clutch
201
202 // Engine
210 float m_cur_acc;
227
228 // Ignition
231
232 // Shifting
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
Central state/object manager and communications hub.
#define MAXTURBO
Definition Engine.h:256
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:42
float getCrankFactor()
Definition Engine.cpp:969
float m_tcase_ratio
Engine.
Definition Engine.h:214
float m_engine_addi_torque[MAXTURBO]
Definition Engine.h:262
int m_turbo_ver
Definition Engine.h:257
void setWheelSpin(float rpm)
Definition Engine.cpp:933
float getCurEngineTorque()
Definition Engine.h:103
float m_engine_shiftup_rpm
Shift down RPM ('engine' attr #1)
Definition Engine.h:221
void autoShiftSet(int mode)
Definition Engine.cpp:1154
char getEngineType() const
't' = truck (default), 'c' = car, 'e' = electric car ('engoption' attr #2)
Definition Engine.h:69
float getRPM()
Definition Engine.h:94
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
float getEngineInertia() const
('engoption' attr #1)
Definition Engine.h:68
float m_antilag_power_factor
Definition Engine.h:275
std::deque< float > m_rpms
Definition Engine.h:251
char m_engine_type
't' = truck (default), 'c' = car ('engoption' attr #2)
Definition Engine.h:208
void UpdateInputEvents(float dt)
Definition Engine.cpp:1260
float m_cur_engine_torque
Engine.
Definition Engine.h:212
bool m_turbo_has_antilag
Definition Engine.h:272
bool m_turbo_has_bov
Definition Engine.h:264
float m_one_third_rpm_range
Definition Engine.h:246
float m_hydropump_state
Engine.
Definition Engine.h:216
SimGearboxMode getAutoMode()
Definition Engine.cpp:842
int m_post_shifting
Definition Engine.h:237
float getAccToHoldRPM()
estimate required throttle input to hold the current rpm
Definition Engine.cpp:1069
void setGearRange(int v)
low level gear changing (bypasses shifting logic)
Definition Engine.cpp:1054
void startEngine()
Quick engine start. Plays sounds.
Definition Engine.cpp:995
int getShifTargetGear()
Definition Engine.h:122
float getClutchForce() const
('engoption' attr #3)
Definition Engine.h:73
float m_cur_wheel_revolutions
Gears; measured wheel revolutions.
Definition Engine.h:190
int m_engine_turbo_mode
Engine attribute.
Definition Engine.h:206
float getStallRPM() const
('engoption' attr #7)
Definition Engine.h:77
float m_diff_ratio
Global gear ratio ('engine' attr #4)
Definition Engine.h:213
int m_max_turbo_rpm
Definition Engine.h:261
int m_shift_val
Definition Engine.h:239
float m_post_shift_clock
Definition Engine.h:234
float m_engine_inertia
('engoption' attr #1)
Definition Engine.h:219
float m_antilag_rand_chance
Definition Engine.h:274
float m_min_wastegate_psi
Definition Engine.h:268
float getTurboPower()
Definition Engine.cpp:1195
float m_cur_engine_rpm
Engine.
Definition Engine.h:211
bool hasAir() const
Definition Engine.h:71
float getMinIdleMixture() const
Minimum throttle to maintain the idle RPM ('engoption' attr #10)
Definition Engine.h:80
float getDriveRatio()
Definition Engine.h:105
float getIdleRPM() const
('engoption' attr #8)
Definition Engine.h:78
void setPrime(bool p)
Definition Engine.cpp:923
float m_engine_idle_rpm
('engoption' attr #8)
Definition Engine.h:222
bool m_turbo_has_wastegate
Definition Engine.h:267
float getSmoke()
Definition Engine.cpp:903
void autoShiftDown()
Definition Engine.cpp:1171
bool m_engine_has_air
Engine attribute.
Definition Engine.h:204
float m_max_idle_mixture
Maximum throttle to maintain the idle RPM ('engoption' attr #9)
Definition Engine.h:218
float getClutch() const
Definition Engine.h:92
void setHydroPump(float work)
Definition Engine.cpp:928
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:913
void setTCaseRatio(float ratio)
Set current transfer case gear (reduction) ratio.
Definition Engine.cpp:938
void UpdateEngine(float dt, int doUpdate)
Definition Engine.cpp:258
int getUpshiftDelayCounter()
Definition Engine.h:124
float m_auto_cur_acc
Definition Engine.h:244
float getEnginePower()
Definition Engine.h:106
int getNumGears() const
Definition Engine.h:62
bool m_contact
Ignition switch is in ON/RUN position.
Definition Engine.h:229
std::deque< float > m_accs
Definition Engine.h:252
float m_cur_turbo_rpm[MAXTURBO]
Definition Engine.h:258
std::deque< float > m_brakes
Definition Engine.h:253
float getDiffRatio() const
Global gear ratio ('engine' attr #4)
Definition Engine.h:60
TorqueCurve * m_torque_curve
Definition Engine.h:225
void offStart()
Quick start of vehicle engine.
Definition Engine.cpp:1013
float m_turbo_wg_threshold_n
Definition Engine.h:271
float getBrakingTorque() const
Definition Engine.h:81
float getEngineTorque() const
Torque in N/m ('engine' attr #3)
Definition Engine.h:59
float m_braking_torque
Engine attribute.
Definition Engine.h:209
int m_cur_gear
Gears; Current gear {-1 = reverse, 0 = neutral, 1...21 = forward}.
Definition Engine.h:191
int m_cur_gear_range
Gears.
Definition Engine.h:192
float getShiftDownRPM() const
Shift down RPM ('engine' attr #1)
Definition Engine.h:57
float m_turbo_bov_rpm[MAXTURBO]
Definition Engine.h:265
int getKickdownDelayCounter()
Definition Engine.h:125
int m_kickdown_delay_counter
Definition Engine.h:250
float getMaxIdleMixture() const
Maximum throttle to maintain the idle RPM ('engoption' attr #9)
Definition Engine.h:79
float m_air_pressure
Definition Engine.h:226
float getPostShiftClock()
Definition Engine.h:118
float m_half_rpm_range
Definition Engine.h:247
float m_turbo_wg_threshold_p
Definition Engine.h:270
float m_turbo_engine_rpm_operation
Definition Engine.h:263
int m_min_bov_psi
Definition Engine.h:266
float getAutoShiftBehavior()
Definition Engine.h:123
TorqueCurve * getTorqueCurve()
Definition Engine.h:86
float m_shift_time
Time (in seconds) that it takes to shift ('engoption' attr #4)
Definition Engine.h:235
float m_cur_clutch
Definition Engine.h:199
float getShiftUpRPM() const
Shift up RPM ('engine' attr #2)
Definition Engine.h:58
autoswitch m_autoselect
Definition Engine.h:243
float m_full_rpm_range
Definition Engine.h:245
float getPrimeMixture()
Definition Engine.cpp:1239
bool m_turbo_flutters
Definition Engine.h:269
float m_antilag_min_rpm
Definition Engine.h:273
float getShiftClock()
Definition Engine.h:119
float m_clutch_time
Time (in seconds) the clutch takes to apply ('engoption' attr #5)
Definition Engine.h:198
void setGear(int v)
low level gear changing (bypasses shifting logic)
Definition Engine.cpp:1044
float m_shift_clock
Definition Engine.h:236
ActorPtr m_actor
Definition Engine.h:186
bool m_engine_has_turbo
Engine attribute.
Definition Engine.h:205
std::vector< float > m_gear_ratios
[R|N|1|...] ('engine' attrs #4[global],#5[R],#6[N],#7[1]...)
Definition Engine.h:194
void autoSetAcc(float val)
Definition Engine.cpp:1075
bool isElectric() const
Definition Engine.h:70
float m_cur_clutch_torque
Definition Engine.h:200
float m_ref_wheel_revolutions
Gears; estimated wheel revolutions based on current vehicle speed along the longi....
Definition Engine.h:189
float m_min_idle_mixture
Minimum throttle to maintain the idle RPM ('engoption' attr #10)
Definition Engine.h:217
void stopEngine()
stall engine
Definition Engine.cpp:1059
int m_num_gears
Num. forward gears.
Definition Engine.h:193
int getAutoShift()
Definition Engine.cpp:1181
bool m_starter
Ignition switch is in START position.
Definition Engine.h:230
SimGearboxMode m_auto_mode
Definition Engine.h:242
int m_upshift_delay_counter
Definition Engine.h:249
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:197
void autoShiftUp()
Definition Engine.cpp:1162
float getClutchTime() const
Time (in seconds) the clutch takes to apply ('engoption' attr #5)
Definition Engine.h:75
void setAutoMode(SimGearboxMode mode)
Definition Engine.cpp:847
void setManualClutch(float val)
Definition Engine.cpp:1186
bool m_engine_is_priming
Engine.
Definition Engine.h:224
int getGear()
Definition Engine.cpp:1038
void shift(int val)
Changes gear by a relative offset. Plays sounds.
Definition Engine.cpp:1084
bool m_engine_is_electric
Engine attribute.
Definition Engine.h:203
void setClutch(float clutch)
Definition Engine.h:133
bool isPostShifting()
Definition Engine.h:120
float getIdleMixture()
Definition Engine.cpp:1232
float m_post_shift_time
Time (in seconds) until full torque is transferred ('engoption' attr #6)
Definition Engine.h:233
bool m_engine_is_running
Engine state.
Definition Engine.h:207
void toggleContact()
Ignition.
Definition Engine.cpp:982
void toggleAutoMode()
Definition Engine.cpp:817
void updateShifts()
Changes gears. Plays sounds.
Definition Engine.cpp:1113
float m_engine_max_rpm
Shift up RPM ('engine' attr #2)
Definition Engine.h:220
float m_engine_stall_rpm
('engoption' attr #7)
Definition Engine.h:223
int getNumGearsRanges() const
Definition Engine.h:63
float getShiftTime() const
Time (in seconds) that it takes to shift ('engoption' attr #4)
Definition Engine.h:74
void setAcc(float val)
Definition Engine.cpp:852
float getAcc()
Definition Engine.cpp:880
float m_shift_behaviour
Definition Engine.h:248
bool isShifting()
Definition Engine.h:121
void UpdateEngineAudio()
Definition Engine.cpp:790
bool hasTurbo() const
Definition Engine.h:72
float m_cur_acc
Engine.
Definition Engine.h:210
float m_turbo_inertia_factor
Definition Engine.h:259
float m_engine_torque
Torque in N/m ('engine' attr #3)
Definition Engine.h:215
int m_num_turbos
Definition Engine.h:260
void shiftTo(int val)
Changes gear to given value. Plays sounds.
Definition Engine.cpp:1108
float getWheelSpin() const
Wheel RPM.
Definition Engine.h:113
bool isRunning()
Definition Engine.h:101
float getInputShaftRPM()
Definition Engine.h:104
float getPostShiftTime() const
Time (in seconds) until full torque is transferred ('engoption' attr #6)
Definition Engine.h:76
void setRPM(float rpm)
Definition Engine.cpp:918
int getGearRange()
Definition Engine.cpp:1049
float getGearRatio(int pos)
-1=R, 0=N, 1... ('engine' attrs #5[R],#6[N],#7[1]...)
Definition Engine.cpp:956
int m_shifting
Definition Engine.h:238
float getTurboPSI()
Definition Engine.cpp:857
bool hasContact()
Ignition.
Definition Engine.h:102
This class loads and processes a torque curve for a vehicle.
Definition TorqueCurve.h:43
SimGearboxMode