Fixed Finite State Machine demo issues

This commit is contained in:
Wilson E. Alvarez 2019-01-05 08:07:58 -05:00
parent eb27a35a2d
commit 974dbd6b88
No known key found for this signature in database
GPG Key ID: A32174A3D2ED3F9E
1 changed files with 14 additions and 14 deletions

View File

@ -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):