RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
RigDef_Serializer.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-2020 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 
25 
26 #pragma once
27 
28 #include "RigDef_File.h"
29 
30 namespace RigDef
31 {
32 
38 {
39 public:
41  void Serialize();
42  std::string GetOutput() const { return m_stream.str(); }
43 
44 private:
45  void SerializeModule(std::shared_ptr<RigDef::Document::Module> m);
46 
47  void ProcessAuthors(Document::Module* module);
48  void ProcessGlobals(Document::Module* module);
50  void ProcessGuid(Document::Module* module);
51  void ProcessFileinfo(Document::Module* module);
52  void WriteFlags();
53  void ProcessHelp(Document::Module* module);
54 
55  // Audio video
57 
58  // Structure
60  void ProcessNode(Node & node);
61  void ProcessNodeDefaults(NodeDefaults* node_defaults);
62  void ProcessDefaultMinimass(DefaultMinimass* default_minimass);
63 
65  void ProcessBeamDefaults(BeamDefaults* beam_defaults);
66  void ProcessBeam(Beam & beam);
67 
71  void ProcessShock(Shock & def);
72  void ProcessShock2(Shock2 & def);
73  void ProcessShock3(Shock3 & def);
74 
76  void ProcessHydro(Hydro & def);
77  void ProcessRotators(Document::Module* module);
78  void ProcessRotators2(Document::Module* module);
79 
81  void ProcessCommand2(Command2 & def);
82  void ProcessSlideNodes(Document::Module* module);
83  void ProcessRopes(Document::Module* module);
84  void ProcessFixes(Document::Module* module);
85  void ProcessTies(Document::Module* module);
86 
87  void ProcessCameras(Document::Module* module);
88 
89  // Land vehicle
90  void ProcessEngine(Document::Module* module);
91  void ProcessEngoption(Document::Module* module);
92  void ProcessBrakes(Document::Module* module);
98  void ProcessAxles(Document::Module* module);
100  void ProcessInterAxles(Document::Module* module);
101 
102  // Wheels
103  void ProcessMeshWheels(Document::Module* module);
104  void ProcessMeshWheels2(Document::Module* module);
105  void ProcessWheels(Document::Module* module);
106  void ProcessWheels2(Document::Module* module);
108 
109  // Features
110  void ProcessAnimators(Document::Module* module);
111  void ProcessContacters(Document::Module* module);
112  void ProcessTriggers(Document::Module* module);
113  void ProcessLockgroups(Document::Module* module);
114  void ProcessHooks(Document::Module* module);
115  void ProcessRailGroups(Document::Module* module);
116  void ProcessRopables(Document::Module* module);
117  void ProcessParticles(Document::Module* module);
120  void ProcessFlares2(Document::Module* module);
123  void ProcessFlexbodies(Document::Module* module);
125  /* TODO:
126  5.5.17 Camerarail
127  5.5.8 Flexbodies
128  5.5.8.3 (sub-directive) disable_flexbody_shadow
129  5.5.8.4 (sub-directive) flexbody_camera_mode
130  */
131 
132  void ProcessSubmesh(Document::Module* module);
133  void ProcessSubmeshGroundmodel(Document::Module* module); // STUB!!!
134  void ProcessExhausts(Document::Module* module);
135  void ProcessGuiSettings(Document::Module* module);
137  void ProcessVideocamera(Document::Module* module);
138  void ProcessExtCamera(Document::Module* module);
141 
142  // Aerial
143  void ProcessWings(Document::Module* module);
144  void ProcessAirbrakes(Document::Module* module);
145  void ProcessTurboprops(Document::Module* module);
146  void ProcessFusedrag(Document::Module* module); // STUB!!!
147  void ProcessTurbojets(Document::Module* module);
148  void ProcessPistonprops(Document::Module* module);
149 
150  // Marine
151  void ProcessScrewprops(Document::Module* module);
152 
153 protected:
154 
155  std::string RigidityNodeToStr(Node::Ref node) { return (node.IsValidAnyState()) ? node.Str() : "9999"; }
156  std::string NodeOptionsToStr(BitMask_t options);
157 
159  void ExportDocComment(Document::Module* module, RigDef::Keyword keyword, ptrdiff_t vectorpos);
160 
161  // Presets, i.e. `set_[node/beam]_defaults`, `set_default_minimass`
162  void ResetPresets();
163  void UpdatePresets(BeamDefaults* beam, NodeDefaults* node, DefaultMinimass* minimass);
164 
165  std::stringstream m_stream;
167  // Settings
173  std::string m_dataline_indentstr = "";
174  std::string m_setdefaults_indentstr = "";
175  // State
179 };
180 
181 } // namespace RigDef
RigDef::Serializer::ProcessDefaultMinimass
void ProcessDefaultMinimass(DefaultMinimass *default_minimass)
Definition: RigDef_Serializer.cpp:2498
RigDef::Serializer::ProcessWings
void ProcessWings(Document::Module *module)
Definition: RigDef_Serializer.cpp:337
RigDef::Serializer::ProcessBrakes
void ProcessBrakes(Document::Module *module)
Definition: RigDef_Serializer.cpp:1629
RigDef::Serializer::ProcessFileinfo
void ProcessFileinfo(Document::Module *module)
Definition: RigDef_Serializer.cpp:2557
RigDef::Serializer::ProcessBeamDefaults
void ProcessBeamDefaults(BeamDefaults *beam_defaults)
Definition: RigDef_Serializer.cpp:2327
RigDef::Serializer::ProcessMeshWheels2
void ProcessMeshWheels2(Document::Module *module)
Definition: RigDef_Serializer.cpp:1875
RigDef::Serializer::ProcessFlexBodyWheels
void ProcessFlexBodyWheels(Document::Module *module)
Definition: RigDef_Serializer.cpp:1568
RigDef::Serializer::ProcessNodes
void ProcessNodes(Document::Module *)
Definition: RigDef_Serializer.cpp:2383
RigDef::Serializer::m_current_node_defaults
NodeDefaults * m_current_node_defaults
Definition: RigDef_Serializer.h:177
RigDef::Node::Ref
Legacy parser resolved references on-the-fly and the condition to check named nodes was "are there an...
Definition: RigDef_Node.h:77
RigDef::Serializer::ProcessRotators2
void ProcessRotators2(Document::Module *module)
Definition: RigDef_Serializer.cpp:1505
RigDef::Serializer::ProcessVideocamera
void ProcessVideocamera(Document::Module *module)
Definition: RigDef_Serializer.cpp:445
RigDef::Serializer::m_inertia_function_width
int m_inertia_function_width
Definition: RigDef_Serializer.h:172
RigDef::Serializer::ProcessTurboprops
void ProcessTurboprops(Document::Module *module)
Definition: RigDef_Serializer.cpp:276
RigDef::Serializer::ProcessGuiSettings
void ProcessGuiSettings(Document::Module *module)
Definition: RigDef_Serializer.cpp:499
RigDef::Serializer::ProcessShocks3
void ProcessShocks3(Document::Module *)
Definition: RigDef_Serializer.cpp:2024
RigDef::Serializer::ProcessTurbojets
void ProcessTurbojets(Document::Module *module)
Definition: RigDef_Serializer.cpp:202
RigDef::Node::Ref::Str
const std::string & Str() const
Definition: RigDef_Node.h:94
RigDef::Animation
Definition: RigDef_File.h:341
RigDef::Serializer::ProcessCommands2
void ProcessCommands2(Document::Module *)
Definition: RigDef_Serializer.cpp:2079
RigDef::Serializer::ProcessCollisionBoxes
void ProcessCollisionBoxes(Document::Module *module)
Definition: RigDef_Serializer.cpp:886
RigDef::Hydro
Definition: RigDef_File.h:851
RigDef::Serializer::m_current_default_minimass
DefaultMinimass * m_current_default_minimass
Definition: RigDef_Serializer.h:178
RigDef::Serializer::ProcessRopables
void ProcessRopables(Document::Module *module)
Definition: RigDef_Serializer.cpp:1071
RigDef::Serializer::ProcessHydro
void ProcessHydro(Hydro &def)
Definition: RigDef_Serializer.cpp:2149
RigDef::Serializer::ExportBaseMeshWheel
void ExportBaseMeshWheel(BaseMeshWheel &def)
Definition: RigDef_Serializer.cpp:1834
RigDef::BeamDefaults
Definition: RigDef_File.h:520
RigDef::Document::Module
Definition: RigDef_File.h:1358
RigDef::Serializer::NodeOptionsToStr
std::string NodeOptionsToStr(BitMask_t options)
Definition: RigDef_Serializer.cpp:2476
RigDef::Serializer::ProcessShock2
void ProcessShock2(Shock2 &def)
Definition: RigDef_Serializer.cpp:2231
RigDef::Serializer::GetOutput
std::string GetOutput() const
Definition: RigDef_Serializer.h:42
RigDef::Serializer::ProcessAuthors
void ProcessAuthors(Document::Module *module)
Definition: RigDef_Serializer.cpp:2594
RigDef::Serializer::ProcessShock
void ProcessShock(Shock &def)
Definition: RigDef_Serializer.cpp:2191
RigDef::Node::Ref::IsValidAnyState
bool IsValidAnyState() const
Definition: RigDef_Node.h:101
RigDef::Serializer::ProcessEngine
void ProcessEngine(Document::Module *module)
Definition: RigDef_Serializer.cpp:1660
RigDef::NodeDefaults
Definition: RigDef_File.h:930
RigDef::Serializer::ProcessManagedMaterialsAndOptions
void ProcessManagedMaterialsAndOptions(Document::Module *module)
Definition: RigDef_Serializer.cpp:831
RigDef::Serializer::ProcessFusedrag
void ProcessFusedrag(Document::Module *module)
Definition: RigDef_Serializer.cpp:253
RigDef::Command2
Definition: RigDef_File.h:625
RigDef::Serializer::ProcessSlideNodes
void ProcessSlideNodes(Document::Module *module)
Definition: RigDef_Serializer.cpp:1199
RigDef::Serializer::RigidityNodeToStr
std::string RigidityNodeToStr(Node::Ref node)
Definition: RigDef_Serializer.h:155
RigDef::Serializer::ProcessTriggers
void ProcessTriggers(Document::Module *module)
Definition: RigDef_Serializer.cpp:1315
RigDef::Serializer::WriteFlags
void WriteFlags()
Definition: RigDef_Serializer.cpp:2517
RigDef::Serializer::Serializer
Serializer(RigDef::DocumentPtr rig_def)
Definition: RigDef_Serializer.cpp:41
RigDef::Serializer::ProcessEngoption
void ProcessEngoption(Document::Module *module)
Definition: RigDef_Serializer.cpp:1694
RigDef::Serializer::ProcessRopes
void ProcessRopes(Document::Module *module)
Definition: RigDef_Serializer.cpp:1136
RigDef::Serializer::m_stream
std::stringstream m_stream
Definition: RigDef_Serializer.h:165
RigDef::Serializer::m_float_width
int m_float_width
Definition: RigDef_Serializer.h:168
RigDef::Serializer::ProcessCinecam
void ProcessCinecam(Document::Module *)
Definition: RigDef_Serializer.cpp:1909
RigDef::Serializer::ProcessNodeDefaults
void ProcessNodeDefaults(NodeDefaults *node_defaults)
Definition: RigDef_Serializer.cpp:2457
RigDef::Shock2
Definition: RigDef_File.h:1079
RigDef::Serializer::ProcessPropsAndAnimations
void ProcessPropsAndAnimations(Document::Module *module)
Definition: RigDef_Serializer.cpp:725
RigDef::Serializer::ProcessContacters
void ProcessContacters(Document::Module *module)
Definition: RigDef_Serializer.cpp:1440
RigDef::Serializer::ProcessTorqueCurve
void ProcessTorqueCurve(Document::Module *module)
Definition: RigDef_Serializer.cpp:1025
RigDef::DefaultMinimass
Definition: RigDef_File.h:657
keyword
static int keyword
Definition: Bench_TruckParser_IdentifyKeyword.cpp:1448
RigDef::Serializer::Serialize
void Serialize()
Definition: RigDef_Serializer.cpp:50
RigDef::Serializer::ProcessAnimators
void ProcessAnimators(Document::Module *module)
Definition: RigDef_Serializer.cpp:1376
RigDef
Definition: Application.cpp:702
RigDef::Serializer::ProcessExtCamera
void ProcessExtCamera(Document::Module *module)
Definition: RigDef_Serializer.cpp:420
RigDef::Serializer::ProcessWheels2
void ProcessWheels2(Document::Module *module)
Definition: RigDef_Serializer.cpp:1741
RigDef::Serializer::ProcessFlares2
void ProcessFlares2(Document::Module *module)
Definition: RigDef_Serializer.cpp:801
RigDef::Serializer::ProcessPistonprops
void ProcessPistonprops(Document::Module *module)
Definition: RigDef_Serializer.cpp:173
RigDef::Serializer::ProcessCameras
void ProcessCameras(Document::Module *module)
Definition: RigDef_Serializer.cpp:1891
RigDef::Serializer::ResetPresets
void ResetPresets()
Definition: RigDef_Serializer.cpp:2630
RigDef::Serializer::ProcessGuid
void ProcessGuid(Document::Module *module)
Definition: RigDef_Serializer.cpp:2572
RigDef::Serializer::m_command_key_width
int m_command_key_width
Definition: RigDef_Serializer.h:171
RigDef::Serializer::ProcessAntiLockBrakes
void ProcessAntiLockBrakes(Document::Module *module)
Definition: RigDef_Serializer.cpp:1642
RigDef::Serializer::ProcessMeshWheels
void ProcessMeshWheels(Document::Module *module)
Definition: RigDef_Serializer.cpp:1858
RigDef::Serializer::ProcessBeams
void ProcessBeams(Document::Module *)
Definition: RigDef_Serializer.cpp:1943
RigDef::Serializer::ProcessLockgroups
void ProcessLockgroups(Document::Module *module)
Definition: RigDef_Serializer.cpp:1290
RigDef::Serializer::ProcessSoundsources2
void ProcessSoundsources2(Document::Module *module)
Definition: RigDef_Serializer.cpp:398
RigDef::Shock
Definition: RigDef_File.h:1061
RigDef::BaseMeshWheel
Definition: RigDef_File.h:279
RigDef::Serializer::ProcessScrewprops
void ProcessScrewprops(Document::Module *module)
Definition: RigDef_Serializer.cpp:230
RigDef::Serializer::ProcessRotators
void ProcessRotators(Document::Module *module)
Definition: RigDef_Serializer.cpp:1456
RigDef::Serializer::ProcessSoundsources
void ProcessSoundsources(Document::Module *module)
Definition: RigDef_Serializer.cpp:378
RigDef::Serializer::ProcessHooks
void ProcessHooks(Document::Module *module)
Definition: RigDef_Serializer.cpp:1252
RigDef::Serializer::ExportDocComment
void ExportDocComment(Document::Module *module, RigDef::Keyword keyword, ptrdiff_t vectorpos)
Definition: RigDef_Serializer.cpp:2658
RigDef::Serializer::ProcessWheels
void ProcessWheels(Document::Module *module)
Definition: RigDef_Serializer.cpp:1781
RigDef::Serializer
Serializes the RigDef::File data structure to string.
Definition: RigDef_Serializer.h:37
RigDef::Serializer::UpdatePresets
void UpdatePresets(BeamDefaults *beam, NodeDefaults *node, DefaultMinimass *minimass)
Definition: RigDef_Serializer.cpp:2637
RigDef::Serializer::ProcessCommand2
void ProcessCommand2(Command2 &def)
Definition: RigDef_Serializer.cpp:2107
RigDef::Serializer::ProcessSubmeshGroundmodel
void ProcessSubmeshGroundmodel(Document::Module *module)
Definition: RigDef_Serializer.cpp:536
RigDef::Serializer::m_rig_def
RigDef::DocumentPtr m_rig_def
Definition: RigDef_Serializer.h:166
RigDef::Serializer::ProcessFlexbodies
void ProcessFlexbodies(Document::Module *module)
Definition: RigDef_Serializer.cpp:671
RigDef::Serializer::ProcessAirbrakes
void ProcessAirbrakes(Document::Module *module)
Definition: RigDef_Serializer.cpp:303
RigDef::Serializer::ProcessShocks2
void ProcessShocks2(Document::Module *)
Definition: RigDef_Serializer.cpp:1997
RigDef::Serializer::ProcessTies
void ProcessTies(Document::Module *module)
Definition: RigDef_Serializer.cpp:1093
RigDef::Serializer::ProcessExhausts
void ProcessExhausts(Document::Module *module)
Definition: RigDef_Serializer.cpp:514
RigDef::Serializer::ProcessAxles
void ProcessAxles(Document::Module *module)
Definition: RigDef_Serializer.cpp:914
RigDef::Serializer::SerializeModule
void SerializeModule(std::shared_ptr< RigDef::Document::Module > m)
Definition: RigDef_Serializer.cpp:86
RigDef::Serializer::ProcessSetSkeletonSettings
void ProcessSetSkeletonSettings(Document::Module *module)
Definition: RigDef_Serializer.cpp:488
RigDef::Serializer::m_dataline_indentstr
std::string m_dataline_indentstr
a node or a beam line for example
Definition: RigDef_Serializer.h:173
RigDef::Serializer::ProcessHelp
void ProcessHelp(Document::Module *module)
Definition: RigDef_Serializer.cpp:1732
RigDef::Serializer::m_setdefaults_indentstr
std::string m_setdefaults_indentstr
'set_beam_defaults' for example
Definition: RigDef_Serializer.h:174
RigDef::Serializer::ProcessBeam
void ProcessBeam(Beam &beam)
Definition: RigDef_Serializer.cpp:2348
RigDef::Serializer::ProcessDirectiveAddAnimation
void ProcessDirectiveAddAnimation(RigDef::Animation &anim)
Definition: RigDef_Serializer.cpp:606
RigDef::Serializer::m_current_beam_defaults
BeamDefaults * m_current_beam_defaults
Definition: RigDef_Serializer.h:176
RigDef::Serializer::ProcessSpeedLimiter
void ProcessSpeedLimiter(Document::Module *module)
Definition: RigDef_Serializer.cpp:1014
RigDef::Serializer::ProcessSubmesh
void ProcessSubmesh(Document::Module *module)
Definition: RigDef_Serializer.cpp:546
RigDef::Serializer::ProcessTransferCase
void ProcessTransferCase(Document::Module *module)
Definition: RigDef_Serializer.cpp:978
RigDef::Serializer::m_node_id_width
int m_node_id_width
Definition: RigDef_Serializer.h:170
RigDef::Shock3
Definition: RigDef_File.h:1105
BitMask_t
uint32_t BitMask_t
Definition: BitFlags.h:7
RigDef::Serializer::ProcessHydros
void ProcessHydros(Document::Module *)
Definition: RigDef_Serializer.cpp:2052
RigDef::Serializer::ProcessShock3
void ProcessShock3(Shock3 &def)
Definition: RigDef_Serializer.cpp:2280
RigDef::Node
Definition: RigDef_Node.h:39
RigDef::DocumentPtr
std::shared_ptr< Document > DocumentPtr
Definition: ForwardDeclarations.h:281
RigDef::Serializer::ProcessTractionControl
void ProcessTractionControl(Document::Module *module)
Definition: RigDef_Serializer.cpp:1609
RigDef::Serializer::m_bool_width
int m_bool_width
Definition: RigDef_Serializer.h:169
RigDef::Serializer::ProcessParticles
void ProcessParticles(Document::Module *module)
Definition: RigDef_Serializer.cpp:1048
RigDef::Serializer::ProcessMaterialFlareBindings
void ProcessMaterialFlareBindings(Document::Module *module)
Definition: RigDef_Serializer.cpp:784
RigDef::Serializer::ProcessRailGroups
void ProcessRailGroups(Document::Module *module)
Definition: RigDef_Serializer.cpp:1170
RigDef::Serializer::ProcessDescription
void ProcessDescription(Document::Module *module)
Definition: RigDef_Serializer.cpp:2580
RigDef::Serializer::ProcessCruiseControl
void ProcessCruiseControl(Document::Module *module)
Definition: RigDef_Serializer.cpp:998
RigDef::Beam
Definition: RigDef_File.h:491
RigDef::Serializer::ProcessFixes
void ProcessFixes(Document::Module *module)
Definition: RigDef_Serializer.cpp:1121
RigDef::Serializer::ProcessNode
void ProcessNode(Node &node)
Definition: RigDef_Serializer.cpp:2505
RigDef::Serializer::ProcessInterAxles
void ProcessInterAxles(Document::Module *module)
Definition: RigDef_Serializer.cpp:946
RigDef_File.h
Data structures representing 'truck' file format, see https://docs.rigsofrods.org/vehicle-creation/fi...
RigDef::Serializer::ProcessGlobals
void ProcessGlobals(Document::Module *module)
Definition: RigDef_Serializer.cpp:2613
RigDef::Keyword
Keyword
Definition: Application.h:171
RigDef::Serializer::ProcessShocks
void ProcessShocks(Document::Module *)
Definition: RigDef_Serializer.cpp:1970