!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / Script / ScriptFile.h
blob78c80cb8c9e31f076e8901b1ac058d239c905b40
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include <CrySchematyc2/Env/IEnvRegistry.h>
6 #include <CrySchematyc2/Script/IScriptFile.h>
8 #include "Script/ScriptUserDocumentation.h"
9 #include "Script/ScriptVariableDeclaration.h"
10 #include "Script/Elements/ScriptAbstractInterface.h"
11 #include "Script/Elements/ScriptAbstractInterfaceFunction.h"
12 #include "Script/Elements/ScriptAbstractInterfaceImplementation.h"
13 #include "Script/Elements/ScriptAbstractInterfaceTask.h"
14 #include "Script/Elements/ScriptActionInstance.h"
15 #include "Script/Elements/ScriptClass.h"
16 #include "Script/Elements/ScriptClassBase.h"
17 #include "Script/Elements/ScriptComponentInstance.h"
18 #include "Script/Elements/ScriptContainer.h"
19 #include "Script/Elements/ScriptEnumeration.h"
20 #include "Script/Elements/ScriptGroup.h"
21 #include "Script/Elements/ScriptInclude.h"
22 #include "Script/Elements/ScriptProperty.h"
23 #include "Script/Elements/ScriptSignal.h"
24 #include "Script/Elements/ScriptState.h"
25 #include "Script/Elements/ScriptStateMachine.h"
26 #include "Script/Elements/ScriptStructure.h"
27 #include "Script/Elements/ScriptTimer.h"
28 #include "Script/Elements/ScriptVariable.h"
30 namespace Schematyc2
32 class CScriptRoot;
34 DECLARE_SHARED_POINTERS(IScriptElement)
36 class CScriptFile : public IScriptFile
38 private:
40 enum class EElementOrigin
42 File,
43 Clipboard
46 typedef std::unordered_map<SGUID, IScriptElementPtr> Elements;
47 typedef std::multimap<SGUID, IScriptElement*> ElementsScopeGuidMap;
48 typedef std::map<string, ElementsScopeGuidMap> ElementsToSave;
50 struct SNewElement
52 SNewElement(const IScriptElementPtr& _pElement, const XmlNodeRef& _xml);
54 IScriptElementPtr pElement;
55 XmlNodeRef xml;
58 typedef std::vector<SNewElement> NewElements;
60 public:
62 CScriptFile(const char* szFileName, const SGUID& guid, EScriptFileFlags flags);
64 // IScriptFile
65 virtual const char* GetFileName() const override;
66 virtual SGUID GetGUID() const override;
67 virtual void SetFlags(EScriptFileFlags flags) override;
68 virtual EScriptFileFlags GetFlags() const override;
69 virtual IScriptInclude* AddInclude(const SGUID& scopeGUID, const char* szFileName, const SGUID& refGUID) override;
70 virtual IScriptInclude* GetInclude(const SGUID& guid) override;
71 virtual const IScriptInclude* GetInclude(const SGUID& guid) const override;
72 virtual EVisitStatus VisitIncludes(const ScriptIncludeVisitor& visitor) override;
73 virtual EVisitStatus VisitIncludes(const ScriptIncludeVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
74 virtual EVisitStatus VisitIncludes(const ScriptIncludeConstVisitor& visitor) const override;
75 virtual EVisitStatus VisitIncludes(const ScriptIncludeConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
76 virtual IScriptGroup* AddGroup(const SGUID& scopeGUID, const char* szName) override;
77 virtual IScriptGroup* GetGroup(const SGUID& guid) override;
78 virtual const IScriptGroup* GetGroup(const SGUID& guid) const override;
79 virtual EVisitStatus VisitGroups(const ScriptGroupVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
80 virtual EVisitStatus VisitGroups(const ScriptGroupConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
81 virtual IScriptEnumeration* AddEnumeration(const SGUID& scopeGUID, const char* szName) override;
82 virtual IScriptEnumeration* GetEnumeration(const SGUID& guid) override;
83 virtual const IScriptEnumeration* GetEnumeration(const SGUID& guid) const override;
84 virtual EVisitStatus VisitEnumerations(const ScriptEnumerationVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
85 virtual EVisitStatus VisitEnumerations(const ScriptEnumerationConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
86 virtual IScriptStructure* AddStructure(const SGUID& scopeGUID, const char* szName) override;
87 virtual IScriptStructure* GetStructure(const SGUID& guid) override;
88 virtual const IScriptStructure* GetStructure(const SGUID& guid) const override;
89 virtual EVisitStatus VisitStructures(const ScriptStructureVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
90 virtual EVisitStatus VisitStructures(const ScriptStructureConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
91 virtual IScriptSignal* AddSignal(const SGUID& scopeGUID, const char* szName) override;
92 virtual IScriptSignal* GetSignal(const SGUID& guid) override;
93 virtual const IScriptSignal* GetSignal(const SGUID& guid) const override;
94 virtual EVisitStatus VisitSignals(const ScriptSignalVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
95 virtual EVisitStatus VisitSignals(const ScriptSignalConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
96 virtual IScriptAbstractInterface* AddAbstractInterface(const SGUID& scopeGUID, const char* szName) override;
97 virtual IScriptAbstractInterface* GetAbstractInterface(const SGUID& guid) override;
98 virtual const IScriptAbstractInterface* GetAbstractInterface(const SGUID& guid) const override;
99 virtual EVisitStatus VisitAbstractInterfaces(const ScriptAbstractInterfaceVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
100 virtual EVisitStatus VisitAbstractInterfaces(const ScriptAbstractInterfaceConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
101 virtual IScriptAbstractInterfaceFunction* AddAbstractInterfaceFunction(const SGUID& scopeGUID, const char* szName) override;
102 virtual IScriptAbstractInterfaceFunction* GetAbstractInterfaceFunction(const SGUID& guid) override;
103 virtual const IScriptAbstractInterfaceFunction* GetAbstractInterfaceFunction(const SGUID& guid) const override;
104 virtual EVisitStatus VisitAbstractInterfaceFunctions(const ScriptAbstractInterfaceFunctionVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
105 virtual EVisitStatus VisitAbstractInterfaceFunctions(const ScriptAbstractInterfaceFunctionConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
106 virtual IScriptAbstractInterfaceTask* AddAbstractInterfaceTask(const SGUID& scopeGUID, const char* szName) override;
107 virtual IScriptAbstractInterfaceTask* GetAbstractInterfaceTask(const SGUID& guid) override;
108 virtual const IScriptAbstractInterfaceTask* GetAbstractInterfaceTask(const SGUID& guid) const override;
109 virtual EVisitStatus VisitAbstractInterfaceTasks(const ScriptAbstractInterfaceTaskVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
110 virtual EVisitStatus VisitAbstractInterfaceTasks(const ScriptAbstractInterfaceTaskConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
111 virtual IScriptClass* AddClass(const SGUID& scopeGUID, const char* szName, const SGUID& foundationGUID) override;
112 virtual IScriptClass* GetClass(const SGUID& guid) override;
113 virtual const IScriptClass* GetClass(const SGUID& guid) const override;
114 virtual EVisitStatus VisitClasses(const ScriptClassVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
115 virtual EVisitStatus VisitClasses(const ScriptClassConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
116 virtual IScriptClassBase* AddClassBase(const SGUID& scopeGUID, const SGUID& refGUID) override;
117 virtual IScriptClassBase* GetClassBase(const SGUID& guid) override;
118 virtual const IScriptClassBase* GetClassBase(const SGUID& guid) const override;
119 virtual EVisitStatus VisitClassBases(const ScriptClassBaseVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
120 virtual EVisitStatus VisitClassBases(const ScriptClassBaseConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
121 virtual IScriptStateMachine* AddStateMachine(const SGUID& scopeGUID, const char* szName, EStateMachineLifetime lifetime, const SGUID& contextGUID, const SGUID& partnerGUID) override;
122 virtual IScriptStateMachine* GetStateMachine(const SGUID& guid) override;
123 virtual const IScriptStateMachine* GetStateMachine(const SGUID& guid) const override;
124 virtual EVisitStatus VisitStateMachines(const ScriptStateMachineVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
125 virtual EVisitStatus VisitStateMachines(const ScriptStateMachineConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
126 virtual IScriptState* AddState(const SGUID& scopeGUID, const char* szName, const SGUID& partnerGUID) override;
127 virtual IScriptState* GetState(const SGUID& guid) override;
128 virtual const IScriptState* GetState(const SGUID& guid) const override;
129 virtual EVisitStatus VisitStates(const ScriptStateVisitor& visitor) override;
130 virtual EVisitStatus VisitStates(const ScriptStateVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
131 virtual EVisitStatus VisitStates(const ScriptStateConstVisitor& visitor) const override;
132 virtual EVisitStatus VisitStates(const ScriptStateConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
133 virtual IScriptVariable* AddVariable(const SGUID& scopeGUID, const char* szName, const CAggregateTypeId& typeId) override;
134 virtual IScriptVariable* GetVariable(const SGUID& guid) override;
135 virtual const IScriptVariable* GetVariable(const SGUID& guid) const override;
136 virtual EVisitStatus VisitVariables(const ScriptVariableVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
137 virtual EVisitStatus VisitVariables(const ScriptVariableConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
138 virtual IScriptProperty* AddProperty(const SGUID& scopeGUID, const char* szName, const SGUID& refGUID, const CAggregateTypeId& typeId) override;
139 virtual IScriptProperty* GetProperty(const SGUID& guid) override;
140 virtual const IScriptProperty* GetProperty(const SGUID& guid) const override;
141 virtual EVisitStatus VisitProperties(const ScriptPropertyVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
142 virtual EVisitStatus VisitProperties(const ScriptPropertyConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
143 virtual IScriptContainer* AddContainer(const SGUID& scopeGUID, const char* szName, const SGUID& typeGUID) override;
144 virtual IScriptContainer* GetContainer(const SGUID& guid) override;
145 virtual const IScriptContainer* GetContainer(const SGUID& guid) const override;
146 virtual EVisitStatus VisitContainers(const ScriptContainerVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
147 virtual EVisitStatus VisitContainers(const ScriptContainerConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
148 virtual IScriptTimer* AddTimer(const SGUID& scopeGUID, const char* szName) override;
149 virtual IScriptTimer* GetTimer(const SGUID& guid) override;
150 virtual const IScriptTimer* GetTimer(const SGUID& guid) const override;
151 virtual EVisitStatus VisitTimers(const ScriptTimerVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
152 virtual EVisitStatus VisitTimers(const ScriptTimerConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
153 virtual IScriptAbstractInterfaceImplementation* AddAbstractInterfaceImplementation(const SGUID& scopeGUID, EDomain domain, const SGUID& refGUID) override;
154 virtual IScriptAbstractInterfaceImplementation* GetAbstractInterfaceImplementation(const SGUID& guid) override;
155 virtual const IScriptAbstractInterfaceImplementation* GetAbstractInterfaceImplementation(const SGUID& guid) const override;
156 virtual EVisitStatus VisitAbstractInterfaceImplementations(const ScriptAbstractInterfaceImplementationVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
157 virtual EVisitStatus VisitAbstractInterfaceImplementations(const ScriptAbstractInterfaceImplementationConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
158 virtual IScriptComponentInstance* AddComponentInstance(const SGUID& scopeGUID, const char* szName, const SGUID& componentGUID, EScriptComponentInstanceFlags flags) override;
159 virtual IScriptComponentInstance* GetComponentInstance(const SGUID& guid) override;
160 virtual const IScriptComponentInstance* GetComponentInstance(const SGUID& guid) const override;
161 virtual EVisitStatus VisitComponentInstances(const ScriptComponentInstanceVisitor& visitor) override;
162 virtual EVisitStatus VisitComponentInstances(const ScriptComponentInstanceVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
163 virtual EVisitStatus VisitComponentInstances(const ScriptComponentInstanceConstVisitor& visitor) const override;
164 virtual EVisitStatus VisitComponentInstances(const ScriptComponentInstanceConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
165 virtual IScriptActionInstance* AddActionInstance(const SGUID& scopeGUID, const char* szName, const SGUID& actionGUID, const SGUID& componentInstanceGUID) override;
166 virtual IScriptActionInstance* GetActionInstance(const SGUID& guid) override;
167 virtual const IScriptActionInstance* GetActionInstance(const SGUID& guid) const override;
168 virtual EVisitStatus VisitActionInstances(const ScriptActionInstanceVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
169 virtual EVisitStatus VisitActionInstances(const ScriptActionInstanceConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
170 virtual IDocGraph* AddGraph(const SScriptGraphParams& params) override;
171 virtual IDocGraph* GetGraph(const SGUID& guid) override;
172 virtual const IDocGraph* GetGraph(const SGUID& guid) const override;
173 virtual EVisitStatus VisitGraphs(const DocGraphVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
174 virtual EVisitStatus VisitGraphs(const DocGraphConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
175 virtual void RemoveElement(const SGUID& guid, bool clearScope) override;
176 virtual IScriptElement* GetElement(const SGUID& guid) override;
177 virtual const IScriptElement* GetElement(const SGUID& guid) const override;
178 virtual IScriptElement* GetElement(const SGUID& guid, EScriptElementType elementType) override;
179 virtual const IScriptElement* GetElement(const SGUID& guid, EScriptElementType elementType) const override;
180 virtual EVisitStatus VisitElements(const ScriptElementVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) override;
181 virtual EVisitStatus VisitElements(const ScriptElementConstVisitor& visitor, const SGUID& scopeGUID, bool bRecurseHierarchy) const override;
182 virtual bool IsElementNameUnique(const SGUID& scopeGUID, const char* szName) const override; // #SchematycTODO : Move to separate utils class!!!
183 virtual XmlNodeRef CopyElementsToXml(const SGUID& guid, bool bRecurseHierarchy) const override;
184 virtual void PasteElementsFromXml(const SGUID& scopeGUID, const XmlNodeRef& xml) override;
185 virtual void Load() override;
186 virtual void Save() override;
187 virtual void Refresh(const SScriptRefreshParams& params) override;
188 virtual bool GetClipboardInfo(const XmlNodeRef& xml, SScriptElementClipboardInfo& clipboardInfo) const override; // #SchematycTODO : Move to separate utils class!!!
189 // ~IScriptFile
191 private:
193 void AttachElement(IScriptElement& element, const SGUID& scopeGUID);
194 template <typename TYPE> TYPE* GetElement(EScriptElementType type, const SGUID& guid);
195 template <typename TYPE> const TYPE* GetElement(EScriptElementType type, const SGUID& guid) const;
196 EVisitStatus VisitElements(const ScriptElementVisitor& visitor, IScriptElement& parentElement, bool bRecurseHierarchy);
197 template <typename TYPE> EVisitStatus VisitElements(EScriptElementType type, const TemplateUtils::CDelegate<EVisitStatus (TYPE&)>& visitor);
198 template <typename TYPE> EVisitStatus VisitElements(EScriptElementType type, const TemplateUtils::CDelegate<EVisitStatus (TYPE&)>& visitor, IScriptElement& parentElement, bool bRecurseHierarchy);
199 EVisitStatus VisitElements(const ScriptElementConstVisitor& visitor, const IScriptElement& parentElement, bool bRecurseHierarchy) const;
200 template <typename TYPE> EVisitStatus VisitElements(EScriptElementType type, const TemplateUtils::CDelegate<EVisitStatus (const TYPE&)>& visitor) const;
201 template <typename TYPE> EVisitStatus VisitElements(EScriptElementType type, const TemplateUtils::CDelegate<EVisitStatus (const TYPE&)>& visitor, const IScriptElement& parentElement, bool bRecurseHierarchy) const;
202 void CopyElementsToXmlRecursive(const IScriptElement& element, const XmlNodeRef& xmlElements, bool bRecurseHierarchy) const;
203 void CreateElementsFromXml(const SGUID& scopeGUID, const XmlNodeRef& xml, EElementOrigin origin);
204 void GatherElementsToSave(EScriptElementType type, ElementsToSave& elementsToSave);
205 XmlNodeRef SaveElements(EScriptElementType type, const char* szTag);
206 XmlNodeRef SaveGraphs();
208 void MakeElementNameUnique(const SGUID& scopeGUID, stack_string& name) const; // #SchematycTODO : Move to separate utils class!!!
209 const char* GetElementTypeName(EScriptElementType elementType) const; // #SchematycTODO : Move to separate utils class!!!
210 EScriptElementType GetElementType(const char* szElementTypeName) const; // #SchematycTODO : Move to separate utils class!!!
211 void ClearScope(const SGUID& scopeGUID);
213 string m_fileName;
214 SGUID m_guid;
215 EScriptFileFlags m_flags;
216 Elements m_elements;
217 std::unique_ptr<CScriptRoot> m_pRoot;
220 DECLARE_SHARED_POINTERS(CScriptFile)