3#include <Core/Scripting/ScriptCoroutine.h>
4#include <VisualScriptPlugin/Runtime/VisualScriptData.h>
13 struct PL_VISUALSCRIPTPLUGIN_DLL
Type
15 using StorageType = plUInt8;
23 MessageHandler_Coroutine,
44 Builtin_ReverseForEachLoop,
69 Builtin_String_Format,
70 Builtin_ToHashedString,
72 Builtin_Variant_ConvertTo,
75 Builtin_Array_GetElement,
76 Builtin_Array_SetElement,
77 Builtin_Array_GetCount,
78 Builtin_Array_IsEmpty,
80 Builtin_Array_Contains,
81 Builtin_Array_IndexOf,
83 Builtin_Array_PushBack,
85 Builtin_Array_RemoveAt,
87 Builtin_TryGetComponentOfBaseType,
89 Builtin_StartCoroutine,
90 Builtin_StopCoroutine,
91 Builtin_StopAllCoroutines,
102 PL_ALWAYS_INLINE
static bool IsEntry(Enum type) {
return type >= EntryCall && type <= MessageHandler_Coroutine; }
103 PL_ALWAYS_INLINE
static bool IsLoop(Enum type) {
return type >= Builtin_WhileLoop && type <= Builtin_ReverseForEachLoop; }
105 PL_ALWAYS_INLINE
static bool MakesOuterCoroutine(Enum type) {
return type == InplaceCoroutine || (type >= Builtin_WaitForAll && type <= Builtin_Yield); }
107 PL_ALWAYS_INLINE
static bool IsBuiltin(Enum type) {
return type > FirstBuiltin && type < LastBuiltin; }
109 static Enum GetConversionType(plVisualScriptDataType::Enum targetDataType);
111 static const char* GetName(Enum type);
140 template <
typename T, plUInt32 Size>
145 T m_Embedded[Size] = {};
149 static void AddAdditionalDataSize(
plArrayPtr<const T> a, plUInt32& inout_uiAdditionalDataSize);
150 static void AddAdditionalDataSize(plUInt32 uiSize, plUInt32 uiAlignment, plUInt32& inout_uiAdditionalDataSize);
152 T* Init(plUInt8 uiCount, plUInt8*& inout_pAdditionalData);
153 plResult ReadFromStream(plUInt8& out_uiCount,
plStreamReader& inout_stream, plUInt8*& inout_pAdditionalData);
169 static PL_ALWAYS_INLINE
ExecResult Completed() {
return {0}; }
170 static PL_ALWAYS_INLINE
ExecResult RunNext(
int iExecSlot) {
return {iExecSlot}; }
171 static PL_ALWAYS_INLINE
ExecResult ContinueLater(
plTime maxDelay) {
return {State::ContinueLater, maxDelay}; }
172 static PL_ALWAYS_INLINE
ExecResult Error() {
return {State::Error}; }
174 int m_NextExecAndState = 0;
181 using ExecutionIndicesArray = EmbeddedArrayOrPointer<plUInt16, 4>;
182 using InputDataOffsetsArray = EmbeddedArrayOrPointer<DataOffset, 4>;
183 using OutputDataOffsetsArray = EmbeddedArrayOrPointer<DataOffset, 2>;
184 using UserDataArray = EmbeddedArrayOrPointer<plUInt32, 4>;
188 ExecuteFunction m_Function =
nullptr;
189#if PL_ENABLED(PL_PLATFORM_32BIT)
190 plUInt32 m_uiPadding = 0;
199 plUInt8 m_NumExecutionIndices;
200 plUInt8 m_NumInputDataOffsets;
201 plUInt8 m_NumOutputDataOffsets;
203 plUInt16 m_UserDataByteSize;
205 plUInt8 m_Reserved = 0;
207 plUInt32 GetExecutionIndex(plUInt32 uiSlot)
const;
208 DataOffset GetInputDataOffset(plUInt32 uiSlot)
const;
209 DataOffset GetOutputDataOffset(plUInt32 uiSlot)
const;
211 template <
typename T>
212 const T& GetUserData()
const;
214 template <
typename T>
215 T& InitUserData(plUInt8*& inout_pAdditionalData, plUInt32 uiByteSize =
sizeof(T));
218 const Node* GetNode(plUInt32 uiIndex)
const;
220 bool IsCoroutine()
const;
249 template <
typename T>
250 const T& GetData(
DataOffset dataOffset)
const;
252 template <
typename T>
255 template <
typename T>
256 void SetData(
DataOffset dataOffset,
const T& value);
260 template <
typename T>
261 void SetPointerData(
DataOffset dataOffset, T ptr,
const plRTTI* pType =
nullptr);
269 plTime GetDeltaTimeSinceLastExecution();
274 plUInt32 m_uiCurrentNode = 0;
275 plUInt32 m_uiExecutionCounter = 0;
276 plTime m_DeltaTimeSinceLastExecution;
285 using StorageType = plUInt8;
299#include <VisualScriptPlugin/Runtime/VisualScript_inl.h>
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
plBlob allows to store simple binary data larger than 4GB. This storage class is used by plImage to a...
Definition Blob.h:319
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
Base class for reference counted objects.
Definition RefCounted.h:52
Base class of script coroutines.
Definition ScriptCoroutine.h:35
A Shared ptr manages a shared object and destroys that object when no one references it anymore....
Definition SharedPtr.h:10
Definition SmallArray.h:219
Interface for binary in (read) streams.
Definition Stream.h:22
Interface for binary out (write) streams.
Definition Stream.h:107
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Definition VisualScriptData.h:91
Definition VisualScript.h:234
Definition VisualScript.h:130
Definition VisualScriptInstance.h:8
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
Definition ScriptRTTI.h:48
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12
PL_ALWAYS_INLINE static constexpr plTime MakeZero()
Creates an instance of plTime that was initialized with zero.
Definition Time.h:42
A typed raw pointer.
Definition TypedPointer.h:13
Definition VisualScriptData.h:10
Definition VisualScriptData.h:8
Definition VisualScript.h:142
Definition VisualScript.h:159
Definition VisualScript.h:157
Definition VisualScript.h:187
Native node types for visual script graphs. Editor only types are not supported at runtime and will b...
Definition VisualScript.h:14
Definition VisualScript.h:10
Definition VisualScript.h:284
Enum
Definition VisualScript.h:288
@ Recursive
Send the message to the target game object and its children.
Definition VisualScript.h:290
@ Event
Send the message as event.
Definition VisualScript.h:291
@ Direct
Directly send the message to the target game object.
Definition VisualScript.h:289