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
SimBuffers.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 2016-2021 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
24#include "AutoPilot.h"
25#include "CameraManager.h"
26#include "Differentials.h"
27#include "SimData.h"
28#include <Ogre.h>
29
30/*
31 @file
32 @brief Sim buffers are snapshots of simulation state, which are used for updating visual scene.
33
34 HOW IT WORKS AND WHY
35 --------------------
36 This game uses quite a lot of CPU-intensive computations when updating visuals.
37 The biggest issue are flexbodies, submeshes and wheels, but also props and beams.
38 To avoid halting simulation until all these slow updates are done, the process is divided:
39 1. Simulation runs on it's own thread, at it's own pace (see PHYSICS_DT).
40 It only updates positons and forces, it doesn't deal with graphics at all.
41 2. When time comes for rendering, simulation is halted and all data relevant to graphics
42 are copied-out to simbuffers. Then, simulation is resumed.
43 3. The rendering thread processes the simbuffers and updates visual objects.
44
45 OVERVIEW OF GAMEPLAY OBJECTS
46 ----------------------------
47 Following listing shows {SIMULATION / SIMBUFFER / GRAPHICAL} object triplets
48 and filenames where the objects live (to be cleaned up).
49 Note that for historical reasons, many simulation bits are actually done
50 on main thread, but the goal is to do all on sim. thread.
51
52 GameContext (gamecontext.h) / GameContextSB / GfxScene (gfxscene.h)
53 Actor (actor.h) / ActorSB / GfxActor (gfxactor.h)
54 node_t (simdata.h) / NodeSB / NodeGfx (gfxdata.h)
55 beam_t (simdata.h) / - / BeamGfx (gfxdata.h)
56 command_t (simdata.h) / CommandKeySB / -
57 wheel_t (simdata.h) / - / WheelGfx (gfxdata.h)
58 wing_t (simdata.h) / - / -
59 Turbojet (turbojet.h) / AeroEngineSB / TurbojetVisual (turbojet.h)
60 Turboprop (turboprop.h) / AeroEngineSB / -
61 Airbrake (airbrake.h) / AirbrakeSB / AirbrakeGfx (gfxdata.h)
62 Screwprop (screwprop.h) / ScrewpropSB / -
63*/
64
65namespace RoR {
66
67struct NodeSB
68{
69 Ogre::Vector3 AbsPosition; // classic name
71 bool nd_is_wet:1;
72};
73
79
81{
83};
84
89
104
106{
108};
109
111{
112 // PLEASE maintain the same order as in `GfxActor::UpdateSimDataBuffer()`
113
114 // Gameplay state
121
122 // Movement
123 Ogre::Vector3 simbuf_pos = Ogre::Vector3::ZERO;
124 Ogre::Vector3 simbuf_node0_velo = Ogre::Vector3::ZERO;
126 Ogre::Vector3 simbuf_direction = Ogre::Vector3::ZERO;
129 Ogre::AxisAlignedBox simbuf_aabb = Ogre::AxisAlignedBox::BOX_NULL;
132
133 // Elements
134 std::vector<NodeSB> simbuf_nodes;
135 std::vector<ScrewpropSB> simbuf_screwprops;
136 std::array<CommandKeySB, MAX_COMMANDS+1> simbuf_commandkey;
137 std::vector<PropAnimKeySB> simbuf_prop_anim_keys;
138 std::vector<AeroEngineSB> simbuf_aeroengines;
139 std::vector<AirbrakeSB> simbuf_airbrakes;
140
141 // Drivetrain
142 float simbuf_hydro_dir_state = 0; // State of steering actuator ('hydro'), for steeringwheel display
143 float simbuf_brake = 0;
144 bool simbuf_has_engine = false;
145 int simbuf_gear = 0;
152 float simbuf_inputshaft_rpm = 0; // Land vehicle only
153 float simbuf_drive_ratio = 0; // Land vehicle only
155 float simbuf_clutch = 0;
159
160 // Tyre pressure
163
164 // Effects
169
170 // Aerial
177
178 // Autopilot
183 int simbuf_ap_alt_value = 1000; // from AutoPilot::reset()
184 bool simbuf_ap_ias_mode = false;
185 int simbuf_ap_ias_value = 150; // from AutoPilot::reset()
191
192 // GUI ('guisettings')
196};
197
220
221} // namespace RoR
222
uint32_t BitMask_t
Definition BitFlags.h:7
Core data structures for simulation; Everything affected by by either physics, network or user intera...
@ NOT_DRIVEABLE
not drivable at all
Definition SimData.h:84
AeroEngineType
Definition SimData.h:249
ActorState
Definition SimData.h:239
@ LOCAL_SLEEPING
sleeping (local) actor
@ SPLIT_DIFF
uint16_t NodeNum_t
Node position within Actor::ar_nodes; use RoR::NODENUM_INVALID as empty value.
int simbuf_airbrake_state
Definition SimBuffers.h:175
int simbuf_ap_alt_value
Definition SimBuffers.h:183
int simbuf_num_gears
Gearbox.
Definition SimBuffers.h:156
std::vector< NodeSB > simbuf_nodes
Definition SimBuffers.h:134
int simbuf_ap_ias_value
Definition SimBuffers.h:185
bool simbuf_ap_ias_mode
Definition SimBuffers.h:184
Ogre::Vector3 simbuf_node0_velo
Definition SimBuffers.h:124
bool simbuf_tyre_pressurizing
Definition SimBuffers.h:162
float simbuf_drive_ratio
Definition SimBuffers.h:153
bool simbuf_has_engine
Definition SimBuffers.h:144
float simbuf_engine_crankfactor
Definition SimBuffers.h:148
int simbuf_cur_cinecam
Definition SimBuffers.h:117
int simbuf_ap_heading_mode
Definition SimBuffers.h:180
float simbuf_rotation
Definition SimBuffers.h:125
float simbuf_shifter_anim_time
Definition SimBuffers.h:195
float simbuf_ap_ils_vdev
Definition SimBuffers.h:188
bool simbuf_has_autopilot
Definition SimBuffers.h:179
bool simbuf_physics_paused
Definition SimBuffers.h:116
float simbuf_engine_rpm
Definition SimBuffers.h:147
bool simbuf_smoke_enabled
Definition SimBuffers.h:166
int simbuf_driveable
Definition SimBuffers.h:120
std::array< CommandKeySB, MAX_COMMANDS+1 > simbuf_commandkey
BEWARE: commandkeys are indexed 1-MAX_COMMANDS!
Definition SimBuffers.h:136
float simbuf_clutch
Definition SimBuffers.h:155
int simbuf_ap_heading_value
Definition SimBuffers.h:181
std::vector< ScrewpropSB > simbuf_screwprops
Definition SimBuffers.h:135
int simbuf_ap_vs_value
Definition SimBuffers.h:190
float simbuf_ap_ils_hdev
Definition SimBuffers.h:189
int simbuf_aero_flap_state
Definition SimBuffers.h:174
float simbuf_hydro_elevator_state
Definition SimBuffers.h:172
float simbuf_wheel_speed
Definition SimBuffers.h:127
float simbuf_wing4_aoa
Definition SimBuffers.h:176
float simbuf_speedo_highest_kph
Definition SimBuffers.h:193
float simbuf_hydro_aileron_state
Definition SimBuffers.h:171
bool simbuf_speedo_use_engine_max_rpm
Definition SimBuffers.h:194
std::vector< AeroEngineSB > simbuf_aeroengines
Definition SimBuffers.h:138
BitMask_t simbuf_lightmask
Definition SimBuffers.h:165
float simbuf_engine_accel
Definition SimBuffers.h:150
bool simbuf_ap_ils_available
Definition SimBuffers.h:187
float simbuf_hydro_dir_state
Definition SimBuffers.h:142
float simbuf_tyre_pressure
Definition SimBuffers.h:161
float simbuf_inputshaft_rpm
Definition SimBuffers.h:152
float simbuf_brake
Definition SimBuffers.h:143
float simbuf_engine_max_rpm
Definition SimBuffers.h:157
NodeNum_t simbuf_camera0_pos_node
Definition SimBuffers.h:130
float simbuf_engine_smoke
Definition SimBuffers.h:158
bool simbuf_parking_brake
Definition SimBuffers.h:167
std::vector< AirbrakeSB > simbuf_airbrakes
Definition SimBuffers.h:139
DiffType simbuf_diff_type
Definition SimBuffers.h:154
NodeNum_t simbuf_camera0_roll_node
Definition SimBuffers.h:131
ActorState simbuf_actor_state
Definition SimBuffers.h:115
Ogre::Vector3 simbuf_direction
Output of Actor::getDirection()
Definition SimBuffers.h:126
float simbuf_hydro_aero_rudder_state
Definition SimBuffers.h:173
float simbuf_top_speed
Definition SimBuffers.h:128
bool simbuf_cparticles_active
Definition SimBuffers.h:168
bool simbuf_ap_gpws_mode
Definition SimBuffers.h:186
std::string simbuf_net_username
Definition SimBuffers.h:118
int simbuf_ap_alt_mode
Definition SimBuffers.h:182
Ogre::Vector3 simbuf_pos
Definition SimBuffers.h:123
std::vector< PropAnimKeySB > simbuf_prop_anim_keys
Definition SimBuffers.h:137
float simbuf_engine_turbo_psi
Definition SimBuffers.h:149
int simbuf_autoshift
Definition SimBuffers.h:146
Ogre::AxisAlignedBox simbuf_aabb
Definition SimBuffers.h:129
float simbuf_engine_torque
Definition SimBuffers.h:151
int simbuf_net_colornum
Definition SimBuffers.h:119
float simbuf_tj_ab_thrust
Definition SimBuffers.h:98
bool simbuf_ae_ignition
Turbojet.
Definition SimBuffers.h:100
float simbuf_tp_aetorque
Turboprop torque, used by animation "aetorque".
Definition SimBuffers.h:96
float simbuf_ae_throttle
Definition SimBuffers.h:95
float simbuf_tj_exhaust_velo
Turbojet afterburner.
Definition SimBuffers.h:99
float simbuf_tp_aepitch
Turboprop pitch, used by animation "aepitch".
Definition SimBuffers.h:97
AeroEngineType simbuf_ae_type
Definition SimBuffers.h:92
float simbuf_ab_ratio
Definition SimBuffers.h:107
Ogre::Vector3 simbuf_character_pos
Definition SimBuffers.h:204
bool simbuf_dir_arrow_visible
Definition SimBuffers.h:218
float simbuf_race_time_diff
Definition SimBuffers.h:213
ActorPtr simbuf_player_actor
Definition SimBuffers.h:203
CameraManager::CameraBehaviors simbuf_camera_behavior
Definition SimBuffers.h:208
Ogre::Vector3 simbuf_dir_arrow_target
Definition SimBuffers.h:216
float simbuf_race_best_time
Definition SimBuffers.h:212
bool simbuf_race_in_progress_prev
Definition SimBuffers.h:215
std::string simbuf_dir_arrow_text
Definition SimBuffers.h:217
bool nd_has_contact
Definition SimBuffers.h:70
Ogre::Vector3 AbsPosition
Definition SimBuffers.h:69
bool nd_is_wet
Definition SimBuffers.h:71
float simbuf_sp_throttle
Definition SimBuffers.h:77
float simbuf_sp_rudder
Definition SimBuffers.h:76