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_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
30namespace RigDef
31{
32
38{
39public:
41 void Serialize();
42 std::string GetOutput() const { return m_stream.str(); }
43
44private:
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);
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);
79
81 void ProcessCommand2(Command2 & def);
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);
92 void ProcessBrakes(Document::Module* module);
98 void ProcessAxles(Document::Module* module);
101
102 // Wheels
105 void ProcessWheels(Document::Module* module);
106 void ProcessWheels2(Document::Module* module);
108
109 // Features
112 void ProcessTriggers(Document::Module* module);
114 void ProcessHooks(Document::Module* module);
116 void ProcessRopables(Document::Module* module);
120 void ProcessFlares2(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);
142
143 // Aerial
144 void ProcessWings(Document::Module* module);
147 void ProcessFusedrag(Document::Module* module); // STUB!!!
150
151 // Marine
153
154protected:
155
156 std::string RigidityNodeToStr(Node::Ref node) { return (node.IsValidAnyState()) ? node.Str() : "9999"; }
157 std::string NodeOptionsToStr(BitMask_t options);
158
160 void ExportDocComment(Document::Module* module, RigDef::Keyword keyword, ptrdiff_t vectorpos);
161
162 // Presets, i.e. `set_[node/beam]_defaults`, `set_default_minimass`
163 void ResetPresets();
164 void UpdatePresets(BeamDefaults* beam, NodeDefaults* node, DefaultMinimass* minimass);
165
166 std::stringstream m_stream;
168 // Settings
174 std::string m_dataline_indentstr = "";
175 std::string m_setdefaults_indentstr = "";
176 // State
180};
181
182} // namespace RigDef
uint32_t BitMask_t
Definition BitFlags.h:7
Data structures representing 'truck' file format, see https://docs.rigsofrods.org/vehicle-creation/fi...
Legacy parser resolved references on-the-fly and the condition to check named nodes was "are there an...
Definition RigDef_Node.h:78
bool IsValidAnyState() const
std::string const & Str() const
Definition RigDef_Node.h:94
Serializes the RigDef::File data structure to string.
void ProcessRopables(Document::Module *module)
void ProcessAntiLockBrakes(Document::Module *module)
void ProcessBrakes(Document::Module *module)
void ProcessTurboprops(Document::Module *module)
void ProcessScrewprops(Document::Module *module)
void ProcessShock2(Shock2 &def)
void ProcessAuthors(Document::Module *module)
std::string m_setdefaults_indentstr
'set_beam_defaults' for example
void ProcessExhausts(Document::Module *module)
void ProcessDefaultMinimass(DefaultMinimass *default_minimass)
void ProcessHelp(Document::Module *module)
void ProcessDirectiveAddAnimation(RigDef::Animation &anim)
NodeDefaults * m_current_node_defaults
void ProcessCollisionBoxes(Document::Module *module)
void ExportBaseMeshWheel(BaseMeshWheel &def)
void ProcessAirbrakes(Document::Module *module)
void ProcessInterAxles(Document::Module *module)
void ProcessFusedrag(Document::Module *module)
void ProcessSubmeshGroundmodel(Document::Module *module)
void ProcessSoundsources2(Document::Module *module)
void ProcessRopes(Document::Module *module)
void ProcessShocks(Document::Module *)
void ProcessNode(Node &node)
void ProcessNodeDefaults(NodeDefaults *node_defaults)
void ProcessCameras(Document::Module *module)
void ProcessMeshWheels2(Document::Module *module)
void ProcessBeam(Beam &beam)
void ProcessWings(Document::Module *module)
void ProcessParticles(Document::Module *module)
void ProcessGlobals(Document::Module *module)
std::string RigidityNodeToStr(Node::Ref node)
void ProcessCinecam(Document::Module *)
DefaultMinimass * m_current_default_minimass
void ProcessWheels2(Document::Module *module)
void ProcessRailGroups(Document::Module *module)
void ProcessSubmesh(Document::Module *module)
void ProcessHooks(Document::Module *module)
void ProcessWheels(Document::Module *module)
void ProcessCommand2(Command2 &def)
void ProcessEngoption(Document::Module *module)
void ProcessPistonprops(Document::Module *module)
void ProcessFileinfo(Document::Module *module)
void ProcessHydro(Hydro &def)
void ProcessShock3(Shock3 &def)
void ProcessFlexbodies(Document::Module *module)
void ProcessContacters(Document::Module *module)
void ProcessTriggers(Document::Module *module)
void ProcessBeamDefaults(BeamDefaults *beam_defaults)
void ProcessGuid(Document::Module *module)
void ProcessDescription(Document::Module *module)
void ProcessCommands2(Document::Module *)
std::stringstream m_stream
void ProcessAnimators(Document::Module *module)
void UpdatePresets(BeamDefaults *beam, NodeDefaults *node, DefaultMinimass *minimass)
void ProcessCustomDashboardInputs(Document::Module *module)
void ProcessTies(Document::Module *module)
void ProcessShocks3(Document::Module *)
void ProcessFlexBodyWheels(Document::Module *module)
void ProcessShock(Shock &def)
std::string GetOutput() const
std::string NodeOptionsToStr(BitMask_t options)
void ProcessTractionControl(Document::Module *module)
void ProcessMaterialFlareBindings(Document::Module *module)
void ProcessGuiSettings(Document::Module *module)
void ProcessNodes(Document::Module *)
void ProcessMeshWheels(Document::Module *module)
void ProcessFixes(Document::Module *module)
void ProcessPropsAndAnimations(Document::Module *module)
void SerializeModule(std::shared_ptr< RigDef::Document::Module > m)
void ProcessHydros(Document::Module *)
void ExportDocComment(Document::Module *module, RigDef::Keyword keyword, ptrdiff_t vectorpos)
void ProcessSetSkeletonSettings(Document::Module *module)
void ProcessTurbojets(Document::Module *module)
void ProcessLockgroups(Document::Module *module)
void ProcessFlares2(Document::Module *module)
void ProcessShocks2(Document::Module *)
void ProcessSoundsources(Document::Module *module)
void ProcessRotators(Document::Module *module)
void ProcessBeams(Document::Module *)
RigDef::DocumentPtr m_rig_def
BeamDefaults * m_current_beam_defaults
void ProcessManagedMaterialsAndOptions(Document::Module *module)
std::string m_dataline_indentstr
a node or a beam line for example
void ProcessSpeedLimiter(Document::Module *module)
void ProcessTorqueCurve(Document::Module *module)
void ProcessVideocamera(Document::Module *module)
void ProcessCruiseControl(Document::Module *module)
void ProcessRotators2(Document::Module *module)
void ProcessAxles(Document::Module *module)
void ProcessSlideNodes(Document::Module *module)
void ProcessExtCamera(Document::Module *module)
void ProcessEngine(Document::Module *module)
void ProcessTransferCase(Document::Module *module)
std::shared_ptr< Document > DocumentPtr