2023-02-14 16:24:53 +01:00

1.3 KiB

Description

TODO

How to use

  • Add a Node2D node named "StateMachine" with the script state_machine.gd

  • Initialize the states, initial state and conditions: {{{ $StateMachine.add_state("idle") $StateMachine.add_state("hurt") $StateMachine.add_state("dead") $StateMachine.set_init_state("idle") $StateMachine.add_transition("idle", "hurt", [], "fire") $StateMachine.add_transition("hurt", "dead", ["has_stuff_been_handled", "is_dead"]) $StateMachine.add_transition("hurt", "idle", ["has_stuff_been_handled"]) }}}

  • Trigger an event {{{ $StateMachine.trigger("fire") }}}

  • Add a condition: it's just a func returning a bool {{{ def has_stuff_been_handled(): return true }}}

  • Add callbacks for state entering/update/exiting: just add the state name in on_XXXXX_state_YYYY() {{{ func on_idle_state_enter(): pass

    func on_idle_state_update(delta): pass

    func on_idle_state_exit(): pass }}}

  • Enabling debug mode (logs when changing states) {{{ $StateMachine.set_debug_enabled(true) }}}

  • Get the current state {{{ $StateMachine.get_current_state() }}}

  • Get the last known state (before the current one) {{{ $StateMachine.get_last_state() }}}

Credits

icon: made by Freepik from https://www.flaticon.com, license: Creative Commons BY 3.0