Fixed Finite State Machine demo issues
This commit is contained in:
parent
eb27a35a2d
commit
974dbd6b88
|
@ -6,7 +6,7 @@ enum STATES { IDLE, ATTACK }
|
|||
var state = null
|
||||
|
||||
enum ATTACK_INPUT_STATES { IDLE, LISTENING, REGISTERED }
|
||||
var attack_input_state = IDLE
|
||||
var attack_input_state = ATTACK_INPUT_STATES.IDLE
|
||||
var ready_for_next_attack = false
|
||||
const MAX_COMBO_COUNT = 3
|
||||
var combo_count = 0
|
||||
|
@ -33,22 +33,22 @@ var hit_objects = []
|
|||
func _ready():
|
||||
$AnimationPlayer.connect('animation_finished', self, "_on_animation_finished")
|
||||
self.connect("body_entered", self, "_on_body_entered")
|
||||
_change_state(IDLE)
|
||||
_change_state(STATES.IDLE)
|
||||
|
||||
func _change_state(new_state):
|
||||
match state:
|
||||
ATTACK:
|
||||
STATES.ATTACK:
|
||||
hit_objects = []
|
||||
attack_input_state = IDLE
|
||||
attack_input_state = ATTACK_INPUT_STATES.LISTENING
|
||||
ready_for_next_attack = false
|
||||
|
||||
match new_state:
|
||||
IDLE:
|
||||
STATES.IDLE:
|
||||
combo_count = 0
|
||||
$AnimationPlayer.stop()
|
||||
visible = false
|
||||
monitoring = false
|
||||
ATTACK:
|
||||
STATES.ATTACK:
|
||||
attack_current = combo[combo_count -1]
|
||||
$AnimationPlayer.play(attack_current['animation'])
|
||||
visible = true
|
||||
|
@ -56,24 +56,24 @@ func _change_state(new_state):
|
|||
state = new_state
|
||||
|
||||
func _input(event):
|
||||
if not state == ATTACK:
|
||||
if not state == STATES.ATTACK:
|
||||
return
|
||||
if attack_input_state != LISTENING:
|
||||
if attack_input_state != ATTACK_INPUT_STATES.LISTENING:
|
||||
return
|
||||
if event.is_action_pressed('attack'):
|
||||
attack_input_state = REGISTERED
|
||||
attack_input_state = ATTACK_INPUT_STATES.REGISTERED
|
||||
|
||||
func _physics_process(delta):
|
||||
if attack_input_state == REGISTERED and ready_for_next_attack:
|
||||
if attack_input_state == ATTACK_INPUT_STATES.REGISTERED and ready_for_next_attack:
|
||||
attack()
|
||||
|
||||
func attack():
|
||||
combo_count += 1
|
||||
_change_state(ATTACK)
|
||||
_change_state(STATES.ATTACK)
|
||||
|
||||
# use with AnimationPlayer func track
|
||||
func set_attack_input_listening():
|
||||
attack_input_state = LISTENING
|
||||
attack_input_state = ATTACK_INPUT_STATES.LISTENING
|
||||
|
||||
# use with AnimationPlayer func track
|
||||
func set_ready_for_next_attack():
|
||||
|
@ -91,10 +91,10 @@ func _on_animation_finished(name):
|
|||
if not attack_current:
|
||||
return
|
||||
|
||||
if attack_input_state == REGISTERED and combo_count < MAX_COMBO_COUNT:
|
||||
if attack_input_state == ATTACK_INPUT_STATES.REGISTERED and combo_count < MAX_COMBO_COUNT:
|
||||
attack()
|
||||
else:
|
||||
_change_state(IDLE)
|
||||
_change_state(STATES.IDLE)
|
||||
emit_signal("attack_finished")
|
||||
|
||||
func _on_StateMachine_state_changed(current_state):
|
||||
|
|
Loading…
Reference in New Issue