!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / Script / Elements / ScriptActionInstance.cpp
blob9748a2790390b320c710dca0d8592a718a8400f0
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
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>
17 namespace Schematyc2
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)
22 , m_guid(guid)
23 , m_scopeGUID(scopeGUID)
24 , m_name(szName)
25 , m_actionGUID(actionGUID)
26 , m_componentInstanceGUID(componentInstanceGUID)
28 RefreshAction();
31 //////////////////////////////////////////////////////////////////////////
32 EAccessor CScriptActionInstance::GetAccessor() const
34 return EAccessor::Private;
37 //////////////////////////////////////////////////////////////////////////
38 SGUID CScriptActionInstance::GetGUID() const
40 return m_guid;
43 //////////////////////////////////////////////////////////////////////////
44 SGUID CScriptActionInstance::GetScopeGUID() const
46 return m_scopeGUID;
49 //////////////////////////////////////////////////////////////////////////
50 bool CScriptActionInstance::SetName(const char* szName)
52 m_name = szName;
53 return true;
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");
86 if(archive.isInput())
88 RefreshAction();
90 SerializeProperties(archive);
91 break;
93 case ESerializationPass::Edit:
95 if(archive.isOutput())
97 IActionFactoryConstPtr pFactory = gEnv->pSchematyc2->GetEnvRegistry().GetActionFactory(m_actionGUID);
98 if(pFactory)
100 string action = pFactory->GetName();
101 archive(action, "action", "!Action");
104 SerializeProperties(archive);
105 break;
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
121 return m_actionGUID;
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)
146 if(m_pProperties)
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");