1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
4 #include "Script/Elements/ScriptAbstractInterfaceFunction.h"
6 #include <CrySerialization/BlackBox.h>
7 #include <CrySerialization/IArchiveHost.h>
8 #include <CrySerialization/STL.h>
9 #include <CrySchematyc2/GUIDRemapper.h>
10 #include <CrySchematyc2/Deprecated/DocUtils.h>
11 #include <CrySchematyc2/Env/IEnvRegistry.h>
12 #include <CrySchematyc2/Serialization/ISerializationContext.h>
13 #include <CrySchematyc2/Serialization/SerializationUtils.h>
17 //////////////////////////////////////////////////////////////////////////
18 CScriptAbstractInterfaceFunction::CScriptAbstractInterfaceFunction(IScriptFile
& file
, const SGUID
& guid
, const SGUID
& scopeGUID
, const char* szName
)
19 : CScriptElementBase(EScriptElementType::AbstractInterfaceFunction
, file
)
21 , m_scopeGUID(scopeGUID
)
25 //////////////////////////////////////////////////////////////////////////
26 EAccessor
CScriptAbstractInterfaceFunction::GetAccessor() const
28 return EAccessor::Private
;
31 //////////////////////////////////////////////////////////////////////////
32 SGUID
CScriptAbstractInterfaceFunction::GetGUID() const
37 //////////////////////////////////////////////////////////////////////////
38 SGUID
CScriptAbstractInterfaceFunction::GetScopeGUID() const
43 //////////////////////////////////////////////////////////////////////////
44 bool CScriptAbstractInterfaceFunction::SetName(const char* szName
)
50 //////////////////////////////////////////////////////////////////////////
51 const char* CScriptAbstractInterfaceFunction::GetName() const
53 return m_name
.c_str();
56 //////////////////////////////////////////////////////////////////////////
57 void CScriptAbstractInterfaceFunction::EnumerateDependencies(const ScriptDependancyEnumerator
& enumerator
) const
59 SCHEMATYC2_SYSTEM_ASSERT(enumerator
);
62 for(const CScriptVariableDeclaration
& input
: m_inputs
)
64 input
.EnumerateDependencies(enumerator
);
66 for(const CScriptVariableDeclaration
& output
: m_outputs
)
68 output
.EnumerateDependencies(enumerator
);
73 //////////////////////////////////////////////////////////////////////////
74 void CScriptAbstractInterfaceFunction::Refresh(const SScriptRefreshParams
& params
)
76 if(params
.reason
== EScriptRefreshReason::EditorAdd
)
78 m_userDocumentation
.SetCurrentUserAsAuthor();
82 //////////////////////////////////////////////////////////////////////////
83 void CScriptAbstractInterfaceFunction::Serialize(Serialization::IArchive
& archive
)
85 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY
);
87 CScriptElementBase::Serialize(archive
);
89 SerializationContext::SetValidatorLink(archive
, SValidatorLink(m_guid
)); // #SchematycTODO : Can we set this from CScriptElementBase?
90 switch(SerializationContext::GetPass(archive
))
92 case ESerializationPass::PreLoad
:
94 archive(m_guid
, "guid");
95 archive(m_scopeGUID
, "scope_guid");
96 archive(m_name
, "name");
97 archive(m_inputs
, "inputs");
98 archive(m_outputs
, "outputs");
99 archive(m_userDocumentation
, "userDocumentation", "Documentation");
102 case ESerializationPass::Load
:
104 archive(m_inputs
, "inputs");
105 archive(m_outputs
, "outputs");
108 case ESerializationPass::Save
:
110 Serialization::SContext
fileContext(archive
, static_cast<IScriptFile
*>(&CScriptElementBase::GetFile())); // #SchematycTODO : Do we still need this?
111 archive(m_guid
, "guid");
112 archive(m_scopeGUID
, "scope_guid");
113 archive(m_name
, "name");
114 archive(m_inputs
, "inputs");
115 archive(m_outputs
, "outputs");
116 archive(m_userDocumentation
, "userDocumentation", "Documentation");
119 case ESerializationPass::Edit
:
121 Serialization::SContext
fileContext(archive
, static_cast<IScriptFile
*>(&CScriptElementBase::GetFile())); // #SchematycTODO : Do we still need this?
122 archive(m_inputs
, "inputs", "Inputs");
123 archive(m_outputs
, "outputs", "Outputs");
124 archive(m_userDocumentation
, "userDocumentation", "Documentation");
130 //////////////////////////////////////////////////////////////////////////
131 void CScriptAbstractInterfaceFunction::RemapGUIDs(IGUIDRemapper
& guidRemapper
)
133 m_guid
= guidRemapper
.Remap(m_guid
);
134 m_scopeGUID
= guidRemapper
.Remap(m_scopeGUID
);
137 //////////////////////////////////////////////////////////////////////////
138 const char* CScriptAbstractInterfaceFunction::GetAuthor() const
140 return m_userDocumentation
.author
.c_str();
143 //////////////////////////////////////////////////////////////////////////
144 const char* CScriptAbstractInterfaceFunction::GetDescription() const
146 return m_userDocumentation
.description
.c_str();
149 //////////////////////////////////////////////////////////////////////////
150 size_t CScriptAbstractInterfaceFunction::GetInputCount() const
152 return m_inputs
.size();
155 //////////////////////////////////////////////////////////////////////////
156 const char* CScriptAbstractInterfaceFunction::GetInputName(size_t inputIdx
) const
158 return inputIdx
< m_inputs
.size() ? m_inputs
[inputIdx
].GetName() : "";
161 //////////////////////////////////////////////////////////////////////////
162 IAnyConstPtr
CScriptAbstractInterfaceFunction::GetInputValue(size_t inputIdx
) const
164 return inputIdx
< m_inputs
.size() ? m_inputs
[inputIdx
].GetValue() : IAnyConstPtr();
167 //////////////////////////////////////////////////////////////////////////
168 size_t CScriptAbstractInterfaceFunction::GetOutputCount() const
170 return m_outputs
.size();
173 //////////////////////////////////////////////////////////////////////////
174 const char* CScriptAbstractInterfaceFunction::GetOutputName(size_t outputIdx
) const
176 return outputIdx
< m_outputs
.size() ? m_outputs
[outputIdx
].GetName() : "";
179 //////////////////////////////////////////////////////////////////////////
180 IAnyConstPtr
CScriptAbstractInterfaceFunction::GetOutputValue(size_t outputIdx
) const
182 return outputIdx
< m_outputs
.size() ? m_outputs
[outputIdx
].GetValue() : IAnyConstPtr();