1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
4 #include "Script/Elements/ScriptActionInstance.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 CScriptActionInstance::CScriptActionInstance(IScriptFile
& file
, const SGUID
& guid
, const SGUID
& scopeGUID
, const char* szName
, const SGUID
& actionGUID
, const SGUID
& componentInstanceGUID
)
21 : CScriptElementBase(EScriptElementType::ActionInstance
, file
)
23 , m_scopeGUID(scopeGUID
)
25 , m_actionGUID(actionGUID
)
26 , m_componentInstanceGUID(componentInstanceGUID
)
31 //////////////////////////////////////////////////////////////////////////
32 EAccessor
CScriptActionInstance::GetAccessor() const
34 return EAccessor::Private
;
37 //////////////////////////////////////////////////////////////////////////
38 SGUID
CScriptActionInstance::GetGUID() const
43 //////////////////////////////////////////////////////////////////////////
44 SGUID
CScriptActionInstance::GetScopeGUID() const
49 //////////////////////////////////////////////////////////////////////////
50 bool CScriptActionInstance::SetName(const char* szName
)
56 //////////////////////////////////////////////////////////////////////////
57 const char* CScriptActionInstance::GetName() const
59 return m_name
.c_str();
62 //////////////////////////////////////////////////////////////////////////
63 void CScriptActionInstance::EnumerateDependencies(const ScriptDependancyEnumerator
& enumerator
) const {}
65 //////////////////////////////////////////////////////////////////////////
66 void CScriptActionInstance::Refresh(const SScriptRefreshParams
& params
) {}
68 //////////////////////////////////////////////////////////////////////////
69 void CScriptActionInstance::Serialize(Serialization::IArchive
& archive
)
71 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY
);
73 CScriptElementBase::Serialize(archive
);
75 SerializationContext::SetValidatorLink(archive
, SValidatorLink(m_guid
)); // #SchematycTODO : Can we set this from CScriptElementBase?
76 switch(SerializationContext::GetPass(archive
))
78 case ESerializationPass::PreLoad
:
79 case ESerializationPass::Save
:
81 archive(m_guid
, "guid");
82 archive(m_scopeGUID
, "scope_guid");
83 archive(m_name
, "name");
84 archive(m_actionGUID
, "action_guid");
85 archive(m_componentInstanceGUID
, "component_instance_guid");
90 SerializeProperties(archive
);
93 case ESerializationPass::Edit
:
95 if(archive
.isOutput())
97 IActionFactoryConstPtr pFactory
= gEnv
->pSchematyc2
->GetEnvRegistry().GetActionFactory(m_actionGUID
);
100 string action
= pFactory
->GetName();
101 archive(action
, "action", "!Action");
104 SerializeProperties(archive
);
110 //////////////////////////////////////////////////////////////////////////
111 void CScriptActionInstance::RemapGUIDs(IGUIDRemapper
& guidRemapper
)
113 m_guid
= guidRemapper
.Remap(m_guid
);
114 m_scopeGUID
= guidRemapper
.Remap(m_scopeGUID
);
115 m_componentInstanceGUID
= guidRemapper
.Remap(m_componentInstanceGUID
);
118 //////////////////////////////////////////////////////////////////////////
119 SGUID
CScriptActionInstance::GetActionGUID() const
124 //////////////////////////////////////////////////////////////////////////
125 SGUID
CScriptActionInstance::GetComponentInstanceGUID() const
127 return m_componentInstanceGUID
;
130 //////////////////////////////////////////////////////////////////////////
131 IPropertiesConstPtr
CScriptActionInstance::GetProperties() const
133 return m_pProperties
;
136 //////////////////////////////////////////////////////////////////////////
137 void CScriptActionInstance::RefreshAction()
139 IActionFactoryConstPtr pFactory
= gEnv
->pSchematyc2
->GetEnvRegistry().GetActionFactory(m_actionGUID
);
140 m_pProperties
= pFactory
? pFactory
->CreateProperties() : IPropertiesPtr();
143 //////////////////////////////////////////////////////////////////////////
144 void CScriptActionInstance::SerializeProperties(Serialization::IArchive
& archive
)
148 GameSerialization::IContextPtr pSerializationContext
;
149 const IScriptComponentInstance
* pComponentInstance
= CScriptElementBase::GetFile().GetComponentInstance(m_componentInstanceGUID
);
150 if(pComponentInstance
)
152 IPropertiesConstPtr pComponentProperties
= pComponentInstance
->GetProperties();
153 if(pComponentProperties
)
155 pSerializationContext
= pComponentProperties
->BindSerializationContext(archive
);
158 archive(*m_pProperties
, "properties", "Properties");