1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
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"
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
)
35 //////////////////////////////////////////////////////////////////////////
36 void CDocGraphBeginNode::EnumerateOptionalOutputs(const ScriptGraphNodeOptionalOutputEnumerator
& enumerator
) {}
38 //////////////////////////////////////////////////////////////////////////
39 size_t CDocGraphBeginNode::AddOptionalOutput(const char* szName
, EScriptGraphPortFlags flags
, const CAggregateTypeId
& typeId
)
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
);
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
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
);
82 preCompiler
.AddFunctionInput(graph
.GetInputName(graphInputIdx
), nullptr, *pGraphInputValue
);
85 if(graph
.GetType() == EScriptGraphType::Condition
)
87 preCompiler
.AddFunctionOutput("Result", nullptr, MakeAny(bool(false)));
91 for(size_t graphOutputIdx
= 0, graphOutputCount
= graph
.GetOutputCount(); graphOutputIdx
< graphOutputCount
; ++ graphOutputIdx
)
93 IAnyConstPtr pGraphOutputValue
= graph
.GetOutputValue(graphOutputIdx
);
94 CRY_ASSERT(pGraphOutputValue
);
97 preCompiler
.AddFunctionOutput(graph
.GetOutputName(graphOutputIdx
), nullptr, *pGraphOutputValue
);
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
114 case EDocGraphSequenceStep::BeginInput
:
116 BindOutputs(compiler
);
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();
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
)
213 for(size_t outputIdx
= EOutput::FirstParam
, outputCount
= CDocGraphNodeBase::GetOutputCount(); outputIdx
< outputCount
; ++ outputIdx
)
215 preCompiler
.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx
), nullptr, *m_outputValues
[outputIdx
]);
222 //////////////////////////////////////////////////////////////////////////
223 void CDocGraphBeginConstructorNode::LinkSequence(IDocGraphSequenceLinker
& linker
, size_t outputIdx
, const LibFunctionId
& functionId
) const
229 const IDocGraph
& graph
= CDocGraphNodeBase::GetGraph();
230 linker
.CreateConstructor(graph
.GetGUID(), functionId
);
236 //////////////////////////////////////////////////////////////////////////
237 void CDocGraphBeginConstructorNode::Compile(IDocGraphNodeCompiler
& compiler
, EDocGraphSequenceStep sequenceStep
, size_t portIdx
) const
241 case EDocGraphSequenceStep::BeginInput
:
243 BindOutputs(compiler
);
249 //////////////////////////////////////////////////////////////////////////
250 void CDocGraphBeginConstructorNode::BindOutputs(IDocGraphNodeCompiler
& compiler
) const
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();
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
340 for(size_t outputIdx
= EOutput::FirstParam
, outputCount
= CDocGraphNodeBase::GetOutputCount(); outputIdx
< outputCount
; ++ outputIdx
)
342 preCompiler
.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx
), nullptr, *m_outputValues
[outputIdx
]);
349 //////////////////////////////////////////////////////////////////////////
350 void CDocGraphBeginDestructorNode::LinkSequence(IDocGraphSequenceLinker
& linker
, size_t outputIdx
, const LibFunctionId
& functionId
) const
356 const IDocGraph
& graph
= CDocGraphNodeBase::GetGraph();
357 linker
.CreateDestructor(graph
.GetGUID(), functionId
);
363 //////////////////////////////////////////////////////////////////////////
364 void CDocGraphBeginDestructorNode::Compile(IDocGraphNodeCompiler
& compiler
, EDocGraphSequenceStep sequenceStep
, size_t portIdx
) const
368 case EDocGraphSequenceStep::BeginInput
:
370 BindOutputs(compiler
);
376 //////////////////////////////////////////////////////////////////////////
377 void CDocGraphBeginDestructorNode::BindOutputs(IDocGraphNodeCompiler
& compiler
) const
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
464 for(size_t outputIdx
= EOutput::FirstParam
, outputCount
= CDocGraphNodeBase::GetOutputCount(); outputIdx
< outputCount
; ++ outputIdx
)
466 preCompiler
.AddFunctionInput(CDocGraphNodeBase::GetOutputName(outputIdx
), nullptr, *m_outputValues
[outputIdx
]);
473 //////////////////////////////////////////////////////////////////////////
474 void CDocGraphBeginSignalReceiverNode::LinkSequence(IDocGraphSequenceLinker
& linker
, size_t outputIdx
, const LibFunctionId
& functionId
) const
480 const IDocGraph
& graph
= CDocGraphNodeBase::GetGraph();
481 linker
.CreateSignalReceiver(graph
.GetGUID(), graph
.GetContextGUID(), functionId
);
487 //////////////////////////////////////////////////////////////////////////
488 void CDocGraphBeginSignalReceiverNode::Compile(IDocGraphNodeCompiler
& compiler
, EDocGraphSequenceStep sequenceStep
, size_t portIdx
) const
492 case EDocGraphSequenceStep::BeginInput
:
494 BindOutputs(compiler
);
500 //////////////////////////////////////////////////////////////////////////
501 void CDocGraphBeginSignalReceiverNode::BindOutputs(IDocGraphNodeCompiler
& compiler
) const
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
);
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
);
562 Serialization::StringList typeNames
;
564 typeNames
.reserve(64);
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");
590 archive(*m_pValue
, "value", "Value");
595 if(archive
.isInput())
597 CAggregateTypeId typeId
;
598 archive(typeId
, "typeId");
601 else if(archive
.isOutput())
603 archive(m_typeId
, "typeId");
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
624 case EDocGraphSequenceStep::PullOutput
:
630 CompileOutput(compiler
);
639 //////////////////////////////////////////////////////////////////////////
640 CDocGraphMakeEnumerationNode::STypeVisitor::STypeVisitor(TypeIds
& _typeIds
, Serialization::StringList
& _typeNames
)
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
)
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
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
)
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
754 case EDocGraphSequenceStep::BeginInput
:
760 CompileInputs(compiler
);
765 CompileBreak(compiler
);
771 case EDocGraphSequenceStep::BeginOutput
:
777 CompileLoop(compiler
);
782 CompileEnd(compiler
);
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
));
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
));
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
;
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
934 case EDocGraphSequenceStep::BeginInput
:
936 CompileInputs(compiler
);
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
;
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
);
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
:
1107 case EOutput::Object
:
1109 CompileOutput(compiler
);
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());
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
);
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());
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
:
1266 CompileOutput(compiler
);
1275 //////////////////////////////////////////////////////////////////////////
1276 void CDocGraphContainerSizeNode::CompileOutput(IDocGraphNodeCompiler
& compiler
) const
1278 const IScriptContainer
* pContainer
= CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1281 const IEnvTypeDesc
* pTypeDesc
= gEnv
->pSchematyc2
->GetEnvRegistry().GetTypeDesc(pContainer
->GetTypeGUID());
1284 IAnyPtr pValue
= pTypeDesc
->Create();
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
)
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());
1339 const IEnvTypeDesc
* pTypeDesc
= gEnv
->pSchematyc2
->GetEnvRegistry().GetTypeDesc(pContainer
->GetTypeGUID());
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
);
1375 case EDocGraphSequenceStep::BeginOutput
:
1381 CompileTrue(compiler
);
1384 case EOutput::False
:
1386 CompileFalse(compiler
);
1392 case EDocGraphSequenceStep::EndInput
:
1394 CompileEnd(compiler
);
1400 //////////////////////////////////////////////////////////////////////////
1401 void CDocGraphContainerGetNode::CompileInputs(IDocGraphNodeCompiler
& compiler
) const
1403 const IScriptContainer
* pContainer
= CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1406 const IEnvTypeDesc
* pTypeDesc
= gEnv
->pSchematyc2
->GetEnvRegistry().GetTypeDesc(pContainer
->GetTypeGUID());
1409 IAnyPtr pValue
= pTypeDesc
->Create();
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
));
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
);
1433 compiler
.CreateStackFrame(*this, EStackFrame::True
);
1436 //////////////////////////////////////////////////////////////////////////
1437 void CDocGraphContainerGetNode::CompileFalse(IDocGraphNodeCompiler
& compiler
) const
1439 const IScriptContainer
* pContainer
= CDocGraphNodeBase::GetFile().GetContainer(CDocGraphNodeBase::GetRefGUID());
1442 const IEnvTypeDesc
* pTypeDesc
= gEnv
->pSchematyc2
->GetEnvRegistry().GetTypeDesc(pContainer
->GetTypeGUID());
1445 IAnyPtr pValue
= pTypeDesc
->Create();
1448 compiler
.CollapseStackFrame(*this, EStackFrame::True
);
1449 compiler
.Branch(*this, EMarker::End
);
1450 compiler
.CreateMarker(*this, EMarker::False
);
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
);
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
);
1534 //////////////////////////////////////////////////////////////////////////
1535 void CDocGraphStartTimerNode::CompileInputs(IDocGraphNodeCompiler
& compiler
) const
1537 const IScriptTimer
* pTimer
= CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
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
);
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
);
1613 //////////////////////////////////////////////////////////////////////////
1614 void CDocGraphStopTimerNode::CompileInputs(IDocGraphNodeCompiler
& compiler
) const
1616 const IScriptTimer
* pTimer
= CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
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
);
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
);
1692 //////////////////////////////////////////////////////////////////////////
1693 void CDocGraphResetTimerNode::CompileInputs(IDocGraphNodeCompiler
& compiler
) const
1695 const IScriptTimer
* pTimer
= CDocGraphNodeBase::GetFile().GetTimer(CDocGraphNodeBase::GetRefGUID());
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
);
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 //////////////////////////////////////////////////////////////////////////
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");