RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
AddonPartFileFormat.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 
24 #include "Application.h"
25 #include "GenericFileFormat.h"
26 #include "RefCountingObject.h"
27 #include "RigDef_File.h" // Document
28 
29 #include <OgreResourceManager.h>
30 
31 #include <memory>
32 #include <string>
33 #include <unordered_set>
34 #include <vector>
35 
36 namespace RoR {
37 
39 {
42  std::string atc_keyword;
43  int atc_element_id = -1;
44 
45  AddonPartConflict(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, std::string keyword, int element_id):
46  atc_addonpart1(addonpart1),
47  atc_addonpart2(addonpart2),
49  atc_element_id(element_id)
50  {}
51 };
52 
53 typedef std::vector<AddonPartConflict> AddonPartConflictVec;
54 
57 {
58 public:
59  AddonPartUtility(bool silent_mode = false);
61 
64  std::shared_ptr<RigDef::Document::Module> TransformToRigDefModule(CacheEntryPtr& addonpart_entry);
65 
68  void ResolveUnwantedAndTweakedElements(TuneupDefPtr& tuneup, CacheEntryPtr& addonpart_entry);
69 
70  static void ResetUnwantedAndTweakedElements(TuneupDefPtr& tuneup);
71 
72  static void RecordAddonpartConflicts(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, AddonPartConflictVec& conflicts);
73 
74  static bool CheckForAddonpartConflict(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, AddonPartConflictVec& conflicts);
75 
76  static bool DoubleCheckForAddonpartConflict(ActorPtr target_actor, CacheEntryPtr addonpart_entry);
77 
78 private:
79  // Helpers of `TransformToRigDefModule()`, they expect `m_context` to be in position:
82  void ProcessProp();
83  void ProcessFlexbody();
84  void ProcessFlare();
85  void ProcessFlare2();
86 
87  // Helpers of `ResolveUnwantedAndTweakedElements()`, they expect `m_context` to be in position:
88  void ProcessTweakWheel();
89  void ProcessTweakNode();
91  void ProcessTweakFlexbody();
92  void ProcessTweakProp();
94  void ProcessUnwantedProp();
96  void ProcessUnwantedFlare();
99 
100  void Log(const std::string& text);
101 
102  // Shared state:
106  // TransformToRigDefModule() state:
107  std::shared_ptr<RigDef::Document::Module> m_module;
109  // ResolveUnwantedAndTweakedElements() state:
111  bool m_silent_mode = false;
112 };
113 
114 }; // namespace RoR
RoR::AddonPartUtility::ResolveUnwantedAndTweakedElements
void ResolveUnwantedAndTweakedElements(TuneupDefPtr &tuneup, CacheEntryPtr &addonpart_entry)
Evaluates 'addonpart_unwanted_*' elements, respecting 'protected_*' directives in the tuneup.
Definition: AddonPartFileFormat.cpp:133
RoR::AddonPartUtility::m_module
std::shared_ptr< RigDef::Document::Module > m_module
Definition: AddonPartFileFormat.h:107
RoR::AddonPartUtility::m_document
GenericDocumentPtr m_document
Definition: AddonPartFileFormat.h:103
RoR::AddonPartUtility::ProcessUnwantedFlare
void ProcessUnwantedFlare()
Definition: AddonPartFileFormat.cpp:497
RoR::AddonPartUtility::ProcessUnwantedExhaust
void ProcessUnwantedExhaust()
Definition: AddonPartFileFormat.cpp:521
RoR::AddonPartConflict::AddonPartConflict
AddonPartConflict(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, std::string keyword, int element_id)
Definition: AddonPartFileFormat.h:45
RoR::AddonPartConflict::atc_keyword
std::string atc_keyword
Definition: AddonPartFileFormat.h:42
RoR::AddonPartUtility::m_context
GenericDocContextPtr m_context
Definition: AddonPartFileFormat.h:104
RoR::AddonPartUtility::ProcessUnwantedManagedMat
void ProcessUnwantedManagedMat()
Definition: AddonPartFileFormat.cpp:545
RoR::AddonPartUtility::TransformToRigDefModule
std::shared_ptr< RigDef::Document::Module > TransformToRigDefModule(CacheEntryPtr &addonpart_entry)
transforms the addonpart to RigDef::File::Module (fake 'section/end_section') used for spawning.
Definition: AddonPartFileFormat.cpp:50
RoR::AddonPartUtility::m_silent_mode
bool m_silent_mode
To block logging during conflict resolution (which works by generating dummy tuneups - would confuse ...
Definition: AddonPartFileFormat.h:111
RoR::AddonPartUtility::ProcessTweakProp
void ProcessTweakProp()
Definition: AddonPartFileFormat.cpp:762
RoR::AddonPartConflictVec
std::vector< AddonPartConflict > AddonPartConflictVec
Definition: AddonPartFileFormat.h:53
RefCountingObjectPtr< CacheEntry >
RoR::AddonPartUtility::ProcessTweakNode
void ProcessTweakNode()
Definition: AddonPartFileFormat.cpp:618
RoR::AddonPartUtility::ProcessManagedMaterial
void ProcessManagedMaterial()
Definition: AddonPartFileFormat.cpp:214
RoR::AddonPartConflict::atc_addonpart2
CacheEntryPtr atc_addonpart2
Definition: AddonPartFileFormat.h:41
RoR::AddonPartUtility::m_tuneup
TuneupDefPtr m_tuneup
Definition: AddonPartFileFormat.h:110
RoR::AddonPartUtility::ProcessDirectiveSetManagedMaterialsOptions
void ProcessDirectiveSetManagedMaterialsOptions()
Definition: AddonPartFileFormat.cpp:243
RoR::AddonPartUtility::ProcessUnwantedProp
void ProcessUnwantedProp()
Definition: AddonPartFileFormat.cpp:449
RoR::AddonPartUtility::ResetUnwantedAndTweakedElements
static void ResetUnwantedAndTweakedElements(TuneupDefPtr &tuneup)
Definition: AddonPartFileFormat.cpp:193
RoR::AddonPartUtility::RecordAddonpartConflicts
static void RecordAddonpartConflicts(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, AddonPartConflictVec &conflicts)
Definition: AddonPartFileFormat.cpp:861
keyword
static int keyword
Definition: Bench_TruckParser_IdentifyKeyword.cpp:1448
RoR::AddonPartUtility::ProcessTweakCineCamera
void ProcessTweakCineCamera()
Definition: AddonPartFileFormat.cpp:663
RoR::AddonPartUtility::ProcessTweakWheel
void ProcessTweakWheel()
Definition: AddonPartFileFormat.cpp:570
RoR::AddonPartUtility::m_addonpart_entry
CacheEntryPtr m_addonpart_entry
Definition: AddonPartFileFormat.h:105
RefCountingObject.h
Application.h
Central state/object manager and communications hub.
RoR::AddonPartConflict
< Conflict between two addonparts tweaking the same element
Definition: AddonPartFileFormat.h:38
RoR::AddonPartUtility::DoubleCheckForAddonpartConflict
static bool DoubleCheckForAddonpartConflict(ActorPtr target_actor, CacheEntryPtr addonpart_entry)
Definition: AddonPartFileFormat.cpp:959
RoR::AddonPartUtility::Log
void Log(const std::string &text)
Definition: AddonPartFileFormat.cpp:951
RoR::AddonPartUtility::ProcessTweakFlexbody
void ProcessTweakFlexbody()
Definition: AddonPartFileFormat.cpp:708
RoR::AddonPartUtility::CheckForAddonpartConflict
static bool CheckForAddonpartConflict(CacheEntryPtr addonpart1, CacheEntryPtr addonpart2, AddonPartConflictVec &conflicts)
Definition: AddonPartFileFormat.cpp:933
RoR::AddonPartUtility::m_managedmaterials_options
RigDef::ManagedMaterialsOptions m_managedmaterials_options
Definition: AddonPartFileFormat.h:108
RoR::AddonPartUtility::ProcessFlare2
void ProcessFlare2()
Definition: AddonPartFileFormat.cpp:408
RoR::AddonPartUtility::ProcessUnwantedFlexbody
void ProcessUnwantedFlexbody()
Definition: AddonPartFileFormat.cpp:473
RoR::AddonPartUtility::ProcessProp
void ProcessProp()
Definition: AddonPartFileFormat.cpp:252
RoR::AddonPartUtility::AddonPartUtility
AddonPartUtility(bool silent_mode=false)
Definition: AddonPartFileFormat.cpp:39
RoR::AddonPartUtility
NOTE: Modcache processes this format directly using RoR::GenericDocument, see RoR::CacheSystem::FillA...
Definition: AddonPartFileFormat.h:56
RoR::AddonPartConflict::atc_addonpart1
CacheEntryPtr atc_addonpart1
Definition: AddonPartFileFormat.h:40
RoR::AddonPartUtility::~AddonPartUtility
~AddonPartUtility()
Definition: AddonPartFileFormat.cpp:45
GenericFileFormat.h
Generic text file parser.
RigDef_File.h
Data structures representing 'truck' file format, see https://docs.rigsofrods.org/vehicle-creation/fi...
RoR
Definition: AppContext.h:36
RigDef::ManagedMaterialsOptions
Definition: RigDef_File.h:895
RoR::AddonPartUtility::ProcessFlexbody
void ProcessFlexbody()
Definition: AddonPartFileFormat.cpp:318
RoR::AddonPartUtility::ProcessFlare
void ProcessFlare()
Definition: AddonPartFileFormat.cpp:370
RoR::AddonPartConflict::atc_element_id
int atc_element_id
Definition: AddonPartFileFormat.h:43
RoR::AddonPartUtility::ProcessTweakManagedMat
void ProcessTweakManagedMat()
Definition: AddonPartFileFormat.cpp:819