!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / Script / Elements / ScriptProperty.cpp
blobf7c21ee9691443b777e4f45472348e2eda204839
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
4 #include "Script/Elements/ScriptProperty.h"
6 #include <CrySerialization/BlackBox.h>
7 #include <CrySerialization/IArchiveHost.h>
8 #include <CrySerialization/STL.h>
9 #include <CrySchematyc2/GUIDRemapper.h>
10 #include <CrySchematyc2/IAbstractInterface.h>
11 #include <CrySchematyc2/ICompiler.h>
12 #include <CrySchematyc2/Deprecated/DocUtils.h>
13 #include <CrySchematyc2/Env/IEnvRegistry.h>
14 #include <CrySchematyc2/Serialization/ISerializationContext.h>
15 #include <CrySchematyc2/Serialization/SerializationUtils.h>
17 namespace Schematyc2
19 //////////////////////////////////////////////////////////////////////////
20 CScriptProperty::CScriptProperty(IScriptFile& file)
21 : CScriptElementBase(EScriptElementType::Property, file)
22 , m_overridePolicy(EOverridePolicy::Default)
25 //////////////////////////////////////////////////////////////////////////
26 CScriptProperty::CScriptProperty(IScriptFile& file, const SGUID& guid, const SGUID& scopeGUID, const char* szName, const SGUID& refGUID, const CAggregateTypeId& typeId)
27 : CScriptElementBase(EScriptElementType::Property, file)
28 , m_guid(guid)
29 , m_scopeGUID(scopeGUID)
30 , m_refGUID(refGUID)
31 , m_overridePolicy(EOverridePolicy::Default)
32 , m_declaration(szName, typeId, MakeScriptVariableValueShared(file, typeId))
35 //////////////////////////////////////////////////////////////////////////
36 EAccessor CScriptProperty::GetAccessor() const
38 return EAccessor::Public;
41 //////////////////////////////////////////////////////////////////////////
42 SGUID CScriptProperty::GetGUID() const
44 return m_guid;
47 //////////////////////////////////////////////////////////////////////////
48 SGUID CScriptProperty::GetScopeGUID() const
50 return m_scopeGUID;
53 //////////////////////////////////////////////////////////////////////////
54 bool CScriptProperty::SetName(const char* szName)
56 m_declaration.SetName(szName);
57 return true;
60 //////////////////////////////////////////////////////////////////////////
61 const char* CScriptProperty::GetName() const
63 return m_declaration.GetName();
66 //////////////////////////////////////////////////////////////////////////
67 void CScriptProperty::EnumerateDependencies(const ScriptDependancyEnumerator& enumerator) const
69 SCHEMATYC2_SYSTEM_ASSERT(enumerator);
70 if(enumerator)
72 if(m_refGUID)
74 enumerator(m_refGUID);
76 m_declaration.EnumerateDependencies(enumerator);
80 //////////////////////////////////////////////////////////////////////////
81 void CScriptProperty::Refresh(const SScriptRefreshParams& params) {}
83 //////////////////////////////////////////////////////////////////////////
84 void CScriptProperty::Serialize(Serialization::IArchive& archive)
86 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
88 CScriptElementBase::Serialize(archive);
90 SerializationContext::SetValidatorLink(archive, SValidatorLink(m_guid)); // #SchematycTODO : Can we set this from CScriptElementBase?
91 switch(SerializationContext::GetPass(archive))
93 case ESerializationPass::PreLoad:
95 archive(m_guid, "guid");
96 archive(m_scopeGUID, "scope_guid");
97 archive(m_refGUID, "refGUID");
98 archive(m_overridePolicy, "overridePolicy");
99 m_declaration.SerializeInfo(archive);
100 break;
102 case ESerializationPass::Load:
104 m_declaration.SerializeValue(archive);
105 break;
107 case ESerializationPass::Save:
109 Serialization::SContext fileContext(archive, static_cast<IScriptFile*>(&CScriptElementBase::GetFile())); // #SchematycTODO : Do we still need this?
110 archive(m_guid, "guid");
111 archive(m_scopeGUID, "scope_guid");
112 archive(m_refGUID, "refGUID");
113 archive(m_overridePolicy, "overridePolicy");
114 m_declaration.Serialize(archive);
115 break;
117 case ESerializationPass::Edit:
119 IScriptFile& file = CScriptElementBase::GetFile();
120 Serialization::SContext fileContext(archive, static_cast<IScriptFile*>(&file)); // #SchematycTODO : Do we still need this?
122 string typeName = GetScriptVariableTypeName(file, m_declaration.GetTypeId());
123 archive(typeName, "typeName", "!Type");
125 const bool bDerived = m_refGUID;
126 if(bDerived)
128 archive(m_overridePolicy, "overridePolicy", "Override");
130 if(!bDerived || (m_overridePolicy != EOverridePolicy::Default))
132 m_declaration.SerializeValue(archive);
134 break;
139 //////////////////////////////////////////////////////////////////////////
140 void CScriptProperty::RemapGUIDs(IGUIDRemapper& guidRemapper)
142 m_guid = guidRemapper.Remap(m_guid);
143 m_scopeGUID = guidRemapper.Remap(m_scopeGUID);
144 m_refGUID = guidRemapper.Remap(m_refGUID);
145 m_declaration.RemapGUIDs(guidRemapper);
148 //////////////////////////////////////////////////////////////////////////
149 SGUID CScriptProperty::GetRefGUID() const
151 return m_refGUID;
154 //////////////////////////////////////////////////////////////////////////
155 EOverridePolicy CScriptProperty::GetOverridePolicy() const
157 return m_overridePolicy;
160 //////////////////////////////////////////////////////////////////////////
161 CAggregateTypeId CScriptProperty::GetTypeId() const
163 return m_declaration.GetTypeId();
166 //////////////////////////////////////////////////////////////////////////
167 IAnyConstPtr CScriptProperty::GetValue() const
169 return m_declaration.GetValue();