!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / GUIDRegistry.cpp
blob1b1562700e02ccf63e274d2accb0a86e31aa361d
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
4 #include "CrySchematyc2/Framework.h"
6 #if defined(WIN32) || defined(WIN64)
7 #include <Objbase.h>
8 #endif
10 #include <CryExtension/CryCreateClassInstance.h>
11 #include <CrySchematyc2/SerializationUtils.h>
12 #include <CrySchematyc2/TypeDesc.h>
14 #include "CrySchematyc2/CVars.h"
15 #include "CrySchematyc2/Log.h"
17 #define SCHEMATYC_FRAMEWORK_CREATOR_CLASS_NAME "GameExtension_SchematycFrameworkCreator"
19 namespace Schematyc
21 namespace
23 static const char* DOC_SUB_FOLDER = "docs";
24 static const char* DOC_EXTENSION = "xml";
25 static const char* SETTINGS_SUB_FOLDER = "Settings";
26 static const char* SETTINGS_EXTENSION = "xml";
28 static const SGUID BOOL_TYPE_GUID = "03211ee1-b8d3-42a5-bfdc-296fc535fe43";
29 static const SGUID INT32_TYPE_GUID = "8bd755fd-ed92-42e8-a488-79e7f1051b1a";
30 static const SGUID UINT32_TYPE_GUID = "db4b8137-5150-4246-b193-d8d509bec2d4";
31 static const SGUID FLOAT_TYPE_GUID = "03d99d5a-cf2c-4f8a-8489-7da5b515c202";
32 static const SGUID STRING_TYPE_GUID = "02b79308-c51c-4841-99ec-c887577217a7";
33 static const SGUID OBJECT_ID_TYPE_GUID = "95b8918e-9e65-4b6c-9c48-8899754f9d3c";
34 static const SGUID ENTITY_ID_TYPE_GUID = "00782e22-3188-4538-b4f2-8749b8a9dc48";
35 static const SGUID VEC2_TYPE_GUID = "6c607bf5-76d7-45d0-9b34-9d81a13c3c89";
36 static const SGUID VEC3_TYPE_GUID = "e01bd066-2a42-493d-bc43-436b233833d8";
37 static const SGUID ANG3_TYPE_GUID = "5aafd383-4b89-4249-91d3-0e42f3a094a5";
38 static const SGUID QROTATION_TYPE_GUID = "991960c1-3b34-45cc-ac3c-f3f0e55ed7ef";
39 static const SGUID CHARACTER_FILE_NAME_TYPE_GUID = "cb3189c1-92de-4851-b26a-22894ec039b0";
40 static const SGUID GEOMETRY_FILE_NAME_TYPE_GUID = "bd6f2953-1127-4cdd-bfe7-79f98c97058c";
41 static const SGUID PARTICLE_EFFECT_NAME_TYPE_GUID = "a6f326e7-d3d3-428a-92c9-97185f003bec";
42 static const SGUID SOUND_NAME_TYPE_GUID = "328e6265-5d53-4d87-8fdd-8b7c0176299a";
43 static const SGUID DIALOG_NAME_TYPE_GUID = "839adde8-cc62-4636-9f26-16dd4236855f";
44 static const SGUID FORCE_FEEDBACK_ID_TYPE_GUID = "40dce92c-9532-4c02-8752-4afac04331ef";
46 class CSchematycFrameworkCreator : public IGameFrameworkExtensionCreator
48 CRYINTERFACE_SIMPLE(IGameFrameworkExtensionCreator)
50 CRYGENERATE_SINGLETONCLASS_GUID(CSchematycFrameworkCreator, SCHEMATYC_FRAMEWORK_CREATOR_CLASS_NAME, "0f296b01-ff3f-4f55-aa10-a724a89c73cd"_cry_guid)
52 virtual ICryUnknown* Create(IGameFramework* pIGameFramework) OVERRIDE
54 // Create Schematyc framework.
55 boost::shared_ptr<CFramework> pSchematycFramework;
56 if(CryCreateClassInstance(SCHEMATYC_FRAMEWORK_CLASS_NAME, pSchematycFramework) == true)
58 // Register Schematyc with game framework
59 pIGameFramework->RegisterExtension(pSchematycFramework);
60 // Call GetSchematycFramework() to ensure registration was successful and cache the framework pointer locally.
61 GetSchematycFramework();
62 // Initialize Schematyc framework.
63 pSchematycFramework->Init();
64 CryLogAlways("Schematyc framework initialized");
65 return pSchematycFramework.get();
67 return NULL;
71 CSchematycFrameworkCreator::CSchematycFrameworkCreator() {}
73 CSchematycFrameworkCreator::~CSchematycFrameworkCreator() {}
75 CRYREGISTER_SINGLETON_CLASS(CSchematycFrameworkCreator)
78 //////////////////////////////////////////////////////////////////////////
79 IFramework* CreateFramework(IGameFramework* pIGameFramework)
81 IGameFrameworkExtensionCreatorPtr pCreator;
82 if(CryCreateClassInstance(SCHEMATYC_FRAMEWORK_CREATOR_CLASS_NAME, pCreator) == true)
84 return cryinterface_cast<IFramework>(pCreator->Create(pIGameFramework));
86 return NULL;
89 //////////////////////////////////////////////////////////////////////////
90 CFramework::CFramework() {}
92 //////////////////////////////////////////////////////////////////////////
93 CFramework::~CFramework() {}
95 //////////////////////////////////////////////////////////////////////////
96 void CFramework::Init()
98 // Initialise framework.
99 Schematyc::CVars::Register();
100 m_log.Init();
101 SCHEMATYC_COMMENT("Initializing Schematyc framework");
102 // Refresh environment.
103 RefreshEnv();
106 //////////////////////////////////////////////////////////////////////////
107 void CFramework::SetGUIDGenerator(const TGUIDGenerator& guidGenerator)
109 m_guidGenerator = guidGenerator;
112 //////////////////////////////////////////////////////////////////////////
113 SGUID CFramework::CreateGUID() const
115 return m_guidGenerator.Empty() == false ? m_guidGenerator() : SGUID();
118 //////////////////////////////////////////////////////////////////////////
119 IStringPool& CFramework::GetStringPool()
121 return m_stringPool;
124 //////////////////////////////////////////////////////////////////////////
125 IEnvRegistry& CFramework::GetEnvRegistry()
127 return m_envRegistry;
130 //////////////////////////////////////////////////////////////////////////
131 ILibRegistry& CFramework::GetLibRegistry()
133 return m_libRegistry;
136 //////////////////////////////////////////////////////////////////////////
137 const char* CFramework::GetRootFolder() const
139 return CVars::GetStringSafe(CVars::sc_RootFolder);
142 //////////////////////////////////////////////////////////////////////////
143 const char* CFramework::GetDocFolder() const
145 m_docFolder = GetRootFolder();
146 m_docFolder.append("/");
147 m_docFolder.append(DOC_SUB_FOLDER);
148 return m_docFolder.c_str();
151 //////////////////////////////////////////////////////////////////////////
152 const char* CFramework::GetDocExtension() const
154 return DOC_EXTENSION;
157 //////////////////////////////////////////////////////////////////////////
158 const char* CFramework::GetSettingsFolder() const
160 m_settingsFolder = GetRootFolder();
161 m_settingsFolder.append("/");
162 m_settingsFolder.append(SETTINGS_SUB_FOLDER);
163 return m_settingsFolder.c_str();
166 //////////////////////////////////////////////////////////////////////////
167 const char* CFramework::GetSettingsExtension() const
169 return SETTINGS_EXTENSION;
172 //////////////////////////////////////////////////////////////////////////
173 IDocManager& CFramework::GetDocManager()
175 return m_docManager;
178 //////////////////////////////////////////////////////////////////////////
179 ICompiler& CFramework::GetCompiler()
181 return m_compiler;
184 //////////////////////////////////////////////////////////////////////////
185 IObjectManager& CFramework::GetObjectManager()
187 return m_objectManager;
190 //////////////////////////////////////////////////////////////////////////
191 ILog& CFramework::GetLog()
193 return m_log;
196 //////////////////////////////////////////////////////////////////////////
197 IUpdateScheduler& CFramework::GetUpdateScheduler()
199 return m_updateScheduler;
202 //////////////////////////////////////////////////////////////////////////
203 ITimerSystem& CFramework::GetTimerSystem()
205 return m_timerSystem;
208 //////////////////////////////////////////////////////////////////////////
209 IFramework::IRefreshEnvSignal& CFramework::GetRefreshEnvSignal()
211 return m_refreshEnvSignal;
214 //////////////////////////////////////////////////////////////////////////
215 void CFramework::RefreshEnv()
217 // Clear registries.
218 m_libRegistry.Clear();
219 m_envRegistry.Clear();
220 // Register core types.
221 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(BOOL_TYPE_GUID, "Bool", "Boolean", TypeCategory::PRIMITIVE, bool()));
222 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(INT32_TYPE_GUID, "Int32", "Signed 32bit integer", TypeCategory::PRIMITIVE, int32()));
223 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(UINT32_TYPE_GUID, "UInt32", "Unsigned 32bit integer", TypeCategory::PRIMITIVE, uint32()));
224 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(FLOAT_TYPE_GUID, "Float", "32bit floating point number", TypeCategory::PRIMITIVE, float()));
225 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(STRING_TYPE_GUID, "String", "String", TypeCategory::PRIMITIVE, CPoolString()));
226 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(OBJECT_ID_TYPE_GUID, "ObjectId", "Object id", TypeCategory::CLASS, TObjectId()));
227 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(ENTITY_ID_TYPE_GUID, "EntityId", "Entity id", TypeCategory::CLASS, TEntityId()));
228 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(VEC2_TYPE_GUID, "Vec2", "2d vector", TypeCategory::CLASS, Vec2(ZERO)));
229 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(VEC3_TYPE_GUID, "Vec3", "3d vector", TypeCategory::CLASS, Vec3(ZERO)));
230 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(ANG3_TYPE_GUID, "Ang3", "3d euler angle", TypeCategory::CLASS, Ang3(ZERO)));
231 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(QROTATION_TYPE_GUID, "QRotation", "Quaternion rotation", TypeCategory::CLASS, QRotation()));
232 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(CHARACTER_FILE_NAME_TYPE_GUID, "CharacterFileName", "Character file name", TypeCategory::CLASS, SCharacterFileName()));
233 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(GEOMETRY_FILE_NAME_TYPE_GUID, "GeometryFileName", "Geometry file name", TypeCategory::CLASS, SGeometryFileName()));
234 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(PARTICLE_EFFECT_NAME_TYPE_GUID, "ParticleEffectName", "Particle effect name", TypeCategory::CLASS, SParticleEffectName()));
235 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(SOUND_NAME_TYPE_GUID, "SoundName", "Sound name", TypeCategory::CLASS, SSoundName()));
236 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(DIALOG_NAME_TYPE_GUID, "DialogName", "Dialog name", TypeCategory::CLASS, SDialogName()));
237 m_envRegistry.RegisterTypeDesc(MakeTypeDescShared(FORCE_FEEDBACK_ID_TYPE_GUID, "ForceFeedbackId", "Force feedback id", TypeCategory::CLASS, SForceFeedbackId()));
238 // Send signal to refresh environment.
239 m_refreshEnvSignal.Send();
242 CRYREGISTER_CLASS(CFramework)