Plasma Engine  2.0
Loading...
Searching...
No Matches
StateMachineBuiltins.h
1#pragma once
2
3#include <Core/Utils/Blackboard.h>
4#include <GameEngine/StateMachine/StateMachineResource.h>
5
8{
10
11public:
14
15 virtual void OnEnter(plStateMachineInstance& ref_instance, void* pInstanceData, const plStateMachineState* pFromState) const override;
16 virtual void OnExit(plStateMachineInstance& ref_instance, void* pInstanceData, const plStateMachineState* pToState) const override;
17 virtual void Update(plStateMachineInstance& ref_instance, void* pInstanceData, plTime deltaTime) const override;
18
19 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
20 virtual plResult Deserialize(plStreamReader& inout_stream) override;
21
22 virtual bool GetInstanceDataDesc(plInstanceDataDesc& out_desc) override;
23
24 void SetResource(const plStateMachineResourceHandle& hResource);
25 const plStateMachineResourceHandle& GetResource() const { return m_hResource; }
26
27 void SetResourceFile(const char* szFile); // [ property ]
28 const char* GetResourceFile() const; // [ property ]
29
32 void SetInitialState(const char* szName); // [ property ]
33 const char* GetInitialState() const { return m_sInitialState; } // [ property ]
34
35private:
37 plHashedString m_sInitialState;
38
39 // Should the inner state machine keep its current state on exit and re-enter or should it exit as well and re-enter the initial state again.
40 bool m_bKeepCurrentStateOnExit = false;
41
42 struct InstanceData
43 {
44 plUniquePtr<plStateMachineInstance> m_pStateMachineInstance;
45 };
46};
47
49
54class PL_GAMEENGINE_DLL plStateMachineState_Compound : public plStateMachineState
55{
56 PL_ADD_DYNAMIC_REFLECTION(plStateMachineState_Compound, plStateMachineState);
57
58public:
61
62 virtual void OnEnter(plStateMachineInstance& ref_instance, void* pInstanceData, const plStateMachineState* pFromState) const override;
63 virtual void OnExit(plStateMachineInstance& ref_instance, void* pInstanceData, const plStateMachineState* pToState) const override;
64 virtual void Update(plStateMachineInstance& ref_instance, void* pInstanceData, plTime deltaTime) const override;
65
66 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
67 virtual plResult Deserialize(plStreamReader& inout_stream) override;
68
69 virtual bool GetInstanceDataDesc(plInstanceDataDesc& out_desc) override;
70
72
73private:
75};
76
78
80struct PL_GAMEENGINE_DLL plStateMachineLogicOperator
81{
82 using StorageType = plUInt8;
83
84 enum Enum
85 {
86 And,
87 Or,
88
89 Default = And
90 };
91};
92
93PL_DECLARE_REFLECTABLE_TYPE(PL_GAMEENGINE_DLL, plStateMachineLogicOperator);
94
96
99{
101
102public:
105
106 virtual bool IsConditionMet(plStateMachineInstance& ref_instance, void* pInstanceData) const override;
107
108 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
109 virtual plResult Deserialize(plStreamReader& inout_stream) override;
110
113};
114
116
119{
121
122public:
125
126 virtual bool IsConditionMet(plStateMachineInstance& ref_instance, void* pInstanceData) const override;
127
128 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
129 virtual plResult Deserialize(plStreamReader& inout_stream) override;
130
131 plTime m_Timeout;
132};
133
135
141{
143
144public:
147
148 virtual bool IsConditionMet(plStateMachineInstance& ref_instance, void* pInstanceData) const override;
149
150 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
151 virtual plResult Deserialize(plStreamReader& inout_stream) override;
152
153 virtual bool GetInstanceDataDesc(plInstanceDataDesc& out_desc) override;
154
157
158private:
160};
161
163
166{
168
169public:
172
173 virtual bool IsConditionMet(plStateMachineInstance& ref_instance, void* pInstanceData) const override;
174
175 virtual plResult Serialize(plStreamWriter& inout_stream) const override;
176 virtual plResult Deserialize(plStreamReader& inout_stream) override;
177
178 plHashedString m_sEventName;
179};
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Definition SmallArray.h:219
The state machine instance represents the actual state machine. Typically it is created from a descri...
Definition StateMachine.h:144
A state machine state implementation that combines multiple sub states into one.
Definition StateMachineBuiltins.h:55
A state machine state implementation that represents another state machine nested within this state....
Definition StateMachineBuiltins.h:8
Base class for a state in a state machine.
Definition StateMachine.h:20
virtual bool GetInstanceDataDesc(plInstanceDataDesc &out_desc)
Returns whether this state needs additional instance data and if so fills the out_desc.
Definition StateMachine.cpp:71
A state machine transition implementation that checks the instance's blackboard for the given conditi...
Definition StateMachineBuiltins.h:99
A state machine transition implementation that combines multiple sub transition into one.
Definition StateMachineBuiltins.h:141
A state machine transition implementation that triggers after the given time.
Definition StateMachineBuiltins.h:119
A state machine transition implementation that triggers when a 'transition event' is sent.
Definition StateMachineBuiltins.h:166
Base class for a transition in a state machine. The target state of a transition is automatically set...
Definition StateMachine.h:81
Interface for binary in (read) streams.
Definition Stream.h:22
Interface for binary out (write) streams.
Definition Stream.h:107
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Structure to describe an instance data type.
Definition InstanceDataAllocator.h:17
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
Helper class to manage instance data for compound states or transitions.
Definition StateMachineInstanceData.h:13
An enum that represents the operator of a comparison.
Definition StateMachineBuiltins.h:81
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12