Fix LimboHSM::add_transition signature

This commit is contained in:
Serhii Snitsaruk 2024-01-28 11:56:53 +01:00
parent c81c1ec872
commit 2612ec0855
3 changed files with 9 additions and 12 deletions

View File

@ -11,8 +11,8 @@
<methods>
<method name="add_transition">
<return type="void" />
<param index="0" name="p_from_state" type="Node" />
<param index="1" name="p_to_state" type="Node" />
<param index="0" name="p_from_state" type="LimboState" />
<param index="1" name="p_to_state" type="LimboState" />
<param index="2" name="p_event" type="String" />
<description>
Establishes a transition from one state to another when [param p_event] is dispatched. Both [param p_from_state] and [param p_to_state] must be immediate children of this state.

View File

@ -97,13 +97,11 @@ void LimboHSM::update(double p_delta) {
_update(p_delta);
}
void LimboHSM::add_transition(Node *p_from_state, Node *p_to_state, const String &p_event) {
ERR_FAIL_COND(p_from_state != nullptr && p_from_state->get_parent() != this);
ERR_FAIL_COND(p_from_state != nullptr && !p_from_state->is_class("LimboState"));
ERR_FAIL_COND(p_to_state == nullptr);
ERR_FAIL_COND(p_to_state->get_parent() != this);
ERR_FAIL_COND(!p_to_state->is_class("LimboState"));
ERR_FAIL_COND(p_event.is_empty());
void LimboHSM::add_transition(LimboState *p_from_state, LimboState *p_to_state, const String &p_event) {
ERR_FAIL_COND_MSG(p_from_state != nullptr && p_from_state->get_parent() != this, "LimboHSM: Unable to add a transition from a state that is not an immediate child of mine.");
ERR_FAIL_COND_MSG(p_to_state == nullptr, "LimboHSM: Unable to add a transition to a null state.");
ERR_FAIL_COND_MSG(p_to_state->get_parent() != this, "LimboHSM: Unable to add a transition to a state that is not an immediate child of mine.");
ERR_FAIL_COND_MSG(p_event.is_empty(), "LimboHSM: Failed to add transition due to empty event string.");
uint64_t key = _get_transition_key(p_from_state, p_event);
transitions[key] = Object::cast_to<LimboState>(p_to_state);

View File

@ -30,7 +30,7 @@ private:
LimboState *active_state;
HashMap<uint64_t, LimboState *> transitions;
_FORCE_INLINE_ uint64_t _get_transition_key(Node *p_from_state, const String &p_event) {
_FORCE_INLINE_ uint64_t _get_transition_key(LimboState *p_from_state, const String &p_event) {
uint64_t key = hash_djb2_one_64(Variant::OBJECT);
key = hash_djb2_one_64(Variant(p_from_state).hash(), key);
key = hash_djb2_one_64(p_event.hash(), key);
@ -65,8 +65,7 @@ public:
virtual bool dispatch(const String &p_event, const Variant &p_cargo = Variant()) override;
void update(double p_delta);
void add_transition(Node *p_from_state, Node *p_to_state, const String &p_event);
// void add_transition_from_any_state(Node *p_to_state, const String &p_event);
void add_transition(LimboState *p_from_state, LimboState *p_to_state, const String &p_event);
LimboState *anystate() const { return nullptr; }
LimboHSM();