3template <
typename T, plUInt32 Size>
9 inout_uiAdditionalDataSize += a.
GetCount() *
sizeof(T);
14template <
typename T, plUInt32 Size>
17 if (uiSize > Size *
sizeof(T))
20 inout_uiAdditionalDataSize += uiSize;
24template <
typename T, plUInt32 Size>
33 m_Ptr =
reinterpret_cast<T*
>(inout_pAdditionalData);
34 inout_pAdditionalData += uiCount *
sizeof(T);
38template <
typename T, plUInt32 Size>
42 inout_stream >> uiCount;
48 out_uiCount =
static_cast<plUInt8
>(uiCount);
50 T* pTargetPtr = Init(out_uiCount, inout_pAdditionalData);
51 const plUInt64 uiNumBytesToRead = uiCount *
sizeof(T);
52 if (inout_stream.
ReadBytes(pTargetPtr, uiNumBytesToRead) != uiNumBytesToRead)
60PL_ALWAYS_INLINE plUInt32 plVisualScriptGraphDescription::Node::GetExecutionIndex(plUInt32 uiSlot)
const
62 if (uiSlot < m_NumExecutionIndices)
64 return m_NumExecutionIndices <= PL_ARRAY_SIZE(m_ExecutionIndices.m_Embedded) ? m_ExecutionIndices.m_Embedded[uiSlot] : m_ExecutionIndices.m_Ptr[uiSlot];
67 return plInvalidIndex;
72 if (uiSlot < m_NumInputDataOffsets)
74 return m_NumInputDataOffsets <= PL_ARRAY_SIZE(m_InputDataOffsets.m_Embedded) ? m_InputDataOffsets.m_Embedded[uiSlot] : m_InputDataOffsets.m_Ptr[uiSlot];
82 if (uiSlot < m_NumOutputDataOffsets)
84 return m_NumOutputDataOffsets <= PL_ARRAY_SIZE(m_OutputDataOffsets.m_Embedded) ? m_OutputDataOffsets.m_Embedded[uiSlot] : m_OutputDataOffsets.m_Ptr[uiSlot];
91PL_ALWAYS_INLINE
const T& plVisualScriptGraphDescription::Node::GetUserData()
const
93 PL_ASSERT_DEBUG(m_UserDataByteSize >=
sizeof(T),
"Invalid data");
94 return *
reinterpret_cast<const T*
>(m_UserDataByteSize <=
sizeof(m_UserData.m_Embedded) ? m_UserData.m_Embedded : m_UserData.m_Ptr);
98T& plVisualScriptGraphDescription::Node::InitUserData(plUInt8*& inout_pAdditionalData, plUInt32 uiByteSize )
100 m_UserDataByteSize = uiByteSize;
101 auto pUserData = m_UserData.Init(uiByteSize /
sizeof(plUInt32), inout_pAdditionalData);
102 PL_CHECK_ALIGNMENT(pUserData, PL_ALIGNMENT_OF(T));
103 return *
reinterpret_cast<T*
>(pUserData);
110 return uiIndex < m_Nodes.GetCount() ? &m_Nodes.GetPtr()[uiIndex] :
nullptr;
113PL_ALWAYS_INLINE
bool plVisualScriptGraphDescription::IsCoroutine()
const
115 auto entryNodeType = GetNode(0)->m_Type;
116 return entryNodeType == plVisualScriptNodeDescription::Type::EntryCall_Coroutine || entryNodeType == plVisualScriptNodeDescription::Type::MessageHandler_Coroutine;
121 return m_pLocalDataDesc;
127PL_FORCE_INLINE
const T& plVisualScriptExecutionContext::GetData(DataOffset dataOffset)
const
129 return m_DataStorage[dataOffset.m_uiSource]->GetData<T>(dataOffset);
133PL_FORCE_INLINE T& plVisualScriptExecutionContext::GetWritableData(DataOffset dataOffset)
135 PL_ASSERT_DEBUG(dataOffset.IsConstant() ==
false,
"Can't write to constant data");
136 return m_DataStorage[dataOffset.m_uiSource]->GetWritableData<T>(dataOffset);
140PL_FORCE_INLINE
void plVisualScriptExecutionContext::SetData(DataOffset dataOffset,
const T& value)
142 PL_ASSERT_DEBUG(dataOffset.IsConstant() ==
false,
"Outputs can't set constant data");
143 return m_DataStorage[dataOffset.m_uiSource]->SetData<T>(dataOffset, value);
146PL_FORCE_INLINE
plTypedPointer plVisualScriptExecutionContext::GetPointerData(DataOffset dataOffset)
148 PL_ASSERT_DEBUG(dataOffset.IsConstant() ==
false,
"Pointers can't be constant data");
149 return m_DataStorage[dataOffset.m_uiSource]->GetPointerData(dataOffset, m_uiExecutionCounter);
153PL_FORCE_INLINE
void plVisualScriptExecutionContext::SetPointerData(DataOffset dataOffset, T ptr,
const plRTTI* pType)
155 PL_ASSERT_DEBUG(dataOffset.IsConstant() ==
false,
"Pointers can't be constant data");
156 m_DataStorage[dataOffset.m_uiSource]->SetPointerData(dataOffset, ptr, pType, m_uiExecutionCounter);
159PL_FORCE_INLINE
plVariant plVisualScriptExecutionContext::GetDataAsVariant(DataOffset dataOffset,
const plRTTI* pExpectedType)
const
161 return m_DataStorage[dataOffset.m_uiSource]->GetDataAsVariant(dataOffset, pExpectedType, m_uiExecutionCounter);
164PL_FORCE_INLINE
void plVisualScriptExecutionContext::SetDataFromVariant(DataOffset dataOffset,
const plVariant& value)
166 PL_ASSERT_DEBUG(dataOffset.IsConstant() ==
false,
"Outputs can't set constant data");
167 return m_DataStorage[dataOffset.m_uiSource]->SetDataFromVariant(dataOffset, value, m_uiExecutionCounter);
170PL_ALWAYS_INLINE
void plVisualScriptExecutionContext::SetCurrentCoroutine(
plScriptCoroutine* pCoroutine)
172 m_pCurrentCoroutine = pCoroutine;
175inline plTime plVisualScriptExecutionContext::GetDeltaTimeSinceLastExecution()
177 PL_ASSERT_DEBUG(m_pDesc->IsCoroutine(),
"Delta time is only valid for coroutines");
178 return m_DeltaTimeSinceLastExecution;
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
PL_ALWAYS_INLINE plUInt32 GetCount() const
Returns the number of elements in the array.
Definition ArrayPtr.h:142
static T * AlignForwards(T *pPtr, size_t uiAlignment)
Aligns the pointer ptr by moving its address forwards to the next multiple of uiAlignment.
static T AlignSize(T uiSize, T uiAlignment)
Aligns the given size uiSize by rounding up to the next multiple of the size.
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
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
Interface for binary in (read) streams.
Definition Stream.h:22
virtual plUInt64 ReadBytes(void *pReadBuffer, plUInt64 uiBytesToRead)=0
Reads a raw number of bytes into the read buffer, this is the only method which has to be implemented...
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
constexpr TYPE MaxValue()
Returns the largest possible positive value (that is not infinity).
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12
A typed raw pointer.
Definition TypedPointer.h:13
Definition VisualScriptData.h:10
Definition VisualScript.h:142
Definition VisualScript.h:187