1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
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>
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
)
29 , m_scopeGUID(scopeGUID
)
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
47 //////////////////////////////////////////////////////////////////////////
48 SGUID
CScriptProperty::GetScopeGUID() const
53 //////////////////////////////////////////////////////////////////////////
54 bool CScriptProperty::SetName(const char* szName
)
56 m_declaration
.SetName(szName
);
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
);
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
);
102 case ESerializationPass::Load
:
104 m_declaration
.SerializeValue(archive
);
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
);
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
;
128 archive(m_overridePolicy
, "overridePolicy", "Override");
130 if(!bDerived
|| (m_overridePolicy
!= EOverridePolicy::Default
))
132 m_declaration
.SerializeValue(archive
);
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
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();