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
RigDef_File.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-2024 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
40#pragma once
41
42#include "Application.h"
43#include "BitFlags.h"
44#include "RigDef_Node.h"
45#include "SimConstants.h"
46
47#include <list>
48#include <memory>
49#include <vector>
50#include <string>
51#include <OgreString.h>
52#include <OgreVector3.h>
53#include <OgreStringConverter.h>
54
55namespace RigDef {
56
57extern const char* ROOT_MODULE_NAME;
58
59// --------------------------------
60// Enums which only carry value
61
77
86
87// --------------------------------
88// Enums which specify option letters/numbers and also carry value
89
90enum class EngineType
91{
92 c_CAR = 'c',
93 e_ECAR = 'e',
94 t_TRUCK = 't',
95};
96
97enum class DifferentialType: char
98{
99 o_OPEN = 'o',
100 l_LOCKED = 'l',
101 s_SPLIT = 's',
102 v_VISCOUS = 'v'
103};
104
105typedef std::vector<DifferentialType> DifferentialTypeVec;
106
107enum class MinimassOption: char
108{
109 n_DUMMY = 'n',
110 l_SKIP_LOADED = 'l'
111};
112
113enum class WingControlSurface: char
114{
115 n_NONE = 'n',
116 a_RIGHT_AILERON = 'a',
117 b_LEFT_AILERON = 'b',
118 f_FLAP = 'f',
119 e_ELEVATOR = 'e',
120 r_RUDDER = 'r',
123 c_RIGHT_ELEVON = 'c',
124 d_LEFT_ELEVON = 'd',
125 g_RIGHT_FLAPERON = 'g',
126 h_LEFT_FLAPERON = 'h',
130 j_LEFT_RUDDERVATOR = 'j',
131};
132
133// --------------------------------
134// Enums which only specify flag letters, values are carried by bit masks
135
136enum class TieOption: char
137{
138 n_DUMMY = 'n',
139 v_DUMMY = 'v',
140 i_INVISIBLE = 'i',
141 s_NO_SELF_LOCK = 's',
142};
143
144enum class CabOption: char
145{
146 n_DUMMY = 'n',
147 c_CONTACT = 'c',
148 b_BUOYANT = 'b',
149 p_10xTOUGHER = 'p',
150 u_INVULNERABLE = 'u',
151 s_BUOYANT_NO_DRAG = 's',
153 D_CONTACT_BUOYANT = 'D',
156};
157
158enum class TriggerOption: char
159{
160 i_INVISIBLE = 'i',
161 c_COMMAND_STYLE = 'c',
162 x_START_DISABLED = 'x',
163 b_KEY_BLOCKER = 'b',
164 B_TRIGGER_BLOCKER = 'B',
166 s_CMD_NUM_SWITCH = 's',
168 H_LOCKS_HOOK_GROUP = 'H',
169 t_CONTINUOUS = 't',
170 E_ENGINE_TRIGGER = 'E',
171};
172
173enum class BeamOption: char
174{
175 v_DUMMY = 'v',
176 i_INVISIBLE = 'i',
177 r_ROPE = 'r',
178 s_SUPPORT = 's',
179};
180
181enum class HydroOption: char
182{
183 n_INPUT_NORMAL = 'n',
184 j_INVISIBLE = 'j',
186 // Useful for trucks
188 // Useful for planes: These can be used to control flight surfaces, or to create a thrust vectoring system.
189 a_INPUT_AILERON = 'a',
190 r_INPUT_RUDDER = 'r',
191 e_INPUT_ELEVATOR = 'e',
198};
199
200enum class ShockOption: char
201{
202 n_DUMMY = 'n',
203 v_DUMMY = 'v',
204 i_INVISIBLE = 'i',
205 L_ACTIVE_LEFT = 'L',
206 R_ACTIVE_RIGHT = 'R',
207 m_METRIC = 'm',
208};
209
210enum class Shock2Option: char
211{
212 n_DUMMY = 'n',
213 v_DUMMY = 'v',
214 i_INVISIBLE = 'i',
215 s_SOFT_BUMP_BOUNDS = 's',
216 m_METRIC = 'm',
217 M_ABSOLUTE_METRIC = 'M',
218};
219
220enum class Shock3Option: char
221{
222 n_DUMMY = 'n',
223 v_DUMMY = 'v',
224 i_INVISIBLE = 'i',
225 m_METRIC = 'm',
226 M_ABSOLUTE_METRIC = 'M',
227};
228
229enum class NodeOption: char
230{
231 n_DUMMY = 'n',
232 m_NO_MOUSE_GRAB = 'm',
233 f_NO_SPARKS = 'f',
234 x_EXHAUST_POINT = 'x',
237 h_HOOK_POINT = 'h',
239 b_EXTRA_BUOYANCY = 'b',
240 p_NO_PARTICLES = 'p',
241 L_LOG = 'L',
242 l_LOAD_WEIGHT = 'l',
243};
244
245// --------------------------------
246// Shared/helper rig definition data
247
248struct AeroAnimator // used by Animator
249{
251 static const BitMask_t OPTION_RPM = BITMASK(2);
252 static const BitMask_t OPTION_TORQUE = BITMASK(3);
253 static const BitMask_t OPTION_PITCH = BITMASK(4);
254 static const BitMask_t OPTION_STATUS = BITMASK(5);
255
257 unsigned int engine_idx = 0u;
258};
259
261{
262 std::string filename;
263};
264
278
279struct BaseMeshWheel: public BaseWheel // common to 'meshwheels' and 'meshwheels2'
280{
282 Ogre::String mesh_name;
283 Ogre::String material_name;
284 float rim_radius = 0.f;
285 float tyre_radius = 0.f;
286 float spring;
287 float damping;
288};
289
290struct BaseWheel2: public BaseWheel // common to 'wheels2' and 'flexbodywheels'
291{
292 float rim_radius = 0.f;
293 float tyre_radius = 0.f;
294 float tyre_springiness = 0.f;
295 float tyre_damping = 0.f;
296};
297
299{
304
307 Ogre::String start_function;
308 Ogre::String stop_function;
309};
310
312{
313 std::string comment_text;
314 // The item following after the comment.
317};
318
319// --------------------------------
320// Rig definition data for individual elements
321
340
342{
344 {
345 // > aeroengines
351 // > forward gears (hack...)
353
355 unsigned int motor = 0;
356 };
357
358 // Source flags
396
397 // Mode flags
401 static const BitMask_t MODE_OFFSET_X = BITMASK(4);
402 static const BitMask_t MODE_OFFSET_Y = BITMASK(5);
403 static const BitMask_t MODE_OFFSET_Z = BITMASK(6);
405 static const BitMask_t MODE_NO_FLIP = BITMASK(8);
406 static const BitMask_t MODE_BOUNCE = BITMASK(9);
408
409 float ratio = 0.f;
410 float lower_limit = -1.f;
411 float upper_limit = -1.f;
413 std::list<MotorSource> motor_sources;
415 Ogre::String event_name;
416 Ogre::String dash_link_name;
417
418 void AddMotorSource(BitMask_t source, unsigned int motor);
419};
420
422{
423 static const BitMask_t OPTION_VISIBLE = BITMASK( 1);
431 static const BitMask_t OPTION_FLAP = BITMASK( 9);
433 static const BitMask_t OPTION_ROLL = BITMASK(11);
434 static const BitMask_t OPTION_PITCH = BITMASK(12);
435 static const BitMask_t OPTION_BRAKES = BITMASK(13);
436 static const BitMask_t OPTION_ACCEL = BITMASK(14);
437 static const BitMask_t OPTION_CLUTCH = BITMASK(15);
438 static const BitMask_t OPTION_SPEEDO = BITMASK(16);
439 static const BitMask_t OPTION_TACHO = BITMASK(17);
440 static const BitMask_t OPTION_TURBO = BITMASK(18);
441 static const BitMask_t OPTION_PARKING = BITMASK(19);
446 static const BitMask_t OPTION_TORQUE = BITMASK(24);
452
456 float short_limit = 0.f;
457 float long_limit = 0.f;
459 std::shared_ptr<Inertia> inertia_defaults;
460 std::shared_ptr<BeamDefaults> beam_defaults;
462};
463
475
476struct Author
477{
478 Ogre::String type;
479 unsigned int forum_account_id = 0;
480 Ogre::String name;
481 Ogre::String email;
482 bool _has_forum_account = false;
483};
484
490
491struct Beam
492{
494 static const BitMask_t OPTION_r_ROPE = BITMASK(2);
496
502 std::shared_ptr<BeamDefaults> defaults;
503};
504
519
521{
522 BeamDefaults(): // NOTE: -1.f is 'empty value'; replaced by constant in parser.
523 springiness(-1.f),
524 damping_constant(-1.f),
527 beam_material_name("tracks/beam"),
528 breaking_threshold(-1.f),
531 _is_user_defined(false)
532 {}
533
535 {
537 }
538
540 {
542 }
543
548
553
559 Ogre::String beam_material_name;
565};
566
567struct Brakes
568{
569 float default_braking_force = 30000.f;
571};
572
588
595
597{
598 std::vector<Node::Ref> nodes;
599};
600
605
607{
608 Ogre::Vector3 position = Ogre::Vector3::ZERO;
610 float spring = 8000.f;
611 float damping = 800.f;
612 float node_mass = 20.f;
613 std::shared_ptr<BeamDefaults> beam_defaults;
614 std::shared_ptr<NodeDefaults> node_defaults;
615};
616
618{
619 std::vector<Node::Ref> nodes;
620};
621
623{
625};
626
627struct Command2 // 'commands' are auto-imported as 'commands2' (only 1 extra argument)
628{
630 float shorten_rate = 0.f;
631 float lengthen_rate = 0.f;
632 float max_contraction = 0.f;
633 float max_extension = 0.f;
636 Ogre::String description;
638 float affect_engine = 1.f;
639 bool needs_engine = true;
640 bool plays_sound = true;
641 std::shared_ptr<BeamDefaults> beam_defaults;
642 std::shared_ptr<Inertia> inertia_defaults;
644
645 bool option_i_invisible = false;
646 bool option_r_rope = false;
649 bool option_p_1press = false;
651};
652
654{
655 float min_speed = 0.f;
656 int autobrake = 0;
657};
658
660{
661 Ogre::String name;
663};
664
669
671{
672 std::string skin_name;
673};
674
675struct Engine
676{
677 float shift_down_rpm = 0.f;
678 float shift_up_rpm = 0.f;
679 float torque = 0.f;
680 float global_gear_ratio = 0.f;
683 std::vector<float> gear_ratios;
684};
685
687{
688 float inertia = 10.f;
690 float clutch_force = -1.f;
691 float shift_time = -1.f;
692 float clutch_time = -1.f;
693 float post_shift_time = -1.f;
694 float idle_rpm = -1.f;
695 float stall_rpm = -1.f;
696 float max_idle_mixture = -1.f;
697 float min_idle_mixture = -1.f;
698 float braking_torque = -1.f;
699};
700
702{
703 Engturbo();
704
708 float param1;
709 float param2;
710 float param3;
711 float param4;
712 float param5;
713 float param6;
714 float param7;
715 float param8;
716 float param9;
717 float param10;
718 float param11;
719};
720
727
733
735{
736 int version = -1;
737};
738
740{
741 Ogre::String unique_id;
742 int category_id = -1;
744};
745
747{
751 Ogre::Vector3 offset = Ogre::Vector3(0, 0, 1); // Note `offset.z` is only used by flares2+
753 int control_number = -1;
754 std::string dashboard_link;
756 float size = -1.f;
757 Ogre::String material_name;
758};
759
760struct Flare2 : public FlareBase // Note 'flares' are auto-imported as 'flares2' (only 1 extra argument)
761{
762};
763
764struct Flare3: public FlareBase
765{
766 std::shared_ptr<Inertia> inertia_defaults;
767};
768
774
777{
781 int vert_index{ 0 };
782 int line_number{ 0 }; // If multiple verts are given on single 'forvert' line, multiple `Forvert` entries are inserted.
783};
784
786{
790 Ogre::Vector3 offset = Ogre::Vector3::ZERO;
791 Ogre::Vector3 rotation = Ogre::Vector3::ZERO;
792 Ogre::String mesh_name;
793 std::list<Animation> animations;
794 std::vector<Node::Range> node_list_to_import;
795 std::vector<Node::Ref> node_list;
796 std::vector<Forvert> forvert;
798};
799
808
820
822{
823 float dry_mass = 0;
824 float cargo_mass = 0;
825 Ogre::String material_name;
826};
827
828struct Guid
829{
830 std::string guid;
831};
832
834{
835 std::string key;
836 std::string value;
837};
838
839struct Help
840{
841 std::string material;
842};
843
862
863struct Hydro
864{
866 // Useful for trucks:
868 // Useful for planes: These can be used to control flight surfaces, or to create a thrust vectoring system.
878 // Generic steering input
880
885 std::shared_ptr<Inertia> inertia_defaults;
886 std::shared_ptr<BeamDefaults> beam_defaults;
888};
889
891{
892 int a1 = 0;
893 int a2 = 0;
895};
896
898{
899 // TODO remove these, use SimConstants.h
900 static const int LOCKGROUP_DEFAULT = -1;
901 static const int LOCKGROUP_NOLOCK = 9999;
902
903 int number = 0;
904 std::vector<Node::Ref> nodes;
905};
906
908{
909 bool double_sided = false;
910};
911
923
925{
926 unsigned int flare_number = 0;
927 Ogre::String material_name;
928};
929
935
937{};
938
940{};
941
943{
944 NodeDefaults();
945
947 float friction;
948 float volume;
949 float surface;
950 unsigned int options;
951};
952
959
970
971struct Prop
972{
974 {
976 offset(Ogre::Vector3::ZERO), // Default depends on right/left-hand dashboard placement
977 rotation_angle(160.f),
978 _offset_is_set(false),
979 mesh_name("dirwheel.mesh")
980 {}
981
982 Ogre::Vector3 offset;
985 Ogre::String mesh_name;
986 };
987
989 {
991 color(1.0, 0.5, 0.0),
992 flare_material_name("tracks/beaconflare")
993 {}
994
996 Ogre::ColourValue color;
997 };
998
1002 Ogre::Vector3 offset = Ogre::Vector3::ZERO;
1003 Ogre::Vector3 rotation = Ogre::Vector3::ZERO;
1004 Ogre::String mesh_name;
1005 std::list<Animation> animations;
1010};
1011
1013{
1014 unsigned int id = 0;
1015 std::vector<Node::Range> node_list;
1016};
1017
1019{
1021 int group = -1; // = value not set
1022 bool has_multilock = false;
1023};
1024
1025struct Rope
1026{
1029 bool invisible = false;
1030 std::shared_ptr<BeamDefaults> beam_defaults;
1032};
1033
1035{
1039 float rate = 0.f;
1040 unsigned int spin_left_key = 0;
1041 unsigned int spin_right_key = 0;
1043 std::shared_ptr<Inertia> inertia_defaults;
1044 float engine_coupling = 1.f;
1045 bool needs_engine = false;
1046};
1047
1048struct Rotator2: public Rotator
1049{
1050 float rotating_force = 10000000.f;
1051 float tolerance = 0.f;
1052 Ogre::String description;
1053};
1054
1062
1064{
1065 std::string filename;
1066};
1067
1069{
1071};
1072
1073struct Shock
1074{
1079
1081 float spring_rate = 0.f;
1082 float damping = 0.f;
1083 float short_bound = 0.f;
1084 float long_bound = 0.f;
1085 float precompression = 1.f;
1087 std::shared_ptr<BeamDefaults> beam_defaults;
1089};
1090
1092{
1093 Shock2();
1094
1096 static const BitMask_t OPTION_s_SOFT_BUMP_BOUNDS = BITMASK(2); // soft bump boundaries, use when shocks reach limiters too often and "jumprebound" (default is hard bump boundaries)
1097 static const BitMask_t OPTION_m_METRIC = BITMASK(3); // metric values for shortbound/longbound applying to the length of the beam.
1098 static const BitMask_t OPTION_M_ABSOLUTE_METRIC = BITMASK(4); // Absolute metric values for shortbound/longbound, settings apply without regarding to the original length of the beam.(Use with caution, check ror.log for errors)
1099
1102 float damp_in;
1106 float damp_out;
1113 std::shared_ptr<BeamDefaults> beam_defaults;
1115};
1116
1118{
1119 Shock3();
1120
1122 static const BitMask_t OPTION_m_METRIC = BITMASK(2); // metric values for shortbound/longbound applying to the length of the beam.
1123 static const BitMask_t OPTION_M_ABSOLUTE_METRIC = BITMASK(3); // Absolute metric values for shortbound/longbound, settings apply without regarding to the original length of the beam.(Use with caution, check ror.log for errors)
1124
1127 float damp_in;
1129 float damp_out;
1140 std::shared_ptr<BeamDefaults> beam_defaults;
1142};
1143
1149
1151{
1156
1158 std::vector<Node::Range> rail_node_ranges;
1160
1161 // Optional args
1162 float spring_rate=0.f; bool _spring_rate_set=false;
1163 float break_force=0.f; bool _break_force_set=false;
1164 float tolerance=0.f; bool _tolerance_set=false;
1168};
1169
1171{
1173 Ogre::String sound_script_name;
1174};
1175
1177{
1178 static const int MODE_ALWAYS = -2;
1179 static const int MODE_EXTERIOR = -1;
1180
1182};
1183
1185{
1186 float max_speed = 0.f;
1187 bool is_enabled = false;
1188};
1189
1190struct Texcoord; // needed by Submesh
1191
1193{
1194 bool backmesh = false;
1195 std::vector<Texcoord> texcoords;
1196 std::vector<Cab> cab_triangles;
1197};
1198
1200{
1202 float u = 0.f;
1203 float v = 0.f;
1204};
1205
1206struct Tie
1207{
1210
1212 float max_reach_length = 0.f;
1214 float min_length = 0.f;
1215 float max_length = 0.f;
1217 float max_stress = 100000.0f;
1218 std::shared_ptr<BeamDefaults> beam_defaults;
1220 int group = -1;
1221};
1222
1224{
1225 struct Sample
1226 {
1228 power(0),
1230 {}
1231
1232 float power;
1234 };
1235
1236 std::vector<Sample> samples;
1238};
1239
1252
1254{
1255 int a1 = 0;
1256 int a2 = -1;
1257 bool has_2wd = true;
1258 bool has_2wd_lo = false;
1259 std::vector<float> gear_ratios = {1.0f};
1260};
1261
1286
1299
1309
1329
1330struct Wheel: public BaseWheel
1331{
1332 float radius = 0.f;
1333 float springiness = 0.f;
1334 float damping = 0.f;
1335 Ogre::String face_material_name = "tracks/wheelface";
1336 Ogre::String band_material_name = "tracks/wheelband1";
1337};
1338
1339struct Wheel2: public BaseWheel2
1340{
1341 float rim_springiness = 0.f;
1342 float rim_damping = 0.f;
1343 Ogre::String face_material_name = "tracks/wheelface";
1344 Ogre::String band_material_name = "tracks/wheelband1";
1345};
1346
1348{
1349 int wheel_id = 0;
1351};
1352
1353struct Wing
1354{
1356 float tex_coords[8] = {};
1358 float chord_point = -1.f;
1359 float min_deflection = -1.f;
1360 float max_deflection = -1.f;
1361 Ogre::String airfoil;
1362 float efficacy_coef = 1.f; // So-called 'liftcoef'.
1363};
1364
1365// --------------------------------
1366// The document
1367
1369{
1370 struct Module // represents 'section/end_section'. Also use by 'addonparts' system.
1371 {
1372 Module(Ogre::String const & name);
1373
1374 Ogre::String name;
1376
1377 std::vector<Airbrake> airbrakes;
1378 std::vector<Animator> animators;
1379 std::vector<AntiLockBrakes> antilockbrakes;
1380 std::vector<Assetpack> assetpacks;
1381 std::vector<Author> author;
1382 std::vector<Axle> axles;
1383 std::vector<Beam> beams;
1384 std::vector<Brakes> brakes;
1385 std::vector<Camera> cameras;
1386 std::vector<CameraRail> camerarail;
1387 std::vector<CollisionBox> collisionboxes;
1388 std::vector<Cinecam> cinecam;
1389 std::vector<Command2> commands2; // 'commands' are auto-imported as 'commands2' (only 1 extra argument)
1390 std::vector<CruiseControl> cruisecontrol;
1391 std::vector<Node::Ref> contacters;
1392 std::vector<CustomDashboardInput> customdashboardinputs;
1393 std::vector<DefaultSkin> default_skin;
1394 std::vector<Ogre::String> description;
1395 std::vector<Engine> engine;
1396 std::vector<Engoption> engoption;
1397 std::vector<Engturbo> engturbo;
1398 std::vector<Exhaust> exhausts;
1399 std::vector<ExtCamera> extcamera;
1400 std::vector<FileFormatVersion> fileformatversion;
1401 std::vector<Node::Ref> fixes;
1402 std::vector<Fileinfo> fileinfo;
1403 std::vector<Flare2> flares2; // 'flares' are auto-imported as 'flares2' (only 1 extra argument)
1404 std::vector<Flare3> flares3;
1405 std::vector<FlaregroupNoImport> flaregroups_no_import;
1406 std::vector<Flexbody> flexbodies;
1407 std::vector<FlexBodyWheel> flexbodywheels;
1408 std::vector<Fusedrag> fusedrag;
1409 std::vector<Globals> globals;
1410 std::vector<Guid> guid;
1411 std::vector<GuiSettings> guisettings;
1412 std::vector<Help> help;
1413 std::vector<Hook> hooks;
1414 std::vector<Hydro> hydros;
1415 std::vector<InterAxle> interaxles;
1416 std::vector<Lockgroup> lockgroups;
1417 std::vector<ManagedMaterial> managedmaterials;
1418 std::vector<MaterialFlareBinding> materialflarebindings;
1419 std::vector<MeshWheel> meshwheels;
1420 std::vector<MeshWheel2> meshwheels2;
1421 std::vector<Minimass> minimass;
1422 std::vector<Node> nodes; /* Nodes and Nodes2 are unified in this parser */
1423 std::vector<Particle> particles;
1424 std::vector<Pistonprop> pistonprops;
1425 std::vector<Prop> props;
1426 std::vector<RailGroup> railgroups;
1427 std::vector<Ropable> ropables;
1428 std::vector<Rope> ropes;
1429 std::vector<Rotator> rotators;
1430 std::vector<Rotator2> rotators2;
1431 std::vector<Screwprop> screwprops;
1432 std::vector<Script> scripts;
1433 std::vector<Shock> shocks;
1434 std::vector<Shock2> shocks2;
1435 std::vector<Shock3> shocks3;
1436 std::vector<CollisionRange> set_collision_range;
1437 std::vector<SkeletonSettings> set_skeleton_settings;
1438 std::vector<SlideNode> slidenodes;
1439 std::vector<SoundSource> soundsources;
1440 std::vector<SoundSource2> soundsources2;
1441 std::vector<SpeedLimiter> speedlimiter;
1442 std::vector<Ogre::String> submesh_groundmodel;
1443 std::vector<Submesh> submeshes;
1444 std::vector<Tie> ties;
1445 std::vector<TorqueCurve> torquecurve;
1446 std::vector<TractionControl> tractioncontrol;
1447 std::vector<TransferCase> transfercase;
1448 std::vector<Trigger> triggers;
1449 std::vector<Turbojet> turbojets;
1450 std::vector<Turboprop2> turboprops2;
1451 std::vector<VideoCamera> videocameras;
1452 std::vector<WheelDetacher> wheeldetachers;
1453 std::vector<Wheel> wheels;
1454 std::vector<Wheel2> wheels2;
1455 std::vector<Wing> wings;
1456
1457 // Metadata
1462 std::vector<DocComment> _comments;
1463 };
1464
1465 Document();
1466
1476 Ogre::String name;
1477
1478 // File hash
1479 std::string hash;
1480
1481 // Vehicle modules (caled 'sections' in truckfile doc)
1482 std::shared_ptr<Module> root_module;
1483 std::map< Ogre::String, std::shared_ptr<Module> > user_modules;
1484
1485};
1486
1487} // namespace RigDef
Central state/object manager and communications hub.
Bit operations.
#define BITMASK(OFFSET)
Definition BitFlags.h:10
uint64_t BitMask64_t
Definition BitFlags.h:8
#define BITMASK64(OFFSET)
Definition BitFlags.h:11
uint32_t BitMask_t
Definition BitFlags.h:7
Legacy parser resolved references on-the-fly and the condition to check named nodes was "are there an...
Definition RigDef_Node.h:78
static const float BEAM_SKELETON_DIAMETER
static const float BEAM_PLASTIC_COEF_DEFAULT
static const float DEFAULT_MINIMASS
minimum node mass in Kg
const char * ROOT_MODULE_NAME
@ c_COMMAND_STYLE
trigger is set with commandstyle boundaries instead of shocksytle
@ s_CMD_NUM_SWITCH
switch that exchanges cmdshort/cmdshort for all triggers with the same commandnumbers,...
@ t_CONTINUOUS
this trigger sends values between 0 and 1
@ A_INV_TRIGGER_BLOCKER
Blocker that enable/disable other triggers, reversed activation method (inverted Blocker style,...
@ B_TRIGGER_BLOCKER
Blocker that enable/disable other triggers.
@ E_ENGINE_TRIGGER
this trigger is used to control an engine
@ x_START_DISABLED
this trigger is disabled on startup, default is enabled
@ b_KEY_BLOCKER
Set the CommandKeys that are set in a commandkeyblocker or trigger to blocked on startup,...
ManagedMaterialType
Definition RigDef_File.h:79
DifferentialType
Definition RigDef_File.h:98
WingControlSurface
std::vector< DifferentialType > DifferentialTypeVec
@ l_SKIP_LOADED
Only apply minimum mass to nodes without "L" option.
@ s_SOFT_BUMP_BOUNDS
soft bump boundaries, use when shocks reach limiters too often and "jumprebound" (default is hard bum...
@ M_ABSOLUTE_METRIC
Absolute metric values for shortbound/longbound, settings apply without regarding to the original len...
@ i_INVISIBLE_INPUT_NORMAL
For backwards compatibility; combines flags 'j' and 'n'.
WheelSide
Used by rig-def/addonpart/tuneup formats to specify wheel rim mesh orientation.
VideoCamRole
@ VCAM_ROLE_INVALID
int CommandkeyID_t
Index into Actor::ar_commandkeys (BEWARE: indexed 1-MAX_COMMANDKEYS, 0 is invalid value,...
static CameraMode_t CAMERA_MODE_ALWAYS_VISIBLE
ExtCameraMode
static const CommandkeyID_t COMMANDKEYID_INVALID
WheelPropulsion
WheelBraking
@ NONE
= no footbrake, no handbrake, no direction control – wheel is unbraked
static const BitMask_t OPTION_THROTTLE
unsigned int engine_idx
static const BitMask_t OPTION_RPM
static const BitMask_t OPTION_TORQUE
static const BitMask_t OPTION_PITCH
static const BitMask_t OPTION_STATUS
Node::Ref aditional_node
Node::Ref y_axis_node
Node::Ref reference_node
float max_inclination_angle
Node::Ref x_axis_node
Ogre::Vector3 offset
static const BitMask_t SOURCE_AERO_PITCH
static const BitMask_t SOURCE_AERO_STATUS
static const BitMask_t SOURCE_AERO_RPM
static const BitMask_t SOURCE_AERO_TORQUE
static const BitMask_t SOURCE_AERO_THROTTLE
static const BitMask_t SOURCE_GEAR_FORWARD
static const BitMask64_t SOURCE_GEAR_REVERSE
static const BitMask64_t SOURCE_TURBO
static const BitMask64_t SOURCE_SEQUENTIAL_SHIFT
static const BitMask64_t SOURCE_AIR_RUDDER
static const BitMask_t MODE_ROTATION_X
static const BitMask64_t SOURCE_ALTIMETER_1K
static const BitMask64_t SOURCE_AUTOSHIFTERLIN
static const BitMask_t MODE_OFFSET_Y
static const BitMask64_t SOURCE_SHIFT_LEFT_RIGHT
static const BitMask_t MODE_NO_FLIP
static const BitMask64_t SOURCE_FLAP
static const BitMask64_t SOURCE_SPEEDO
static const BitMask64_t SOURCE_DIFFLOCK
static const BitMask64_t SOURCE_ALTIMETER_10K
static const BitMask64_t SOURCE_AIRSPEED
BitMask64_t source
static const BitMask_t MODE_AUTO_ANIMATE
static const BitMask64_t SOURCE_ROLL
static const BitMask64_t SOURCE_BOAT_THROTTLE
static const BitMask64_t SOURCE_CLUTCH
static const BitMask_t MODE_OFFSET_Z
static const BitMask64_t SOURCE_PITCH
static const BitMask64_t SOURCE_TACHO
static const BitMask64_t SOURCE_AILERON
static const BitMask_t MODE_ROTATION_Y
static const BitMask64_t SOURCE_ELEVATOR
static const BitMask64_t SOURCE_PERMANENT
void AddMotorSource(BitMask_t source, unsigned int motor)
Ogre::String dash_link_name
static const BitMask_t MODE_EVENT_LOCK
Ogre::String event_name
static const BitMask64_t SOURCE_STEERING_WHEEL
static const BitMask64_t SOURCE_PARKING
static const BitMask64_t SOURCE_SHIFT_BACK_FORTH
static const BitMask64_t SOURCE_ACCEL
static const BitMask64_t SOURCE_AIR_BRAKE
static const BitMask64_t SOURCE_GEAR_NEUTRAL
static const BitMask64_t SOURCE_ANGLE_OF_ATTACK
static const BitMask64_t SOURCE_VERTICAL_VELOCITY
static const BitMask_t MODE_OFFSET_X
static const BitMask_t MODE_BOUNCE
static const BitMask64_t SOURCE_SHIFTERLIN
static const BitMask64_t SOURCE_ALTIMETER_100K
static const BitMask64_t SOURCE_BOAT_RUDDER
std::list< MotorSource > motor_sources
static const BitMask64_t SOURCE_BRAKES
static const BitMask64_t SOURCE_TORQUE
static const BitMask_t MODE_ROTATION_Z
static const BitMask64_t SOURCE_DASHBOARD
static const BitMask64_t SOURCE_EVENT
static const BitMask64_t SOURCE_HEADING
static const BitMask64_t SOURCE_SIGNALSTALK
static const BitMask_t OPTION_ALTIMETER_100K
static const BitMask_t OPTION_ALTIMETER_1K
static const BitMask_t OPTION_SPEEDO
static const BitMask_t OPTION_ACCEL
static const BitMask_t OPTION_AIR_BRAKE
static const BitMask_t OPTION_ANGLE_OF_ATTACK
static const BitMask_t OPTION_BOAT_RUDDER
static const BitMask_t OPTION_ROLL
static const BitMask_t OPTION_SEQUENTIAL_SHIFT
static const BitMask_t OPTION_PARKING
static const BitMask_t OPTION_VISIBLE
static const BitMask_t OPTION_TURBO
static const BitMask_t OPTION_SHIFT_BACK_FORTH
static const BitMask_t OPTION_PITCH
AeroAnimator aero_animator
static const BitMask_t OPTION_AIRSPEED
std::shared_ptr< Inertia > inertia_defaults
static const BitMask_t OPTION_BOAT_THROTTLE
static const BitMask_t OPTION_SHORT_LIMIT
static const BitMask_t OPTION_ALTIMETER_10K
static const BitMask_t OPTION_VERTICAL_VELOCITY
static const BitMask_t OPTION_FLAP
std::shared_ptr< BeamDefaults > beam_defaults
static const BitMask_t OPTION_DIFFLOCK
static const BitMask_t OPTION_BRAKES
static const BitMask_t OPTION_TORQUE
static const BitMask_t OPTION_SHIFT_LEFT_RIGHT
static const BitMask_t OPTION_LONG_LIMIT
static const BitMask_t OPTION_INVISIBLE
static const BitMask_t OPTION_CLUTCH
Node::Ref nodes[2]
static const BitMask_t OPTION_GEAR_SELECT
static const BitMask_t OPTION_TACHO
std::string filename
Ogre::String name
unsigned int forum_account_id
bool _has_forum_account
Ogre::String type
Ogre::String email
DifferentialTypeVec options
Order matters!
Node::Ref wheels[2][2]
Ogre::String material_name
RoR::WheelSide side
Ogre::String mesh_name
RoR::WheelBraking braking
unsigned int num_rays
std::shared_ptr< BeamDefaults > beam_defaults
std::shared_ptr< NodeDefaults > node_defaults
Node::Ref rigidity_node
RoR::WheelPropulsion propulsion
Node::Ref nodes[2]
Node::Ref reference_arm_node
float GetScaledBreakingThreshold()
BeamDefaultsScale scale
float GetScaledDeformThreshold() const
bool _is_plastic_deform_coef_user_defined
Ogre::String beam_material_name
bool _is_user_defined
Informs whether these data were read from "set_beam_defaults" directive or filled in by the parser on...
bool _enable_advanced_deformation
Informs whether "enable_advanced_deformation" directive preceded these defaults.
static const BitMask_t OPTION_r_ROPE
BitMask_t options
bool _has_extension_break_limit
std::shared_ptr< BeamDefaults > defaults
float extension_break_limit
static const BitMask_t OPTION_i_INVISIBLE
Node::Ref nodes[2]
static const BitMask_t OPTION_s_SUPPORT
float default_braking_force
float parking_brake_force
static const BitMask_t OPTION_r_BUOYANT_ONLY_DRAG
static const BitMask_t OPTION_p_10xTOUGHER
static const BitMask_t OPTION_s_BUOYANT_NO_DRAG
static const BitMask_t OPTION_F_10xTOUGHER_BUOYANT
static const BitMask_t OPTION_b_BUOYANT
Node::Ref nodes[3]
static const BitMask_t OPTION_D_CONTACT_BUOYANT
static const BitMask_t OPTION_S_INVULNERABLE_BUOYANT
static const BitMask_t OPTION_c_CONTACT
BitMask_t options
static const BitMask_t OPTION_u_INVULNERABLE
Node::Ref left_node
Node::Ref center_node
Node::Ref back_node
std::vector< Node::Ref > nodes
int mode
0 and higher = cinecam index
Ogre::Vector3 position
std::shared_ptr< BeamDefaults > beam_defaults
Node::Ref nodes[8]
std::shared_ptr< NodeDefaults > node_defaults
std::vector< Node::Ref > nodes
Ogre::String description
std::shared_ptr< Inertia > inertia_defaults
Node::Ref nodes[2]
RoR::CommandkeyID_t extend_key
RoR::CommandkeyID_t contract_key
std::shared_ptr< BeamDefaults > beam_defaults
bool option_o_1press_center
float min_mass_Kg
minimum node mass in Kg
std::string skin_name
< Represents a comment (line starting with ';' or '//') that can be anywhere in the file.
int commented_datapos
Position in the data vector for the given keyword.
std::string comment_text
May contain multiple lines separated by ' ' - MUST contain leading ';' or '//' at each line!
RigDef::Keyword commented_keyword
std::vector< Node::Ref > fixes
std::vector< Wheel2 > wheels2
std::vector< Exhaust > exhausts
std::vector< Ropable > ropables
std::vector< Prop > props
std::vector< CollisionBox > collisionboxes
std::vector< InterAxle > interaxles
std::vector< Rotator2 > rotators2
std::vector< SoundSource2 > soundsources2
std::vector< Rotator > rotators
std::vector< Script > scripts
RoR::CacheEntryPtr origin_addonpart
Addon parts are spawned as fake Modules, resources must be loaded from this group.
std::vector< SkeletonSettings > set_skeleton_settings
std::vector< Ogre::String > submesh_groundmodel
std::vector< Wing > wings
std::vector< CustomDashboardInput > customdashboardinputs
std::vector< GuiSettings > guisettings
std::vector< AntiLockBrakes > antilockbrakes
std::vector< DocComment > _comments
std::vector< Ogre::String > description
std::vector< MeshWheel2 > meshwheels2
std::vector< Turbojet > turbojets
std::vector< Particle > particles
std::vector< VideoCamera > videocameras
std::vector< CollisionRange > set_collision_range
std::vector< Minimass > minimass
std::vector< Shock > shocks
std::vector< WheelDetacher > wheeldetachers
std::vector< CruiseControl > cruisecontrol
std::vector< DefaultSkin > default_skin
std::vector< Shock2 > shocks2
std::vector< Tie > ties
std::vector< Hook > hooks
std::vector< Pistonprop > pistonprops
std::vector< TractionControl > tractioncontrol
std::vector< Engturbo > engturbo
std::vector< Author > author
std::vector< MeshWheel > meshwheels
std::vector< Animator > animators
std::vector< SoundSource > soundsources
std::vector< Cinecam > cinecam
std::vector< ManagedMaterial > managedmaterials
std::vector< SpeedLimiter > speedlimiter
std::vector< Submesh > submeshes
std::vector< FlexBodyWheel > flexbodywheels
std::vector< Assetpack > assetpacks
std::vector< FlaregroupNoImport > flaregroups_no_import
std::vector< TransferCase > transfercase
std::vector< Flexbody > flexbodies
std::vector< Globals > globals
std::vector< Lockgroup > lockgroups
std::vector< Node > nodes
std::vector< Rope > ropes
std::vector< Node::Ref > contacters
std::vector< Wheel > wheels
std::vector< Engoption > engoption
std::vector< Command2 > commands2
std::vector< TorqueCurve > torquecurve
std::vector< Trigger > triggers
std::vector< MaterialFlareBinding > materialflarebindings
std::vector< ExtCamera > extcamera
std::vector< Turboprop2 > turboprops2
std::vector< RailGroup > railgroups
std::vector< Fileinfo > fileinfo
std::vector< Engine > engine
std::vector< Axle > axles
std::vector< Shock3 > shocks3
std::vector< Hydro > hydros
std::vector< Screwprop > screwprops
std::vector< SlideNode > slidenodes
std::vector< CameraRail > camerarail
std::vector< Beam > beams
std::vector< Brakes > brakes
std::vector< Camera > cameras
std::vector< Fusedrag > fusedrag
std::vector< Help > help
std::vector< Flare3 > flares3
std::vector< Flare2 > flares2
std::vector< Airbrake > airbrakes
std::vector< Guid > guid
std::vector< FileFormatVersion > fileformatversion
bool lockgroup_default_nolock
std::shared_ptr< Module > root_module
Required to exist. shared_ptr is used for unified handling with other modules.
Ogre::String name
std::map< Ogre::String, std::shared_ptr< Module > > user_modules
bool slide_nodes_connect_instantly
bool enable_advanced_deformation
std::string hash
std::vector< float > gear_ratios
float global_gear_ratio
float neutral_gear_ratio
float reverse_gear_ratio
float shift_time
Seconds.
float post_shift_time
Seconds.
float clutch_time
Seconds.
Node::Ref direction_node
Node::Ref reference_node
Ogre::String particle_name
RoR::ExtCameraMode mode
Ogre::String unique_id
std::shared_ptr< Inertia > inertia_defaults
RoR::FlareType type
Ogre::String material_name
Node::Ref node_axis_x
Node::Ref reference_node
Ogre::Vector3 offset
int control_number
Only 'u' type flares.
std::string dashboard_link
Only 'd' type flares.
Node::Ref node_axis_y
int control_number
Only 'u' type flares.
Ogre::String tyre_mesh_name
RoR::WheelSide side
Ogre::String rim_mesh_name
std::vector< Node::Range > node_list_to_import
CameraSettings camera_settings
Ogre::String mesh_name
Node::Ref y_axis_node
Ogre::Vector3 rotation
std::list< Animation > animations
Ogre::Vector3 offset
Node::Ref reference_node
Node::Ref x_axis_node
std::vector< Node::Ref > node_list
std::vector< Forvert > forvert
Manually specified (vert => node) bindings for flexbody deformation (overrides 'forset').
Node::Ref node_ref
Node::Ref node_y
Node::Ref node_x
Node::Ref rear_node
Ogre::String airfoil_name
Node::Ref front_node
Ogre::String material_name
std::string guid
std::string material
Node::Ref node
float option_max_force
bool flag_no_disable
bool flag_self_lock
float option_timer
float option_speed_coef
bool flag_auto_lock
float option_hook_range
float option_min_range_meters
static const BitMask_t OPTION_e_INPUT_ELEVATOR
std::shared_ptr< Inertia > inertia_defaults
float lenghtening_factor
static const BitMask_t OPTION_s_DISABLE_ON_HIGH_SPEED
BitMask_t options
static const BitMask_t OPTION_h_INPUT_InvELEVATOR_RUDDER
static const BitMask_t OPTION_g_INPUT_ELEVATOR_RUDDER
static const BitMask_t OPTION_y_INPUT_InvAILERON_RUDDER
Node::Ref nodes[2]
static const BitMask_t OPTION_j_INVISIBLE
static const BitMask_t OPTION_v_INPUT_InvAILERON_ELEVATOR
static const BitMask_t OPTION_a_INPUT_AILERON
static const BitMask_t OPTION_r_INPUT_RUDDER
static const BitMask_t OPTION_n_INPUT_NORMAL
static const BitMask_t OPTION_u_INPUT_AILERON_ELEVATOR
Inertia inertia
static const BitMask_t OPTION_x_INPUT_AILERON_RUDDER
std::shared_ptr< BeamDefaults > beam_defaults
Ogre::String start_function
float start_delay_factor
float stop_delay_factor
Ogre::String stop_function
DifferentialTypeVec options
Order matters!
static const int LOCKGROUP_NOLOCK
std::vector< Node::Ref > nodes
static const int LOCKGROUP_DEFAULT
static const char * TypeToStr(ManagedMaterialType type)
ManagedMaterialType type
ManagedMaterialsOptions options
Ogre::String specular_map
Ogre::String damaged_diffuse_map
float global_min_mass_Kg
minimum node mass in Kg - only effective where DefaultMinimass was not set.
MinimassOption option
unsigned int options
Bit flags.
Node::Ref emitter_node
Node::Ref reference_node
Ogre::String particle_system_name
Node::Ref reference_node
Ogre::String airfoil
Node::Ref couple_node
Node::Ref blade_tip_nodes[4]
Ogre::ColourValue color
Node::Ref reference_node
Node::Ref x_axis_node
DashboardSpecial special_prop_dashboard
CameraSettings camera_settings
Ogre::Vector3 offset
Ogre::String mesh_name
BeaconSpecial special_prop_beacon
Node::Ref y_axis_node
SpecialProp special
std::list< Animation > animations
Ogre::Vector3 rotation
std::vector< Node::Range > node_list
std::shared_ptr< BeamDefaults > beam_defaults
Node::Ref end_node
Node::Ref root_node
Ogre::String description
std::shared_ptr< Inertia > inertia_defaults
unsigned int spin_left_key
Node::Ref base_plate_nodes[4]
Node::Ref axis_nodes[2]
Node::Ref rotating_plate_nodes[4]
unsigned int spin_right_key
std::string filename
BitMask_t options
Node::Ref nodes[2]
static const BitMask_t OPTION_i_INVISIBLE
float short_bound
Maximum contraction limit, in percentage ( 1.00 = 100% )
float progress_factor_damp_out
Progression factor dampout, 0 = disabled, 1...x as multipliers, example:maximum dampingrate == spring...
float damp_out
damping value applied when shock extending
float progress_factor_damp_in
Progression factor for dampin. 0 = disabled, 1...x as multipliers, example:maximum dampingrate == spr...
std::shared_ptr< BeamDefaults > beam_defaults
static const BitMask_t OPTION_m_METRIC
float spring_in
Spring value applied when the shock is compressing.
static const BitMask_t OPTION_s_SOFT_BUMP_BOUNDS
float precompression
Changes compression or extension of the suspension when the truck spawns. This can be used to "level"...
float progress_factor_spring_out
Progression factor springout, 0 = disabled, 1...x as multipliers, example:maximum springrate == sprin...
static const BitMask_t OPTION_M_ABSOLUTE_METRIC
float spring_out
spring value applied when shock extending
float long_bound
Maximum extension limit, in percentage ( 1.00 = 100% )
float damp_in
Damping value applied when the shock is compressing.
float progress_factor_spring_in
Progression factor for springin. A value of 0 disables this option. 1...x as multipliers,...
float damp_in_slow
Damping value applied when shock is commpressing slower than split in velocity.
float spring_in
Spring value applied when the shock is compressing.
float spring_out
Spring value applied when shock extending.
static const BitMask_t OPTION_M_ABSOLUTE_METRIC
float damp_in
Damping value applied when the shock is compressing.
float split_vel_in
Split velocity in (m/s) - threshold for slow / fast damping during compression.
BitMask_t options
float precompression
Changes compression or extension of the suspension when the truck spawns. This can be used to "level"...
Node::Ref nodes[2]
static const BitMask_t OPTION_i_INVISIBLE
static const BitMask_t OPTION_m_METRIC
std::shared_ptr< BeamDefaults > beam_defaults
float damp_out
Damping value applied when shock extending.
float long_bound
Maximum extension limit, in percentage ( 1.00 = 100% )
float short_bound
Maximum contraction limit, in percentage ( 1.00 = 100% )
float damp_out_slow
Damping value applied when shock is commpressing slower than split out velocity.
float damp_out_fast
Damping value applied when shock is commpressing faster than split out velocity.
float damp_in_fast
Damping value applied when shock is commpressing faster than split in velocity.
float split_vel_out
Split velocity in (m/s) - threshold for slow / fast damping during extension.
static const BitMask_t OPTION_L_ACTIVE_LEFT
std::shared_ptr< BeamDefaults > beam_defaults
float damping
The 'resistance to motion' of the shock. The best value is given by this equation: 2 * sqrt(suspended...
float spring_rate
The 'stiffness' of the shock. The higher the value, the less the shock will move for a given bump.
static const BitMask_t OPTION_m_METRIC
float precompression
Changes compression or extension of the suspension when the truck spawns. This can be used to "level"...
Node::Ref nodes[2]
float short_bound
Maximum contraction. The shortest length the shock can be, as a proportion of its original length....
float long_bound
Maximum extension. The longest length a shock can be, as a proportion of its original length....
static const BitMask_t OPTION_i_INVISIBLE
static const BitMask_t OPTION_R_ACTIVE_RIGHT
BitMask_t options
static const BitMask_t CONSTRAINT_ATTACH_ALL
static const BitMask_t CONSTRAINT_ATTACH_NONE
static const BitMask_t CONSTRAINT_ATTACH_FOREIGN
static const BitMask_t CONSTRAINT_ATTACH_SELF
BitMask_t constraint_flags
std::vector< Node::Range > rail_node_ranges
static const int MODE_EXTERIOR
static const int MODE_ALWAYS
int mode
A special constant or cinecam index.
Ogre::String sound_script_name
std::vector< Cab > cab_triangles
std::vector< Texcoord > texcoords
Node::Ref root_node
float auto_shorten_rate
static const BitMask_t OPTION_i_INVISIBLE
static const BitMask_t OPTION_s_DISABLE_SELF_LOCK
std::shared_ptr< BeamDefaults > beam_defaults
BitMask_t options
float max_reach_length
std::vector< Sample > samples
Ogre::String predefined_func_name
std::vector< float > gear_ratios
static const BitMask_t OPTION_B_TRIGGER_BLOCKER
static const BitMask_t OPTION_s_CMD_NUM_SWITCH
static const BitMask_t OPTION_h_UNLOCKS_HOOK_GROUP
static const BitMask_t OPTION_i_INVISIBLE
static const BitMask_t OPTION_t_CONTINUOUS
static const BitMask_t OPTION_E_ENGINE_TRIGGER
static const BitMask_t OPTION_c_COMMAND_STYLE
static const BitMask_t OPTION_b_KEY_BLOCKER
float contraction_trigger_limit
static const BitMask_t OPTION_x_START_DISABLED
std::shared_ptr< BeamDefaults > beam_defaults
BitMask_t options
float expansion_trigger_limit
Node::Ref nodes[2]
static const BitMask_t OPTION_H_LOCKS_HOOK_GROUP
static const BitMask_t OPTION_A_INV_TRIGGER_BLOCKER
int shortbound_trigger_action
Node::Ref front_node
Node::Ref back_node
Node::Ref side_node
Node::Ref blade_tip_nodes[4]
Node::Ref reference_node
Ogre::String airfoil
RoR::VideoCamRole camera_role
Ogre::String material_name
unsigned int texture_width
Ogre::String camera_name
Node::Ref alt_orientation_node
Node::Ref alt_reference_node
unsigned int texture_height
Ogre::Vector3 rotation
Ogre::Vector3 offset
Ogre::String face_material_name
Ogre::String band_material_name
Ogre::String band_material_name
Ogre::String face_material_name
float tex_coords[8]
float min_deflection
float efficacy_coef
WingControlSurface control_surface
Ogre::String airfoil
float max_deflection
Node::Ref nodes[8]