!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / Deprecated / DocGraphNodes / DocGraphNodes.cpp
blob31be44ca8d6d488b2843193f3519f14ca45b6b41
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
4 #include "DocGraphNodes.h"
6 #include <CrySchematyc2/ICompiler.h>
7 #include <CrySchematyc2/LibUtils.h>
8 #include <CrySchematyc2/Deprecated/DocUtils.h>
9 #include <CrySchematyc2/Deprecated/IGlobalFunction.h>
11 #include "AggregateTypeIdSerialize.h"
12 #include "Script/ScriptVariableDeclaration.h"
14 namespace Schematyc2
16 //////////////////////////////////////////////////////////////////////////
17 CDocGraphBeginNode::CDocGraphBeginNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
18 : CDocGraphNodeBase(file, graph, guid, "Begin", EScriptGraphNodeType::Begin, contextGUID, refGUID, pos)
20 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
23 //////////////////////////////////////////////////////////////////////////
24 IAnyConstPtr CDocGraphBeginNode::GetCustomOutputDefault() const
26 return IAnyConstPtr();
29 //////////////////////////////////////////////////////////////////////////
30 size_t CDocGraphBeginNode::AddCustomOutput(const IAny& value)
32 return INVALID_INDEX;
35 //////////////////////////////////////////////////////////////////////////
36 void CDocGraphBeginNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
38 //////////////////////////////////////////////////////////////////////////
39 size_t CDocGraphBeginNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
41 return INVALID_INDEX;
44 //////////////////////////////////////////////////////////////////////////
45 void CDocGraphBeginNode::RemoveOutput(size_t outputIdx) {}
47 //////////////////////////////////////////////////////////////////////////
48 void CDocGraphBeginNode::Refresh(const SScriptRefreshParams& params)
50 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
51 CDocGraphNodeBase::Refresh(params);
52 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::BeginSequence | EScriptGraphPortFlags::Execute);
53 const IDocGraph& graph = CDocGraphNodeBase::GetGraph();
54 const size_t graphInputCount = graph.GetInputCount();
55 m_outputValues.resize(EOutput::FirstParam + graphInputCount);
56 for(size_t graphInputIdx = 0; graphInputIdx < graphInputCount; ++ graphInputIdx)
58 IAnyConstPtr pGraphInputValue = graph.GetInputValue(graphInputIdx);
59 if(pGraphInputValue)
61 CDocGraphNodeBase::AddOutput(graph.GetInputName(graphInputIdx), EScriptGraphPortFlags::MultiLink, pGraphInputValue->GetTypeInfo().GetTypeId());
62 m_outputValues[EOutput::FirstParam + graphInputIdx] = pGraphInputValue->Clone();
67 //////////////////////////////////////////////////////////////////////////
68 void CDocGraphBeginNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const
70 switch(outputIdx)
72 case EOutput::Out:
74 const IDocGraph& graph = CDocGraphNodeBase::GetGraph();
75 preCompiler.BindFunctionToGUID(graph.GetGUID());
76 for(size_t graphInputIdx = 0, graphInputCount = graph.GetInputCount(); graphInputIdx < graphInputCount; ++ graphInputIdx)
78 IAnyConstPtr pGraphInputValue = graph.GetInputValue(graphInputIdx);
79 CRY_ASSERT(pGraphInputValue);
80 if(pGraphInputValue)
82 preCompiler.AddFunctionInput(graph.GetInputName(graphInputIdx), nullptr, *pGraphInputValue);
85 if(graph.GetType() == EScriptGraphType::Condition)
87 preCompiler.AddFunctionOutput("Result", nullptr, MakeAny(bool(false)));
89 else
91 for(size_t graphOutputIdx = 0, graphOutputCount = graph.GetOutputCount(); graphOutputIdx < graphOutputCount; ++ graphOutputIdx)
93 IAnyConstPtr pGraphOutputValue = graph.GetOutputValue(graphOutputIdx);
94 CRY_ASSERT(pGraphOutputValue);
95 if(pGraphOutputValue)
97 preCompiler.AddFunctionOutput(graph.GetOutputName(graphOutputIdx), nullptr, *pGraphOutputValue);
101 break;
106 //////////////////////////////////////////////////////////////////////////
107 void CDocGraphBeginNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
109 //////////////////////////////////////////////////////////////////////////
110 void CDocGraphBeginNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
112 switch(sequenceStep)
114 case EDocGraphSequenceStep::BeginInput:
116 BindOutputs(compiler);
117 break;
122 //////////////////////////////////////////////////////////////////////////
123 void CDocGraphBeginNode::BindOutputs(IDocGraphNodeCompiler& compiler) const
125 size_t stackPos = compiler.GetStackInputPos();
126 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
128 stackPos += compiler.BindOutputToStack(*this, stackPos, outputIdx, *m_outputValues[outputIdx]);
132 //////////////////////////////////////////////////////////////////////////
133 CDocGraphBeginConstructorNode::CDocGraphBeginConstructorNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
134 : CDocGraphNodeBase(file, graph, guid, "Begin", EScriptGraphNodeType::BeginConstructor, contextGUID, refGUID, pos)
136 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
139 //////////////////////////////////////////////////////////////////////////
140 IAnyConstPtr CDocGraphBeginConstructorNode::GetCustomOutputDefault() const
142 return IAnyConstPtr();
145 //////////////////////////////////////////////////////////////////////////
146 size_t CDocGraphBeginConstructorNode::AddCustomOutput(const IAny& value)
148 return INVALID_INDEX;
151 //////////////////////////////////////////////////////////////////////////
152 void CDocGraphBeginConstructorNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
154 //////////////////////////////////////////////////////////////////////////
155 size_t CDocGraphBeginConstructorNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
157 return INVALID_INDEX;
160 //////////////////////////////////////////////////////////////////////////
161 void CDocGraphBeginConstructorNode::RemoveOutput(size_t outputIdx) {}
163 //////////////////////////////////////////////////////////////////////////
164 void CDocGraphBeginConstructorNode::Refresh(const SScriptRefreshParams& params)
166 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
167 CDocGraphNodeBase::Refresh(params);
168 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::BeginSequence | EScriptGraphPortFlags::Execute);
169 const IScriptFile& file = CDocGraphNodeBase::GetFile();
170 const SGUID contextGUID = CDocGraphNodeBase::GetGraph().GetContextGUID();
171 if(contextGUID)
173 if(ISignalConstPtr pSignal = gEnv->pSchematyc2->GetEnvRegistry().GetSignal(contextGUID))
175 const size_t signalInputCount = pSignal->GetInputCount();
176 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
177 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
179 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
180 CRY_ASSERT(pSignalInputValue);
181 if(pSignalInputValue)
183 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
184 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
188 else if(const IScriptSignal* pSignal = ScriptIncludeRecursionUtils::GetSignal(file, contextGUID).second)
190 const size_t signalInputCount = pSignal->GetInputCount();
191 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
192 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
194 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
195 CRY_ASSERT(pSignalInputValue);
196 if(pSignalInputValue)
198 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
199 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
206 //////////////////////////////////////////////////////////////////////////
207 void CDocGraphBeginConstructorNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t iActiveOutput) const
209 switch(iActiveOutput)
211 case EOutput::Out:
213 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
215 preCompiler.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx), nullptr, *m_outputValues[outputIdx]);
217 break;
222 //////////////////////////////////////////////////////////////////////////
223 void CDocGraphBeginConstructorNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const
225 switch(outputIdx)
227 case EOutput::Out:
229 const IDocGraph& graph = CDocGraphNodeBase::GetGraph();
230 linker.CreateConstructor(graph.GetGUID(), functionId);
231 break;
236 //////////////////////////////////////////////////////////////////////////
237 void CDocGraphBeginConstructorNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
239 switch(sequenceStep)
241 case EDocGraphSequenceStep::BeginInput:
243 BindOutputs(compiler);
244 break;
249 //////////////////////////////////////////////////////////////////////////
250 void CDocGraphBeginConstructorNode::BindOutputs(IDocGraphNodeCompiler& compiler) const
252 size_t stackPos = 0;
253 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
255 stackPos += compiler.BindOutputToStack(*this, stackPos, outputIdx, *m_outputValues[outputIdx]);
259 //////////////////////////////////////////////////////////////////////////
260 CDocGraphBeginDestructorNode::CDocGraphBeginDestructorNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
261 : CDocGraphNodeBase(file, graph, guid, "Begin", EScriptGraphNodeType::BeginDestructor, contextGUID, refGUID, pos)
263 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
266 //////////////////////////////////////////////////////////////////////////
267 IAnyConstPtr CDocGraphBeginDestructorNode::GetCustomOutputDefault() const
269 return IAnyConstPtr();
272 //////////////////////////////////////////////////////////////////////////
273 size_t CDocGraphBeginDestructorNode::AddCustomOutput(const IAny& value)
275 return INVALID_INDEX;
278 //////////////////////////////////////////////////////////////////////////
279 void CDocGraphBeginDestructorNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
281 //////////////////////////////////////////////////////////////////////////
282 size_t CDocGraphBeginDestructorNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
284 return INVALID_INDEX;
287 //////////////////////////////////////////////////////////////////////////
288 void CDocGraphBeginDestructorNode::RemoveOutput(size_t outputIdx) {}
290 //////////////////////////////////////////////////////////////////////////
291 void CDocGraphBeginDestructorNode::Refresh(const SScriptRefreshParams& params)
293 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
294 CDocGraphNodeBase::Refresh(params);
295 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::BeginSequence | EScriptGraphPortFlags::Execute);
296 const IScriptFile& file = CDocGraphNodeBase::GetFile();
297 const SGUID contextGUID = CDocGraphNodeBase::GetGraph().GetContextGUID();
298 if(contextGUID)
300 if(ISignalConstPtr pSignal = gEnv->pSchematyc2->GetEnvRegistry().GetSignal(contextGUID))
302 const size_t signalInputCount = pSignal->GetInputCount();
303 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
304 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
306 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
307 CRY_ASSERT(pSignalInputValue);
308 if(pSignalInputValue)
310 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
311 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
315 else if(const IScriptSignal* pSignal = ScriptIncludeRecursionUtils::GetSignal(file, contextGUID).second)
317 const size_t signalInputCount = pSignal->GetInputCount();
318 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
319 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
321 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
322 CRY_ASSERT(pSignalInputValue);
323 if(pSignalInputValue)
325 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
326 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
333 //////////////////////////////////////////////////////////////////////////
334 void CDocGraphBeginDestructorNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const
336 switch(outputIdx)
338 case EOutput::Out:
340 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
342 preCompiler.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx), nullptr, *m_outputValues[outputIdx]);
344 break;
349 //////////////////////////////////////////////////////////////////////////
350 void CDocGraphBeginDestructorNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const
352 switch(outputIdx)
354 case EOutput::Out:
356 const IDocGraph& graph = CDocGraphNodeBase::GetGraph();
357 linker.CreateDestructor(graph.GetGUID(), functionId);
358 break;
363 //////////////////////////////////////////////////////////////////////////
364 void CDocGraphBeginDestructorNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
366 switch(sequenceStep)
368 case EDocGraphSequenceStep::BeginInput:
370 BindOutputs(compiler);
371 break;
376 //////////////////////////////////////////////////////////////////////////
377 void CDocGraphBeginDestructorNode::BindOutputs(IDocGraphNodeCompiler& compiler) const
379 size_t stackPos = 0;
380 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
382 stackPos += compiler.BindOutputToStack(*this, stackPos, outputIdx, *m_outputValues[outputIdx]);
386 //////////////////////////////////////////////////////////////////////////
387 CDocGraphBeginSignalReceiverNode::CDocGraphBeginSignalReceiverNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
388 : CDocGraphNodeBase(file, graph, guid, "Begin", EScriptGraphNodeType::BeginSignalReceiver, contextGUID, refGUID, pos)
390 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
393 //////////////////////////////////////////////////////////////////////////
394 IAnyConstPtr CDocGraphBeginSignalReceiverNode::GetCustomOutputDefault() const
396 return IAnyConstPtr();
399 //////////////////////////////////////////////////////////////////////////
400 size_t CDocGraphBeginSignalReceiverNode::AddCustomOutput(const IAny& value)
402 return INVALID_INDEX;
405 //////////////////////////////////////////////////////////////////////////
406 void CDocGraphBeginSignalReceiverNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
408 //////////////////////////////////////////////////////////////////////////
409 size_t CDocGraphBeginSignalReceiverNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
411 return INVALID_INDEX;
414 //////////////////////////////////////////////////////////////////////////
415 void CDocGraphBeginSignalReceiverNode::RemoveOutput(size_t outputIdx) {}
417 //////////////////////////////////////////////////////////////////////////
418 void CDocGraphBeginSignalReceiverNode::Refresh(const SScriptRefreshParams& params)
420 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
421 CDocGraphNodeBase::Refresh(params);
422 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::BeginSequence | EScriptGraphPortFlags::Execute);
423 const IScriptFile& file = CDocGraphNodeBase::GetFile();
424 const SGUID contextGUID = CDocGraphNodeBase::GetGraph().GetContextGUID();
425 if(ISignalConstPtr pSignal = gEnv->pSchematyc2->GetEnvRegistry().GetSignal(contextGUID))
427 const size_t signalInputCount = pSignal->GetInputCount();
428 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
429 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
431 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
432 CRY_ASSERT(pSignalInputValue);
433 if(pSignalInputValue)
435 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
436 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
440 else if(const IScriptSignal* pSignal = ScriptIncludeRecursionUtils::GetSignal(file, contextGUID).second)
442 const size_t signalInputCount = pSignal->GetInputCount();
443 m_outputValues.resize(EOutput::FirstParam + signalInputCount);
444 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
446 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
447 CRY_ASSERT(pSignalInputValue);
448 if(pSignalInputValue)
450 CDocGraphNodeBase::AddOutput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::MultiLink, pSignalInputValue->GetTypeInfo().GetTypeId());
451 m_outputValues[EOutput::FirstParam + signalInputIdx] = pSignalInputValue->Clone();
457 //////////////////////////////////////////////////////////////////////////
458 void CDocGraphBeginSignalReceiverNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const
460 switch(outputIdx)
462 case EOutput::Out:
464 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
466 preCompiler.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx), nullptr, *m_outputValues[outputIdx]);
468 break;
473 //////////////////////////////////////////////////////////////////////////
474 void CDocGraphBeginSignalReceiverNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const
476 switch(outputIdx)
478 case EOutput::Out:
480 const IDocGraph& graph = CDocGraphNodeBase::GetGraph();
481 linker.CreateSignalReceiver(graph.GetGUID(), graph.GetContextGUID(), functionId);
482 break;
487 //////////////////////////////////////////////////////////////////////////
488 void CDocGraphBeginSignalReceiverNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
490 switch(sequenceStep)
492 case EDocGraphSequenceStep::BeginInput:
494 BindOutputs(compiler);
495 break;
500 //////////////////////////////////////////////////////////////////////////
501 void CDocGraphBeginSignalReceiverNode::BindOutputs(IDocGraphNodeCompiler& compiler) const
503 size_t stackPos = 0;
504 for(size_t outputIdx = EOutput::FirstParam, outputCount = CDocGraphNodeBase::GetOutputCount(); outputIdx < outputCount; ++ outputIdx)
506 stackPos += compiler.BindOutputToStack(*this, stackPos, outputIdx, *m_outputValues[outputIdx]);
510 //////////////////////////////////////////////////////////////////////////
511 CDocGraphMakeEnumerationNode::CDocGraphMakeEnumerationNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
512 : CDocGraphNodeBase(file, graph, guid, "Make Enumeration", EScriptGraphNodeType::MakeEnumeration, contextGUID, refGUID, pos)
514 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
517 //////////////////////////////////////////////////////////////////////////
518 IAnyConstPtr CDocGraphMakeEnumerationNode::GetCustomOutputDefault() const
520 return IAnyConstPtr();
523 //////////////////////////////////////////////////////////////////////////
524 size_t CDocGraphMakeEnumerationNode::AddCustomOutput(const IAny& value)
526 return INVALID_INDEX;
529 //////////////////////////////////////////////////////////////////////////
530 void CDocGraphMakeEnumerationNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
532 //////////////////////////////////////////////////////////////////////////
533 size_t CDocGraphMakeEnumerationNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
535 return INVALID_INDEX;
538 //////////////////////////////////////////////////////////////////////////
539 void CDocGraphMakeEnumerationNode::RemoveOutput(size_t outputIdx) {}
541 //////////////////////////////////////////////////////////////////////////
542 void CDocGraphMakeEnumerationNode::Refresh(const SScriptRefreshParams& params)
544 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
545 CDocGraphNodeBase::Refresh(params);
546 if(m_pValue)
548 CDocGraphNodeBase::AddOutput("Value", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Pull, m_pValue->GetTypeInfo().GetTypeId());
552 //////////////////////////////////////////////////////////////////////////
553 void CDocGraphMakeEnumerationNode::Serialize(Serialization::IArchive& archive)
555 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
557 CDocGraphNodeBase::Serialize(archive);
559 if(archive.isEdit())
561 TypeIds typeIds;
562 Serialization::StringList typeNames;
563 typeIds.reserve(64);
564 typeNames.reserve(64);
565 if(!m_typeId)
567 typeIds.push_back(CAggregateTypeId());
568 typeNames.push_back("");
571 STypeVisitor typeVisitor(typeIds, typeNames);
572 gEnv->pSchematyc2->GetEnvRegistry().VisitTypeDescs(EnvTypeDescVisitor::FromMemberFunction<STypeVisitor, &STypeVisitor::VisitEnvTypeDesc>(typeVisitor));
573 ScriptIncludeRecursionUtils::VisitEnumerations(CDocGraphNodeBase::GetFile(), ScriptIncludeRecursionUtils::EnumerationVisitor::FromMemberFunction<STypeVisitor, &STypeVisitor::VisitScriptEnumeration>(typeVisitor), SGUID(), true);
575 if(archive.isInput())
577 Serialization::StringListValue typeName(typeNames, 0);
578 archive(typeName, "typeName", "Type");
579 SetTypeId(typeIds[typeName.index()]);
581 else if(archive.isOutput())
583 TypeIds::iterator itTypeId = std::find(typeIds.begin(), typeIds.end(), m_typeId);
584 Serialization::StringListValue typeName(typeNames, itTypeId != typeIds.end() ? static_cast<int>(itTypeId - typeIds.begin()) : 0);
585 archive(typeName, "typeName", "Type");
588 if(m_pValue)
590 archive(*m_pValue, "value", "Value");
593 else
595 if(archive.isInput())
597 CAggregateTypeId typeId;
598 archive(typeId, "typeId");
599 SetTypeId(typeId);
601 else if(archive.isOutput())
603 archive(m_typeId, "typeId");
606 if(m_pValue)
608 archive(*m_pValue, "value");
613 //////////////////////////////////////////////////////////////////////////
614 void CDocGraphMakeEnumerationNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
616 //////////////////////////////////////////////////////////////////////////
617 void CDocGraphMakeEnumerationNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
619 //////////////////////////////////////////////////////////////////////////
620 void CDocGraphMakeEnumerationNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
622 switch(sequenceStep)
624 case EDocGraphSequenceStep::PullOutput:
626 switch(portIdx)
628 case EOutput::Value:
630 CompileOutput(compiler);
631 break;
634 break;
639 //////////////////////////////////////////////////////////////////////////
640 CDocGraphMakeEnumerationNode::STypeVisitor::STypeVisitor(TypeIds& _typeIds, Serialization::StringList& _typeNames)
641 : typeIds(_typeIds)
642 , typeNames(_typeNames)
645 //////////////////////////////////////////////////////////////////////////
646 EVisitStatus CDocGraphMakeEnumerationNode::STypeVisitor::VisitEnvTypeDesc(const IEnvTypeDesc& typeDesc)
648 if(typeDesc.GetCategory() == EEnvTypeCategory::Enumeration)
650 typeIds.push_back(typeDesc.GetTypeInfo().GetTypeId());
651 typeNames.push_back(typeDesc.GetName());
653 return EVisitStatus::Continue;
656 //////////////////////////////////////////////////////////////////////////
657 void CDocGraphMakeEnumerationNode::STypeVisitor::VisitScriptEnumeration(const IScriptFile& enumerationFile, const IScriptEnumeration& enumeration)
659 typeIds.push_back(enumeration.GetTypeId());
660 typeNames.push_back(enumeration.GetName());
663 //////////////////////////////////////////////////////////////////////////
664 void CDocGraphMakeEnumerationNode::SetTypeId(const CAggregateTypeId& typeId)
666 if(typeId != m_typeId)
668 m_typeId = typeId;
669 m_pValue = MakeScriptVariableValueShared(CDocGraphNodeBase::GetFile(), typeId);
671 CDocGraphNodeBase::GetGraph().RemoveLinks(CDocGraphNodeBase::GetGUID());
672 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
676 //////////////////////////////////////////////////////////////////////////
677 void CDocGraphMakeEnumerationNode::CompileOutput(IDocGraphNodeCompiler& compiler) const
679 if(m_pValue)
681 const size_t stackPos = compiler.GetStackSize();
682 compiler.Push(*m_pValue, SGUID(), "");
683 compiler.BindOutputToStack(*this, stackPos, EOutput::Value, *m_pValue);
687 //////////////////////////////////////////////////////////////////////////
688 CDocGraphForLoopNode::CDocGraphForLoopNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
689 : CDocGraphNodeBase(file, graph, guid, "For Loop", EScriptGraphNodeType::ForLoop, contextGUID, refGUID, pos)
690 , m_begin(0)
691 , m_end(0)
693 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
696 //////////////////////////////////////////////////////////////////////////
697 IAnyConstPtr CDocGraphForLoopNode::GetCustomOutputDefault() const
699 return IAnyConstPtr();
702 //////////////////////////////////////////////////////////////////////////
703 size_t CDocGraphForLoopNode::AddCustomOutput(const IAny& value)
705 return INVALID_INDEX;
708 //////////////////////////////////////////////////////////////////////////
709 void CDocGraphForLoopNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
711 //////////////////////////////////////////////////////////////////////////
712 size_t CDocGraphForLoopNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
714 return INVALID_INDEX;
717 //////////////////////////////////////////////////////////////////////////
718 void CDocGraphForLoopNode::RemoveOutput(size_t outputIdx) {}
720 //////////////////////////////////////////////////////////////////////////
721 void CDocGraphForLoopNode::Refresh(const SScriptRefreshParams& params)
723 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
724 CDocGraphNodeBase::Refresh(params);
725 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
726 CDocGraphNodeBase::AddInput("Begin", EScriptGraphPortFlags::None, GetAggregateTypeId<int32>());
727 CDocGraphNodeBase::AddInput("End", EScriptGraphPortFlags::None, GetAggregateTypeId<int32>());
728 CDocGraphNodeBase::AddInput("Break", EScriptGraphPortFlags::EndSequence | EScriptGraphPortFlags::Execute);
729 CDocGraphNodeBase::AddOutput("Loop", EScriptGraphPortFlags::Execute);
730 CDocGraphNodeBase::AddOutput("End", EScriptGraphPortFlags::Execute);
731 CDocGraphNodeBase::AddOutput("Index", EScriptGraphPortFlags::MultiLink, GetAggregateTypeId<int32>());
734 //////////////////////////////////////////////////////////////////////////
735 void CDocGraphForLoopNode::Serialize(Serialization::IArchive& archive)
737 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
738 CDocGraphNodeBase::Serialize(archive);
739 archive(m_begin, "begin", "Begin");
740 archive(m_end, "end", "End");
743 //////////////////////////////////////////////////////////////////////////
744 void CDocGraphForLoopNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
746 //////////////////////////////////////////////////////////////////////////
747 void CDocGraphForLoopNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
749 //////////////////////////////////////////////////////////////////////////
750 void CDocGraphForLoopNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
752 switch(sequenceStep)
754 case EDocGraphSequenceStep::BeginInput:
756 switch(portIdx)
758 case EInput::In:
760 CompileInputs(compiler);
761 break;
763 case EInput::Break:
765 CompileBreak(compiler);
766 break;
769 break;
771 case EDocGraphSequenceStep::BeginOutput:
773 switch(portIdx)
775 case EOutput::Loop:
777 CompileLoop(compiler);
778 break;
780 case EOutput::End:
782 CompileEnd(compiler);
783 break;
786 break;
791 //////////////////////////////////////////////////////////////////////////
792 void CDocGraphForLoopNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
794 const size_t endStackPos = compiler.FindInputOnStack(*this, EInput::End);
795 if(endStackPos != INVALID_INDEX)
797 if(endStackPos != (compiler.GetStackSize() - 1))
799 compiler.Copy(endStackPos, INVALID_INDEX, MakeAny(m_end), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::End));
802 else
804 compiler.Push(MakeAny(m_end), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::End));
806 compiler.BindVariableToStack(*this, compiler.GetStackSize() - 1, EVariable::End);
807 compiler.CreateStackFrame(*this, EStackFrame::Body);
808 const size_t beginStackPos = compiler.FindInputOnStack(*this, EInput::Begin);
809 if(beginStackPos != INVALID_INDEX)
811 compiler.Copy(beginStackPos, INVALID_INDEX, MakeAny(m_begin), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::Begin));
813 else
815 compiler.Push(MakeAny(m_begin), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::Begin));
817 compiler.BindOutputToStack(*this, compiler.GetStackSize() - 1, EOutput::Index, MakeAny(int32()));
820 //////////////////////////////////////////////////////////////////////////
821 void CDocGraphForLoopNode::CompileBreak(IDocGraphNodeCompiler& compiler) const
823 compiler.Branch(*this, EMarker::End);
826 //////////////////////////////////////////////////////////////////////////
827 void CDocGraphForLoopNode::CompileLoop(IDocGraphNodeCompiler& compiler) const
829 compiler.CreateMarker(*this, EMarker::Begin);
830 compiler.CreateStackFrame(*this, EStackFrame::Loop);
831 compiler.LessThanInt32(compiler.FindOutputOnStack(*this, EOutput::Index), compiler.FindVariableOnStack(*this, EVariable::End));
832 compiler.BranchIfZero(*this, EMarker::End);
833 compiler.CollapseStackFrame(*this, EStackFrame::Loop);
836 //////////////////////////////////////////////////////////////////////////
837 void CDocGraphForLoopNode::CompileEnd(IDocGraphNodeCompiler& compiler) const
839 compiler.IncrementInt32(compiler.FindOutputOnStack(*this, EOutput::Index));
840 compiler.Branch(*this, EMarker::Begin);
841 compiler.CreateMarker(*this, EMarker::End);
842 compiler.CollapseStackFrame(*this, EStackFrame::Body);
843 compiler.BindOutputToStack(*this, compiler.GetStackSize() - 1, EOutput::Index, MakeAny(int32()));
846 //////////////////////////////////////////////////////////////////////////
847 CDocGraphProcessSignalNode::CDocGraphProcessSignalNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
848 : CDocGraphNodeBase(file, graph, guid, "Process Signal", EScriptGraphNodeType::ProcessSignal, contextGUID, refGUID, pos)
850 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
853 //////////////////////////////////////////////////////////////////////////
854 IAnyConstPtr CDocGraphProcessSignalNode::GetCustomOutputDefault() const
856 return IAnyConstPtr();
859 //////////////////////////////////////////////////////////////////////////
860 size_t CDocGraphProcessSignalNode::AddCustomOutput(const IAny& value)
862 return INVALID_INDEX;
865 //////////////////////////////////////////////////////////////////////////
866 void CDocGraphProcessSignalNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
868 //////////////////////////////////////////////////////////////////////////
869 size_t CDocGraphProcessSignalNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
871 return INVALID_INDEX;
874 //////////////////////////////////////////////////////////////////////////
875 void CDocGraphProcessSignalNode::RemoveOutput(size_t outputIdx) {}
877 //////////////////////////////////////////////////////////////////////////
878 void CDocGraphProcessSignalNode::Refresh(const SScriptRefreshParams& params)
880 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
881 CDocGraphNodeBase::Refresh(params);
882 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
883 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
884 const IScriptFile& file = CDocGraphNodeBase::GetFile();
885 const SGUID refGUID = CDocGraphNodeBase::GetRefGUID();
886 stack_string name = "Process Signal: ";
887 const IScriptSignal* pSignal = ScriptIncludeRecursionUtils::GetSignal(file, refGUID).second;
888 if(pSignal)
890 name.append(pSignal->GetName());
891 const size_t signalInputCount = pSignal->GetInputCount();
892 m_inputValues.resize(EInput::FirstParam + signalInputCount);
893 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
895 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
896 CRY_ASSERT(pSignalInputValue);
897 if(pSignalInputValue)
899 CDocGraphNodeBase::AddInput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::None, pSignalInputValue->GetTypeInfo().GetTypeId());
900 IAnyPtr& pInputValue = m_inputValues[EInput::FirstParam + signalInputIdx];
901 if(!pInputValue || (pInputValue->GetTypeInfo().GetTypeId() != pSignalInputValue->GetTypeInfo().GetTypeId()))
903 pInputValue = pSignalInputValue->Clone();
908 CDocGraphNodeBase::SetName(name.c_str());
911 //////////////////////////////////////////////////////////////////////////
912 void CDocGraphProcessSignalNode::Serialize(Serialization::IArchive& archive)
914 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
915 CDocGraphNodeBase::Serialize(archive);
916 for(size_t inputIdx = EInput::FirstParam, inputCount = CDocGraphNodeBase::GetInputCount(); inputIdx < inputCount; ++ inputIdx)
918 const char* szName = CDocGraphNodeBase::GetInputName(inputIdx);
919 archive(*m_inputValues[inputIdx], szName, szName);
923 //////////////////////////////////////////////////////////////////////////
924 void CDocGraphProcessSignalNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
926 //////////////////////////////////////////////////////////////////////////
927 void CDocGraphProcessSignalNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
929 //////////////////////////////////////////////////////////////////////////
930 void CDocGraphProcessSignalNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
932 switch(sequenceStep)
934 case EDocGraphSequenceStep::BeginInput:
936 CompileInputs(compiler);
937 break;
942 //////////////////////////////////////////////////////////////////////////
943 void CDocGraphProcessSignalNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
945 compiler.GetObject();
946 DocGraphNodeUtils::CopyInputsToStack(*this, EInput::FirstParam, m_inputValues, compiler);
947 compiler.SendSignal(CDocGraphNodeBase::GetRefGUID(), CDocGraphNodeBase::GetGUID());
950 //////////////////////////////////////////////////////////////////////////
951 CDocGraphBroadcastSignalNode::CDocGraphBroadcastSignalNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
952 : CDocGraphNodeBase(file, graph, guid, "Broadcast Signal", EScriptGraphNodeType::BroadcastSignal, contextGUID, refGUID, pos)
954 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
957 //////////////////////////////////////////////////////////////////////////
958 IAnyConstPtr CDocGraphBroadcastSignalNode::GetCustomOutputDefault() const
960 return IAnyConstPtr();
963 //////////////////////////////////////////////////////////////////////////
964 size_t CDocGraphBroadcastSignalNode::AddCustomOutput(const IAny& value)
966 return INVALID_INDEX;
969 //////////////////////////////////////////////////////////////////////////
970 void CDocGraphBroadcastSignalNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
972 //////////////////////////////////////////////////////////////////////////
973 size_t CDocGraphBroadcastSignalNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
975 return INVALID_INDEX;
978 //////////////////////////////////////////////////////////////////////////
979 void CDocGraphBroadcastSignalNode::RemoveOutput(size_t outputIdx) {}
981 //////////////////////////////////////////////////////////////////////////
982 void CDocGraphBroadcastSignalNode::Refresh(const SScriptRefreshParams& params)
984 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
985 CDocGraphNodeBase::Refresh(params);
986 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
987 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
988 const IScriptFile& file = CDocGraphNodeBase::GetFile();
989 const SGUID refGUID = CDocGraphNodeBase::GetRefGUID();
990 stack_string name = "Broadcast Signal: ";
991 const IScriptSignal* pSignal = ScriptIncludeRecursionUtils::GetSignal(file, refGUID).second;
992 if(pSignal)
994 name.append(pSignal->GetName());
995 const size_t signalInputCount = pSignal->GetInputCount();
996 m_inputValues.resize(EInput::FirstParam + signalInputCount);
997 for(size_t signalInputIdx = 0; signalInputIdx < signalInputCount; ++ signalInputIdx)
999 IAnyConstPtr pSignalInputValue = pSignal->GetInputValue(signalInputIdx);
1000 CRY_ASSERT(pSignalInputValue);
1001 if(pSignalInputValue)
1003 CDocGraphNodeBase::AddInput(pSignal->GetInputName(signalInputIdx), EScriptGraphPortFlags::None, pSignalInputValue->GetTypeInfo().GetTypeId());
1004 IAnyPtr& pInputValue = m_inputValues[EInput::FirstParam + signalInputIdx];
1005 if(!pInputValue || (pInputValue->GetTypeInfo().GetTypeId() != pSignalInputValue->GetTypeInfo().GetTypeId()))
1007 pInputValue = pSignalInputValue->Clone();
1012 CDocGraphNodeBase::SetName(name.c_str());
1015 //////////////////////////////////////////////////////////////////////////
1016 void CDocGraphBroadcastSignalNode::Serialize(Serialization::IArchive& archive)
1018 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1019 CDocGraphNodeBase::Serialize(archive);
1020 for(size_t inputIdx = EInput::FirstParam, inputCount = CDocGraphNodeBase::GetInputCount(); inputIdx < inputCount; ++ inputIdx)
1022 const char* szName = CDocGraphNodeBase::GetInputName(inputIdx);
1023 archive(*m_inputValues[inputIdx], szName, szName);
1027 //////////////////////////////////////////////////////////////////////////
1028 void CDocGraphBroadcastSignalNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1030 //////////////////////////////////////////////////////////////////////////
1031 void CDocGraphBroadcastSignalNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1033 //////////////////////////////////////////////////////////////////////////
1034 void CDocGraphBroadcastSignalNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1036 switch(sequenceStep)
1038 case EDocGraphSequenceStep::BeginInput:
1040 CompileInputs(compiler);
1041 break;
1046 //////////////////////////////////////////////////////////////////////////
1047 void CDocGraphBroadcastSignalNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1049 DocGraphNodeUtils::CopyInputsToStack(*this, EInput::FirstParam, m_inputValues, compiler);
1050 compiler.BroadcastSignal(CDocGraphNodeBase::GetRefGUID(), CDocGraphNodeBase::GetGUID());
1053 //////////////////////////////////////////////////////////////////////////
1054 CDocGraphGetObjectNode::CDocGraphGetObjectNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1055 : CDocGraphNodeBase(file, graph, guid, "Get Object", EScriptGraphNodeType::GetObject, contextGUID, refGUID, pos)
1057 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1060 //////////////////////////////////////////////////////////////////////////
1061 IAnyConstPtr CDocGraphGetObjectNode::GetCustomOutputDefault() const
1063 return IAnyConstPtr();
1066 //////////////////////////////////////////////////////////////////////////
1067 size_t CDocGraphGetObjectNode::AddCustomOutput(const IAny& value)
1069 return INVALID_INDEX;
1072 //////////////////////////////////////////////////////////////////////////
1073 void CDocGraphGetObjectNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1075 //////////////////////////////////////////////////////////////////////////
1076 size_t CDocGraphGetObjectNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1078 return INVALID_INDEX;
1081 //////////////////////////////////////////////////////////////////////////
1082 void CDocGraphGetObjectNode::RemoveOutput(size_t outputIdx) {}
1084 //////////////////////////////////////////////////////////////////////////
1085 void CDocGraphGetObjectNode::Refresh(const SScriptRefreshParams& params)
1087 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1088 CDocGraphNodeBase::Refresh(params);
1089 CDocGraphNodeBase::AddOutput("Object", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Pull, GetAggregateTypeId<ObjectId>());
1092 //////////////////////////////////////////////////////////////////////////
1093 void CDocGraphGetObjectNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1095 //////////////////////////////////////////////////////////////////////////
1096 void CDocGraphGetObjectNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1098 //////////////////////////////////////////////////////////////////////////
1099 void CDocGraphGetObjectNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1101 switch(sequenceStep)
1103 case EDocGraphSequenceStep::PullOutput:
1105 switch(portIdx)
1107 case EOutput::Object:
1109 CompileOutput(compiler);
1110 break;
1113 break;
1118 //////////////////////////////////////////////////////////////////////////
1119 void CDocGraphGetObjectNode::CompileOutput(IDocGraphNodeCompiler& compiler) const
1121 compiler.GetObject();
1122 compiler.BindOutputToStack(*this, compiler.GetStackSize() - 1, EOutput::Object, MakeAny(ObjectId()));
1125 //////////////////////////////////////////////////////////////////////////
1126 CDocGraphContainerClearNode::CDocGraphContainerClearNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1127 : CDocGraphNodeBase(file, graph, guid, "Container Clear", EScriptGraphNodeType::ContainerClear, contextGUID, refGUID, pos)
1129 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1132 //////////////////////////////////////////////////////////////////////////
1133 IAnyConstPtr CDocGraphContainerClearNode::GetCustomOutputDefault() const
1135 return IAnyConstPtr();
1138 //////////////////////////////////////////////////////////////////////////
1139 size_t CDocGraphContainerClearNode::AddCustomOutput(const IAny& value)
1141 return INVALID_INDEX;
1144 //////////////////////////////////////////////////////////////////////////
1145 void CDocGraphContainerClearNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1147 //////////////////////////////////////////////////////////////////////////
1148 size_t CDocGraphContainerClearNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1150 return INVALID_INDEX;
1153 //////////////////////////////////////////////////////////////////////////
1154 void CDocGraphContainerClearNode::RemoveOutput(size_t outputIdx) {}
1156 //////////////////////////////////////////////////////////////////////////
1157 void CDocGraphContainerClearNode::Refresh(const SScriptRefreshParams& params)
1159 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1161 CDocGraphNodeBase::Refresh(params);
1162 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
1163 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
1165 stack_string name = "Container Clear: ";
1166 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1167 if(pContainer)
1169 name.append(pContainer->GetName());
1172 CDocGraphNodeBase::SetName(name.c_str());
1175 //////////////////////////////////////////////////////////////////////////
1176 void CDocGraphContainerClearNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1178 //////////////////////////////////////////////////////////////////////////
1179 void CDocGraphContainerClearNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1181 //////////////////////////////////////////////////////////////////////////
1182 void CDocGraphContainerClearNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1184 switch(sequenceStep)
1186 case EDocGraphSequenceStep::BeginInput:
1188 CompileInputs(compiler);
1189 break;
1194 //////////////////////////////////////////////////////////////////////////
1195 void CDocGraphContainerClearNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1197 compiler.ContainerClear(CDocGraphNodeBase::GetRefGUID());
1200 //////////////////////////////////////////////////////////////////////////
1201 CDocGraphContainerSizeNode::CDocGraphContainerSizeNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1202 : CDocGraphNodeBase(file, graph, guid, "Container Size", EScriptGraphNodeType::ContainerSize, contextGUID, refGUID, pos)
1204 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1207 //////////////////////////////////////////////////////////////////////////
1208 IAnyConstPtr CDocGraphContainerSizeNode::GetCustomOutputDefault() const
1210 return IAnyConstPtr();
1213 //////////////////////////////////////////////////////////////////////////
1214 size_t CDocGraphContainerSizeNode::AddCustomOutput(const IAny& value)
1216 return INVALID_INDEX;
1219 //////////////////////////////////////////////////////////////////////////
1220 void CDocGraphContainerSizeNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1222 //////////////////////////////////////////////////////////////////////////
1223 size_t CDocGraphContainerSizeNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1225 return INVALID_INDEX;
1228 //////////////////////////////////////////////////////////////////////////
1229 void CDocGraphContainerSizeNode::RemoveOutput(size_t outputIdx) {}
1231 //////////////////////////////////////////////////////////////////////////
1232 void CDocGraphContainerSizeNode::Refresh(const SScriptRefreshParams& params)
1234 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1236 CDocGraphNodeBase::Refresh(params);
1237 CDocGraphNodeBase::AddOutput("Size", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Pull, GetAggregateTypeId<int32>());
1239 stack_string name = "Container Size: ";
1240 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1241 if(pContainer)
1243 name.append(pContainer->GetName());
1246 CDocGraphNodeBase::SetName(name.c_str());
1249 //////////////////////////////////////////////////////////////////////////
1250 void CDocGraphContainerSizeNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1252 //////////////////////////////////////////////////////////////////////////
1253 void CDocGraphContainerSizeNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1255 //////////////////////////////////////////////////////////////////////////
1256 void CDocGraphContainerSizeNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1258 switch(sequenceStep)
1260 case EDocGraphSequenceStep::PullOutput:
1262 switch(portIdx)
1264 case EOutput::Size:
1266 CompileOutput(compiler);
1267 break;
1270 break;
1275 //////////////////////////////////////////////////////////////////////////
1276 void CDocGraphContainerSizeNode::CompileOutput(IDocGraphNodeCompiler& compiler) const
1278 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1279 if(pContainer)
1281 const IEnvTypeDesc* pTypeDesc = gEnv->pSchematyc2->GetEnvRegistry().GetTypeDesc(pContainer->GetTypeGUID());
1282 if(pTypeDesc)
1284 IAnyPtr pValue = pTypeDesc->Create();
1285 if(pValue)
1287 compiler.ContainerSize(CDocGraphNodeBase::GetRefGUID(), *pValue);
1288 compiler.BindOutputToStack(*this, compiler.GetStackSize() - 1, EOutput::Size, MakeAny(int32()));
1294 //////////////////////////////////////////////////////////////////////////
1295 CDocGraphContainerGetNode::CDocGraphContainerGetNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1296 : CDocGraphNodeBase(file, graph, guid, "Container Get", EScriptGraphNodeType::ContainerGet, contextGUID, refGUID, pos)
1297 , m_index(0)
1300 //////////////////////////////////////////////////////////////////////////
1301 IAnyConstPtr CDocGraphContainerGetNode::GetCustomOutputDefault() const
1303 return IAnyConstPtr();
1306 //////////////////////////////////////////////////////////////////////////
1307 size_t CDocGraphContainerGetNode::AddCustomOutput(const IAny& value)
1309 return INVALID_INDEX;
1312 //////////////////////////////////////////////////////////////////////////
1313 void CDocGraphContainerGetNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1315 //////////////////////////////////////////////////////////////////////////
1316 size_t CDocGraphContainerGetNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1318 return INVALID_INDEX;
1321 //////////////////////////////////////////////////////////////////////////
1322 void CDocGraphContainerGetNode::RemoveOutput(size_t outputIdx) {}
1324 //////////////////////////////////////////////////////////////////////////
1325 void CDocGraphContainerGetNode::Refresh(const SScriptRefreshParams& params)
1327 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1329 CDocGraphNodeBase::Refresh(params);
1330 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
1331 CDocGraphNodeBase::AddInput("Index", EScriptGraphPortFlags::None, GetAggregateTypeId<int32>());
1332 CDocGraphNodeBase::AddOutput("True", EScriptGraphPortFlags::Execute);
1333 CDocGraphNodeBase::AddOutput("False", EScriptGraphPortFlags::Execute);
1335 stack_string name = "Container Get: ";
1336 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1337 if(pContainer)
1339 const IEnvTypeDesc* pTypeDesc = gEnv->pSchematyc2->GetEnvRegistry().GetTypeDesc(pContainer->GetTypeGUID());
1340 if(pTypeDesc)
1342 const CAggregateTypeId typeId = pTypeDesc->GetTypeInfo().GetTypeId();
1343 CDocGraphNodeBase::AddOutput("Value", EScriptGraphPortFlags::MultiLink, typeId);
1345 name.append(pContainer->GetName());
1348 CDocGraphNodeBase::SetName(name.c_str());
1351 //////////////////////////////////////////////////////////////////////////
1352 void CDocGraphContainerGetNode::Serialize(Serialization::IArchive& archive)
1354 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1355 CDocGraphNodeBase::Serialize(archive);
1356 archive(m_index, "index", "Index");
1359 //////////////////////////////////////////////////////////////////////////
1360 void CDocGraphContainerGetNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t output) const {}
1362 //////////////////////////////////////////////////////////////////////////
1363 void CDocGraphContainerGetNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t output, const LibFunctionId& functionId) const {}
1365 //////////////////////////////////////////////////////////////////////////
1366 void CDocGraphContainerGetNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1368 switch(sequenceStep)
1370 case EDocGraphSequenceStep::BeginInput:
1372 CompileInputs(compiler);
1373 break;
1375 case EDocGraphSequenceStep::BeginOutput:
1377 switch(portIdx)
1379 case EOutput::True:
1381 CompileTrue(compiler);
1382 break;
1384 case EOutput::False:
1386 CompileFalse(compiler);
1387 break;
1390 break;
1392 case EDocGraphSequenceStep::EndInput:
1394 CompileEnd(compiler);
1395 break;
1400 //////////////////////////////////////////////////////////////////////////
1401 void CDocGraphContainerGetNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1403 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1404 if(pContainer)
1406 const IEnvTypeDesc* pTypeDesc = gEnv->pSchematyc2->GetEnvRegistry().GetTypeDesc(pContainer->GetTypeGUID());
1407 if(pTypeDesc)
1409 IAnyPtr pValue = pTypeDesc->Create();
1410 if(pValue)
1412 const size_t stackPos = compiler.FindInputOnStack(*this, EInput::Index);
1413 if(stackPos != INVALID_INDEX)
1415 compiler.Copy(stackPos, INVALID_INDEX, MakeAny(m_index), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::Index));
1417 else
1419 compiler.Push(MakeAny(m_index), CDocGraphNodeBase::GetGUID(), GetInputName(EInput::Index));
1421 compiler.AddOutputToStack(*this, EOutput::Value, *pValue);
1422 compiler.ContainerGet(CDocGraphNodeBase::GetRefGUID(), *pValue);
1428 //////////////////////////////////////////////////////////////////////////
1429 void CDocGraphContainerGetNode::CompileTrue(IDocGraphNodeCompiler& compiler) const
1431 compiler.BranchIfZero(*this, EMarker::False);
1432 compiler.Pop(1);
1433 compiler.CreateStackFrame(*this, EStackFrame::True);
1436 //////////////////////////////////////////////////////////////////////////
1437 void CDocGraphContainerGetNode::CompileFalse(IDocGraphNodeCompiler& compiler) const
1439 const IScriptContainer* pContainer = CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1440 if(pContainer)
1442 const IEnvTypeDesc* pTypeDesc = gEnv->pSchematyc2->GetEnvRegistry().GetTypeDesc(pContainer->GetTypeGUID());
1443 if(pTypeDesc)
1445 IAnyPtr pValue = pTypeDesc->Create();
1446 if(pValue)
1448 compiler.CollapseStackFrame(*this, EStackFrame::True);
1449 compiler.Branch(*this, EMarker::End);
1450 compiler.CreateMarker(*this, EMarker::False);
1451 compiler.Pop(1);
1452 compiler.Push(*pValue, SGUID(), "");
1453 compiler.CreateStackFrame(*this, EStackFrame::False);
1459 //////////////////////////////////////////////////////////////////////////
1460 void CDocGraphContainerGetNode::CompileEnd(IDocGraphNodeCompiler& compiler) const
1462 compiler.CollapseStackFrame(*this, EStackFrame::False);
1463 compiler.CreateMarker(*this, EMarker::End);
1466 //////////////////////////////////////////////////////////////////////////
1467 CDocGraphStartTimerNode::CDocGraphStartTimerNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1468 : CDocGraphNodeBase(file, graph, guid, "Start Timer", EScriptGraphNodeType::StartTimer, contextGUID, refGUID, pos)
1470 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1473 //////////////////////////////////////////////////////////////////////////
1474 IAnyConstPtr CDocGraphStartTimerNode::GetCustomOutputDefault() const
1476 return IAnyConstPtr();
1479 //////////////////////////////////////////////////////////////////////////
1480 size_t CDocGraphStartTimerNode::AddCustomOutput(const IAny& value)
1482 return INVALID_INDEX;
1485 //////////////////////////////////////////////////////////////////////////
1486 void CDocGraphStartTimerNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1488 //////////////////////////////////////////////////////////////////////////
1489 size_t CDocGraphStartTimerNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1491 return INVALID_INDEX;
1494 //////////////////////////////////////////////////////////////////////////
1495 void CDocGraphStartTimerNode::RemoveOutput(size_t outputIdx) {}
1497 //////////////////////////////////////////////////////////////////////////
1498 void CDocGraphStartTimerNode::Refresh(const SScriptRefreshParams& params)
1500 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1501 CDocGraphNodeBase::Refresh(params);
1502 const IScriptFile& file = CDocGraphNodeBase::GetFile();
1503 const SGUID refGUID = CDocGraphNodeBase::GetRefGUID();
1504 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
1505 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
1506 stack_string name = "Start Timer: ";
1507 const IScriptTimer* pTimer = file.GetTimer(refGUID);
1508 if(pTimer)
1510 name.append(pTimer->GetName());
1512 CDocGraphNodeBase::SetName(name.c_str());
1515 //////////////////////////////////////////////////////////////////////////
1516 void CDocGraphStartTimerNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1518 //////////////////////////////////////////////////////////////////////////
1519 void CDocGraphStartTimerNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1521 //////////////////////////////////////////////////////////////////////////
1522 void CDocGraphStartTimerNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1524 switch(sequenceStep)
1526 case EDocGraphSequenceStep::BeginInput:
1528 CompileInputs(compiler);
1529 break;
1534 //////////////////////////////////////////////////////////////////////////
1535 void CDocGraphStartTimerNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1537 const IScriptTimer* pTimer = CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
1538 CRY_ASSERT(pTimer);
1539 if(pTimer)
1541 compiler.StartTimer(pTimer->GetGUID(), CDocGraphNodeBase::GetGUID());
1545 //////////////////////////////////////////////////////////////////////////
1546 CDocGraphStopTimerNode::CDocGraphStopTimerNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1547 : CDocGraphNodeBase(file, graph, guid, "Stop Timer", EScriptGraphNodeType::StopTimer, contextGUID, refGUID, pos)
1549 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1552 //////////////////////////////////////////////////////////////////////////
1553 IAnyConstPtr CDocGraphStopTimerNode::GetCustomOutputDefault() const
1555 return IAnyConstPtr();
1558 //////////////////////////////////////////////////////////////////////////
1559 size_t CDocGraphStopTimerNode::AddCustomOutput(const IAny& value)
1561 return INVALID_INDEX;
1564 //////////////////////////////////////////////////////////////////////////
1565 void CDocGraphStopTimerNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1567 //////////////////////////////////////////////////////////////////////////
1568 size_t CDocGraphStopTimerNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1570 return INVALID_INDEX;
1573 //////////////////////////////////////////////////////////////////////////
1574 void CDocGraphStopTimerNode::RemoveOutput(size_t outputIdx) {}
1576 //////////////////////////////////////////////////////////////////////////
1577 void CDocGraphStopTimerNode::Refresh(const SScriptRefreshParams& params)
1579 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1580 CDocGraphNodeBase::Refresh(params);
1581 const IScriptFile& file = CDocGraphNodeBase::GetFile();
1582 const SGUID refGUID = CDocGraphNodeBase::GetRefGUID();
1583 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
1584 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
1585 stack_string name = "Stop Timer: ";
1586 const IScriptTimer* pTimer = file.GetTimer(refGUID);
1587 if(pTimer)
1589 name.append(pTimer->GetName());
1591 CDocGraphNodeBase::SetName(name.c_str());
1594 //////////////////////////////////////////////////////////////////////////
1595 void CDocGraphStopTimerNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1597 //////////////////////////////////////////////////////////////////////////
1598 void CDocGraphStopTimerNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1600 //////////////////////////////////////////////////////////////////////////
1601 void CDocGraphStopTimerNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1603 switch(sequenceStep)
1605 case EDocGraphSequenceStep::BeginInput:
1607 CompileInputs(compiler);
1608 break;
1613 //////////////////////////////////////////////////////////////////////////
1614 void CDocGraphStopTimerNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1616 const IScriptTimer* pTimer = CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
1617 CRY_ASSERT(pTimer);
1618 if(pTimer)
1620 compiler.StopTimer(pTimer->GetGUID(), CDocGraphNodeBase::GetGUID());
1624 //////////////////////////////////////////////////////////////////////////
1625 CDocGraphResetTimerNode::CDocGraphResetTimerNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1626 : CDocGraphNodeBase(file, graph, guid, "Reset Timer", EScriptGraphNodeType::ResetTimer, contextGUID, refGUID, pos)
1628 Refresh(SScriptRefreshParams(EScriptRefreshReason::Other));
1631 //////////////////////////////////////////////////////////////////////////
1632 IAnyConstPtr CDocGraphResetTimerNode::GetCustomOutputDefault() const
1634 return IAnyConstPtr();
1637 //////////////////////////////////////////////////////////////////////////
1638 size_t CDocGraphResetTimerNode::AddCustomOutput(const IAny& value)
1640 return INVALID_INDEX;
1643 //////////////////////////////////////////////////////////////////////////
1644 void CDocGraphResetTimerNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1646 //////////////////////////////////////////////////////////////////////////
1647 size_t CDocGraphResetTimerNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1649 return INVALID_INDEX;
1652 //////////////////////////////////////////////////////////////////////////
1653 void CDocGraphResetTimerNode::RemoveOutput(size_t outputIdx) {}
1655 //////////////////////////////////////////////////////////////////////////
1656 void CDocGraphResetTimerNode::Refresh(const SScriptRefreshParams& params)
1658 CRY_PROFILE_FUNCTION(PROFILE_LOADING_ONLY);
1659 CDocGraphNodeBase::Refresh(params);
1660 const IScriptFile& file = CDocGraphNodeBase::GetFile();
1661 const SGUID refGUID = CDocGraphNodeBase::GetRefGUID();
1662 CDocGraphNodeBase::AddInput("In", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::Execute);
1663 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::Execute);
1664 stack_string name = "Reset Timer: ";
1665 const IScriptTimer* pTimer = file.GetTimer(refGUID);
1666 if(pTimer)
1668 name.append(pTimer->GetName());
1670 CDocGraphNodeBase::SetName(name.c_str());
1673 //////////////////////////////////////////////////////////////////////////
1674 void CDocGraphResetTimerNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1676 //////////////////////////////////////////////////////////////////////////
1677 void CDocGraphResetTimerNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1679 //////////////////////////////////////////////////////////////////////////
1680 void CDocGraphResetTimerNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1682 switch(sequenceStep)
1684 case EDocGraphSequenceStep::BeginInput:
1686 CompileInputs(compiler);
1687 break;
1692 //////////////////////////////////////////////////////////////////////////
1693 void CDocGraphResetTimerNode::CompileInputs(IDocGraphNodeCompiler& compiler) const
1695 const IScriptTimer* pTimer = CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
1696 CRY_ASSERT(pTimer);
1697 if(pTimer)
1699 compiler.ResetTimer(pTimer->GetGUID(), CDocGraphNodeBase::GetGUID());
1703 //////////////////////////////////////////////////////////////////////////
1704 CDocGraphBeginStateNode::CDocGraphBeginStateNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1705 : CDocGraphNodeBase(file, graph, guid, "Begin", EScriptGraphNodeType::BeginState, contextGUID, refGUID, pos)
1707 CDocGraphNodeBase::AddOutput("Out", EScriptGraphPortFlags::BeginSequence | EScriptGraphPortFlags::Execute);
1710 //////////////////////////////////////////////////////////////////////////
1711 IAnyConstPtr CDocGraphBeginStateNode::GetCustomOutputDefault() const
1713 return IAnyConstPtr();
1716 //////////////////////////////////////////////////////////////////////////
1717 size_t CDocGraphBeginStateNode::AddCustomOutput(const IAny& value)
1719 return INVALID_INDEX;
1722 //////////////////////////////////////////////////////////////////////////
1723 void CDocGraphBeginStateNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1725 //////////////////////////////////////////////////////////////////////////
1726 size_t CDocGraphBeginStateNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1728 return INVALID_INDEX;
1731 //////////////////////////////////////////////////////////////////////////
1732 void CDocGraphBeginStateNode::RemoveOutput(size_t outputIdx) {}
1734 //////////////////////////////////////////////////////////////////////////
1735 void CDocGraphBeginStateNode::Refresh(const SScriptRefreshParams& params) {}
1737 //////////////////////////////////////////////////////////////////////////
1738 void CDocGraphBeginStateNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const
1740 preCompiler.AddFunctionOutput("Result", nullptr, MakeAny(int32(ELibTransitionResult::Continue)));
1741 preCompiler.AddFunctionOutput("State", nullptr, MakeAny(int32(0)));
1744 //////////////////////////////////////////////////////////////////////////
1745 void CDocGraphBeginStateNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const
1747 if(ILibStateMachine* pLibStateMachine = linker.GetLibStateMachine())
1749 pLibStateMachine->SetBeginFunction(functionId);
1753 //////////////////////////////////////////////////////////////////////////
1754 void CDocGraphBeginStateNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const {}
1756 //////////////////////////////////////////////////////////////////////////
1757 CDocGraphEndStateNode::CDocGraphEndStateNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1758 : CDocGraphNodeBase(file, graph, guid, "End", EScriptGraphNodeType::EndState, contextGUID, refGUID, pos)
1760 CDocGraphNodeBase::AddInput("Success", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::EndSequence | EScriptGraphPortFlags::Execute);
1761 CDocGraphNodeBase::AddInput("Failure", EScriptGraphPortFlags::MultiLink | EScriptGraphPortFlags::EndSequence | EScriptGraphPortFlags::Execute);
1764 //////////////////////////////////////////////////////////////////////////
1765 IAnyConstPtr CDocGraphEndStateNode::GetCustomOutputDefault() const
1767 return IAnyConstPtr();
1770 //////////////////////////////////////////////////////////////////////////
1771 size_t CDocGraphEndStateNode::AddCustomOutput(const IAny& value)
1773 return INVALID_INDEX;
1776 //////////////////////////////////////////////////////////////////////////
1777 void CDocGraphEndStateNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) {}
1779 //////////////////////////////////////////////////////////////////////////
1780 size_t CDocGraphEndStateNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1782 return INVALID_INDEX;
1785 //////////////////////////////////////////////////////////////////////////
1786 void CDocGraphEndStateNode::RemoveOutput(size_t outputIdx) {}
1788 //////////////////////////////////////////////////////////////////////////
1789 void CDocGraphEndStateNode::Refresh(const SScriptRefreshParams& params) {}
1791 //////////////////////////////////////////////////////////////////////////
1792 void CDocGraphEndStateNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const {}
1794 //////////////////////////////////////////////////////////////////////////
1795 void CDocGraphEndStateNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const {}
1797 //////////////////////////////////////////////////////////////////////////
1798 void CDocGraphEndStateNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const
1800 switch(sequenceStep)
1802 case EDocGraphSequenceStep::BeginInput:
1804 End(compiler, portIdx == EInput::Success);
1805 break;
1810 //////////////////////////////////////////////////////////////////////////
1811 void CDocGraphEndStateNode::End(IDocGraphNodeCompiler& compiler, bool bSuccess) const
1813 compiler.Set(0, MakeAny(int32(bSuccess ? ELibTransitionResult::EndSuccess : ELibTransitionResult::EndFailure)), SGUID(), "");
1814 compiler.Set(1, MakeAny(int32(~0)), SGUID(), "");
1815 compiler.Return(CDocGraphNodeBase::GetGUID());
1818 //////////////////////////////////////////////////////////////////////////
1819 // Comment Node
1820 CDocGraphCommentNode::CDocGraphCommentNode(IScriptFile& file, IDocGraph& graph, const SGUID& guid, const SGUID& contextGUID, const SGUID& refGUID, Vec2 pos)
1821 : CDocGraphNodeBase(file, graph, guid, "Comment", EScriptGraphNodeType::Comment, contextGUID, refGUID, pos)
1825 //////////////////////////////////////////////////////////////////////////
1826 const char* CDocGraphCommentNode::GetComment() const
1828 return m_str.c_str();
1831 //////////////////////////////////////////////////////////////////////////
1832 IAnyConstPtr CDocGraphCommentNode::GetCustomOutputDefault() const
1834 return IAnyConstPtr();
1837 //////////////////////////////////////////////////////////////////////////
1838 size_t CDocGraphCommentNode::AddCustomOutput(const IAny& value)
1840 return INVALID_INDEX;
1843 //////////////////////////////////////////////////////////////////////////
1844 void CDocGraphCommentNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator& enumerator) { }
1846 //////////////////////////////////////////////////////////////////////////
1847 size_t CDocGraphCommentNode::AddOptionalOutput(const char* szName, EScriptGraphPortFlags flags, const CAggregateTypeId& typeId)
1849 return INVALID_INDEX;
1852 //////////////////////////////////////////////////////////////////////////
1853 void CDocGraphCommentNode::RemoveOutput(size_t outputIdx) { }
1855 //////////////////////////////////////////////////////////////////////////
1856 void CDocGraphCommentNode::PreCompileSequence(IDocGraphSequencePreCompiler& preCompiler, size_t outputIdx) const { }
1858 //////////////////////////////////////////////////////////////////////////
1859 void CDocGraphCommentNode::LinkSequence(IDocGraphSequenceLinker& linker, size_t outputIdx, const LibFunctionId& functionId) const { }
1861 //////////////////////////////////////////////////////////////////////////
1862 void CDocGraphCommentNode::Compile(IDocGraphNodeCompiler& compiler, EDocGraphSequenceStep sequenceStep, size_t portIdx) const { }
1864 //////////////////////////////////////////////////////////////////////////
1865 void CDocGraphCommentNode::Serialize(Serialization::IArchive& archive)
1867 CDocGraphNodeBase::Serialize(archive);
1868 archive(m_str, "str", "Comment Contents");