Plasma Engine  2.0
Loading...
Searching...
No Matches
VisualScriptGraph.h
1#pragma once
2
3#include <EditorPluginVisualScript/VisualScriptGraph/VisualScriptNodeRegistry.h>
4#include <ToolsFoundation/NodeObject/DocumentNodeManager.h>
5
6class plVisualScriptPin : public plPin
7{
8 PL_ADD_DYNAMIC_REFLECTION(plVisualScriptPin, plPin);
9
10public:
11 plVisualScriptPin(Type type, plStringView sName, const plVisualScriptNodeRegistry::PinDesc& pinDesc, const plDocumentObject* pObject, plUInt32 uiDataPinIndex, plUInt32 uiElementIndex);
13
14 PL_ALWAYS_INLINE bool IsExecutionPin() const { return m_pDesc->IsExecutionPin(); }
15 PL_ALWAYS_INLINE bool IsDataPin() const { return m_pDesc->IsDataPin(); }
16
17 PL_ALWAYS_INLINE const plRTTI* GetDataType() const { return m_pDesc->m_pDataType; }
18 PL_ALWAYS_INLINE plVisualScriptDataType::Enum GetScriptDataType() const { return m_pDesc->m_ScriptDataType; }
19 plVisualScriptDataType::Enum GetResolvedScriptDataType() const;
20 plStringView GetDataTypeName() const;
21 PL_ALWAYS_INLINE plUInt32 GetDataPinIndex() const { return m_uiDataPinIndex; }
22 PL_ALWAYS_INLINE plUInt32 GetElementIndex() const { return m_uiElementIndex; }
23 PL_ALWAYS_INLINE bool IsRequired() const { return m_pDesc->m_bRequired; }
24 PL_ALWAYS_INLINE bool HasDynamicPinProperty() const { return m_pDesc->m_sDynamicPinProperty.IsEmpty() == false; }
25 PL_ALWAYS_INLINE bool SplitExecution() const { return m_pDesc->m_bSplitExecution; }
26 PL_ALWAYS_INLINE bool ReplaceWithArray() const { return m_pDesc->m_bReplaceWithArray; }
27 PL_ALWAYS_INLINE bool NeedsTypeDeduction() const { return m_pDesc->m_DeductTypeFunc != nullptr; }
28
29 PL_ALWAYS_INLINE const plHashedString& GetDynamicPinProperty() const { return m_pDesc->m_sDynamicPinProperty; }
30 PL_ALWAYS_INLINE plVisualScriptNodeRegistry::PinDesc::DeductTypeFunc GetDeductTypeFunc() const { return m_pDesc->m_DeductTypeFunc; }
31
32 bool CanConvertTo(const plVisualScriptPin& targetPin, bool bUseResolvedDataTypes = true) const;
33
34private:
35 const plVisualScriptNodeRegistry::PinDesc* m_pDesc = nullptr;
36 plUInt32 m_uiDataPinIndex = 0;
37 plUInt32 m_uiElementIndex = 0;
38};
39
41{
42public:
45
46 plHashedString GetScriptBaseClass() const;
47 bool IsFilteredByBaseClass(const plRTTI* pNodeType, const plVisualScriptNodeRegistry::NodeDesc& nodeDesc, const plHashedString& sBaseClass, bool bLogWarning = false) const;
48
49 plVisualScriptDataType::Enum GetVariableType(plTempHashedString sName) const;
50 plResult GetVariableDefaultValue(plTempHashedString sName, plVariant& out_value) const;
51
52 void GetInputExecutionPins(const plDocumentObject* pObject, plDynamicArray<const plVisualScriptPin*>& out_pins) const;
53 void GetOutputExecutionPins(const plDocumentObject* pObject, plDynamicArray<const plVisualScriptPin*>& out_pins) const;
54
55 void GetInputDataPins(const plDocumentObject* pObject, plDynamicArray<const plVisualScriptPin*>& out_pins) const;
56 void GetOutputDataPins(const plDocumentObject* pObject, plDynamicArray<const plVisualScriptPin*>& out_pins) const;
57
58 void GetEntryNodes(const plDocumentObject* pObject, plDynamicArray<const plDocumentObject*>& out_entryNodes) const;
59
60 static plStringView GetNiceTypeName(const plDocumentObject* pObject);
61 static plStringView GetNiceFunctionName(const plDocumentObject* pObject);
62
63 plVisualScriptDataType::Enum GetDeductedType(const plVisualScriptPin& pin) const;
64 plVisualScriptDataType::Enum GetDeductedType(const plDocumentObject* pObject) const;
65
66 bool IsCoroutine(const plDocumentObject* pObject) const;
67 bool IsLoop(const plDocumentObject* pObject) const;
68
69 plEvent<const plDocumentObject*> m_NodeChangedEvent;
70
71private:
72 virtual bool InternalIsNode(const plDocumentObject* pObject) const override;
73 virtual bool InternalIsDynamicPinProperty(const plDocumentObject* pObject, const plAbstractProperty* pProp) const override;
74 virtual plStatus InternalCanConnect(const plPin& source, const plPin& target, CanConnectResult& out_Result) const override;
75
76 virtual void InternalCreatePins(const plDocumentObject* pObject, NodeInternal& node) override;
77
78 virtual void GetNodeCreationTemplates(plDynamicArray<plNodeCreationTemplate>& out_templates) const override;
79
80 void NodeEventsHandler(const plDocumentNodeManagerEvent& e);
81 void PropertyEventsHandler(const plDocumentObjectPropertyEvent& e);
82
83 friend class plVisualScriptPin;
84 void RemoveDeductedPinType(const plVisualScriptPin& pin);
85 void DeductNodeTypeAndAllPinTypes(const plDocumentObject* pObject, const plPin* pDisconnectedPin = nullptr);
86 void UpdateCoroutine(const plDocumentObject* pTargetNode, const plConnection& changedConnection, bool bIsAboutToDisconnect = false);
87 bool IsConnectedToCoroutine(const plDocumentObject* pEntryNode, const plConnection& changedConnection, bool bIsAboutToDisconnect = false) const;
88
91 plHashSet<const plDocumentObject*> m_CoroutineObjects;
92
93 mutable plDynamicArray<plNodePropertyValue> m_PropertyValues;
94 mutable plDeque<plString> m_VariableNodeTypeNames;
95};
This is the base interface for all properties in the reflection system. It provides enough informatio...
Definition AbstractProperty.h:150
Definition DocumentNodeManager.h:37
Definition Deque.h:270
Definition DocumentNodeManager.h:141
CanConnectResult
Definition DocumentNodeManager.h:165
Definition DocumentObjectBase.h:11
Definition DynamicArray.h:81
Definition Event.h:177
Definition HashSet.h:191
Definition HashTable.h:333
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
bool IsEmpty() const
Returns whether the string is empty.
Definition HashedString.cpp:121
Definition DocumentNodeManager.h:59
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
A class to use together with plHashedString for quick comparisons with temporary strings that need no...
Definition HashedString.h:151
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Definition VisualScriptGraph.h:41
virtual void GetNodeCreationTemplates(plDynamicArray< plNodeCreationTemplate > &out_templates) const override
For node documents this function is called instead of GetCreateableTypes to get a list for the node c...
Definition VisualScriptGraph.cpp:455
Definition VisualScriptGraph.h:7
Definition DocumentNodeManager.h:210
Definition DocumentNodeManager.h:12
Used by plDocumentObjectManager::m_PropertyEvents.
Definition DocumentObjectManager.h:77
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
An plResult with an additional message for the reason of failure.
Definition Status.h:12
Definition VisualScriptNodeRegistry.h:36
Definition VisualScriptNodeRegistry.h:15