Provide the previous state in the state_changed signal
- Also provide `get_previous_active_state()` method. - Rename state_changed -> active_state_changed.
This commit is contained in:
parent
27f3982250
commit
193743e782
|
@ -52,6 +52,8 @@ Methods
|
||||||
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| :ref:`LimboState<class_LimboState>` | :ref:`get_leaf_state<class_LimboHSM_method_get_leaf_state>` **(** **)** |const| |
|
| :ref:`LimboState<class_LimboState>` | :ref:`get_leaf_state<class_LimboHSM_method_get_leaf_state>` **(** **)** |const| |
|
||||||
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| :ref:`LimboState<class_LimboState>` | :ref:`get_previous_active_state<class_LimboHSM_method_get_previous_active_state>` **(** **)** |const| |
|
||||||
|
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| void | :ref:`initialize<class_LimboHSM_method_initialize>` **(** Node agent, :ref:`Blackboard<class_Blackboard>` parent_scope=null **)** |
|
| void | :ref:`initialize<class_LimboHSM_method_initialize>` **(** Node agent, :ref:`Blackboard<class_Blackboard>` parent_scope=null **)** |
|
||||||
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| void | :ref:`set_active<class_LimboHSM_method_set_active>` **(** bool active **)** |
|
| void | :ref:`set_active<class_LimboHSM_method_set_active>` **(** bool active **)** |
|
||||||
|
@ -68,11 +70,11 @@ Methods
|
||||||
Signals
|
Signals
|
||||||
-------
|
-------
|
||||||
|
|
||||||
.. _class_LimboHSM_signal_state_changed:
|
.. _class_LimboHSM_signal_active_state_changed:
|
||||||
|
|
||||||
.. rst-class:: classref-signal
|
.. rst-class:: classref-signal
|
||||||
|
|
||||||
**state_changed** **(** :ref:`LimboState<class_LimboState>` state **)**
|
**active_state_changed** **(** :ref:`LimboState<class_LimboState>` current, :ref:`LimboState<class_LimboState>` previous **)**
|
||||||
|
|
||||||
Emitted when the currently active substate is switched to a different substate.
|
Emitted when the currently active substate is switched to a different substate.
|
||||||
|
|
||||||
|
@ -215,6 +217,18 @@ Returns the currently active leaf state within the state machine.
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
.. _class_LimboHSM_method_get_previous_active_state:
|
||||||
|
|
||||||
|
.. rst-class:: classref-method
|
||||||
|
|
||||||
|
:ref:`LimboState<class_LimboState>` **get_previous_active_state** **(** **)** |const|
|
||||||
|
|
||||||
|
Returns the previously active substate.
|
||||||
|
|
||||||
|
.. rst-class:: classref-item-separator
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
.. _class_LimboHSM_method_initialize:
|
.. _class_LimboHSM_method_initialize:
|
||||||
|
|
||||||
.. rst-class:: classref-method
|
.. rst-class:: classref-method
|
||||||
|
|
|
@ -30,6 +30,12 @@
|
||||||
Returns the currently active leaf state within the state machine.
|
Returns the currently active leaf state within the state machine.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_previous_active_state" qualifiers="const">
|
||||||
|
<return type="LimboState" />
|
||||||
|
<description>
|
||||||
|
Returns the previously active substate.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="initialize">
|
<method name="initialize">
|
||||||
<return type="void" />
|
<return type="void" />
|
||||||
<param index="0" name="agent" type="Node" />
|
<param index="0" name="agent" type="Node" />
|
||||||
|
@ -65,8 +71,9 @@
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<signals>
|
<signals>
|
||||||
<signal name="state_changed">
|
<signal name="active_state_changed">
|
||||||
<param index="0" name="state" type="LimboState" />
|
<param index="0" name="current" type="LimboState" />
|
||||||
|
<param index="1" name="previous" type="LimboState" />
|
||||||
<description>
|
<description>
|
||||||
Emitted when the currently active substate is switched to a different substate.
|
Emitted when the currently active substate is switched to a different substate.
|
||||||
</description>
|
</description>
|
||||||
|
|
|
@ -61,12 +61,13 @@ void LimboHSM::_change_state(LimboState *p_state) {
|
||||||
|
|
||||||
if (active_state) {
|
if (active_state) {
|
||||||
active_state->_exit();
|
active_state->_exit();
|
||||||
|
previous_active = active_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
active_state = p_state;
|
active_state = p_state;
|
||||||
active_state->_enter();
|
active_state->_enter();
|
||||||
|
|
||||||
emit_signal(LimboStringNames::get_singleton()->state_changed, active_state);
|
emit_signal(LimboStringNames::get_singleton()->active_state_changed, active_state, previous_active);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LimboHSM::_enter() {
|
void LimboHSM::_enter() {
|
||||||
|
@ -247,6 +248,7 @@ void LimboHSM::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_initial_state"), &LimboHSM::get_initial_state);
|
ClassDB::bind_method(D_METHOD("get_initial_state"), &LimboHSM::get_initial_state);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_active_state"), &LimboHSM::get_active_state);
|
ClassDB::bind_method(D_METHOD("get_active_state"), &LimboHSM::get_active_state);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_previous_active_state"), &LimboHSM::get_previous_active_state);
|
||||||
ClassDB::bind_method(D_METHOD("get_leaf_state"), &LimboHSM::get_leaf_state);
|
ClassDB::bind_method(D_METHOD("get_leaf_state"), &LimboHSM::get_leaf_state);
|
||||||
ClassDB::bind_method(D_METHOD("set_active", "active"), &LimboHSM::set_active);
|
ClassDB::bind_method(D_METHOD("set_active", "active"), &LimboHSM::set_active);
|
||||||
ClassDB::bind_method(D_METHOD("update", "delta"), &LimboHSM::update);
|
ClassDB::bind_method(D_METHOD("update", "delta"), &LimboHSM::update);
|
||||||
|
@ -263,11 +265,14 @@ void LimboHSM::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "ANYSTATE", PROPERTY_HINT_RESOURCE_TYPE, "LimboState", 0), "", "anystate");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "ANYSTATE", PROPERTY_HINT_RESOURCE_TYPE, "LimboState", 0), "", "anystate");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "initial_state", PROPERTY_HINT_RESOURCE_TYPE, "LimboState", 0), "set_initial_state", "get_initial_state");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "initial_state", PROPERTY_HINT_RESOURCE_TYPE, "LimboState", 0), "set_initial_state", "get_initial_state");
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("state_changed", PropertyInfo(Variant::OBJECT, "state", PROPERTY_HINT_RESOURCE_TYPE, "LimboState", 0)));
|
ADD_SIGNAL(MethodInfo("active_state_changed",
|
||||||
|
PropertyInfo(Variant::OBJECT, "current", PROPERTY_HINT_RESOURCE_TYPE, "LimboState"),
|
||||||
|
PropertyInfo(Variant::OBJECT, "previous", PROPERTY_HINT_RESOURCE_TYPE, "LimboState")));
|
||||||
}
|
}
|
||||||
|
|
||||||
LimboHSM::LimboHSM() {
|
LimboHSM::LimboHSM() {
|
||||||
update_mode = UpdateMode::PHYSICS;
|
update_mode = UpdateMode::PHYSICS;
|
||||||
active_state = nullptr;
|
active_state = nullptr;
|
||||||
|
previous_active = nullptr;
|
||||||
initial_state = nullptr;
|
initial_state = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ private:
|
||||||
UpdateMode update_mode;
|
UpdateMode update_mode;
|
||||||
LimboState *initial_state;
|
LimboState *initial_state;
|
||||||
LimboState *active_state;
|
LimboState *active_state;
|
||||||
|
LimboState *previous_active;
|
||||||
HashMap<uint64_t, LimboState *> transitions;
|
HashMap<uint64_t, LimboState *> transitions;
|
||||||
|
|
||||||
_FORCE_INLINE_ uint64_t _get_transition_key(LimboState *p_from_state, const StringName &p_event) {
|
_FORCE_INLINE_ uint64_t _get_transition_key(LimboState *p_from_state, const StringName &p_event) {
|
||||||
|
@ -58,6 +59,7 @@ public:
|
||||||
UpdateMode get_update_mode() const { return update_mode; }
|
UpdateMode get_update_mode() const { return update_mode; }
|
||||||
|
|
||||||
LimboState *get_active_state() const { return active_state; }
|
LimboState *get_active_state() const { return active_state; }
|
||||||
|
LimboState *get_previous_active_state() const { return previous_active; }
|
||||||
LimboState *get_leaf_state() const;
|
LimboState *get_leaf_state() const;
|
||||||
void set_active(bool p_active);
|
void set_active(bool p_active);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ LimboStringNames::LimboStringNames() {
|
||||||
ActionCopy = SN("ActionCopy");
|
ActionCopy = SN("ActionCopy");
|
||||||
ActionCut = SN("ActionCut");
|
ActionCut = SN("ActionCut");
|
||||||
ActionPaste = SN("ActionPaste");
|
ActionPaste = SN("ActionPaste");
|
||||||
|
active_state_changed = SN("active_state_changed");
|
||||||
Add = SN("Add");
|
Add = SN("Add");
|
||||||
add_child = SN("add_child");
|
add_child = SN("add_child");
|
||||||
add_child_at_index = SN("add_child_at_index");
|
add_child_at_index = SN("add_child_at_index");
|
||||||
|
@ -141,7 +142,6 @@ LimboStringNames::LimboStringNames() {
|
||||||
set_v_scroll = SN("set_v_scroll");
|
set_v_scroll = SN("set_v_scroll");
|
||||||
setup = SN("setup");
|
setup = SN("setup");
|
||||||
started = SN("started");
|
started = SN("started");
|
||||||
state_changed = SN("state_changed");
|
|
||||||
StatusWarning = SN("StatusWarning");
|
StatusWarning = SN("StatusWarning");
|
||||||
stopped = SN("stopped");
|
stopped = SN("stopped");
|
||||||
task_activated = SN("task_activated");
|
task_activated = SN("task_activated");
|
||||||
|
|
|
@ -60,6 +60,7 @@ public:
|
||||||
StringName ActionCopy;
|
StringName ActionCopy;
|
||||||
StringName ActionCut;
|
StringName ActionCut;
|
||||||
StringName ActionPaste;
|
StringName ActionPaste;
|
||||||
|
StringName active_state_changed;
|
||||||
StringName add_child_at_index;
|
StringName add_child_at_index;
|
||||||
StringName add_child;
|
StringName add_child;
|
||||||
StringName Add;
|
StringName Add;
|
||||||
|
@ -156,7 +157,6 @@ public:
|
||||||
StringName set_v_scroll;
|
StringName set_v_scroll;
|
||||||
StringName setup;
|
StringName setup;
|
||||||
StringName started;
|
StringName started;
|
||||||
StringName state_changed;
|
|
||||||
StringName StatusWarning;
|
StringName StatusWarning;
|
||||||
StringName stopped;
|
StringName stopped;
|
||||||
StringName task_activated;
|
StringName task_activated;
|
||||||
|
|
Loading…
Reference in New Issue