Adds enemies
This commit is contained in:
parent
cf8ba8bacb
commit
76e5b1927f
324 changed files with 28447 additions and 106 deletions
60
demo/agents/player/states/attack_state.gd
Normal file
60
demo/agents/player/states/attack_state.gd
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#*
|
||||
#* attack_state.gd
|
||||
#* =============================================================================
|
||||
#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||
#*
|
||||
#* Use of this source code is governed by an MIT-style
|
||||
#* license that can be found in the LICENSE file or at
|
||||
#* https://opensource.org/licenses/MIT.
|
||||
#* =============================================================================
|
||||
#*
|
||||
extends LimboState
|
||||
|
||||
## Attack state: Perform 3-part combo attack for as long as player hits attack button.
|
||||
|
||||
@export var animation_player: AnimationPlayer
|
||||
@export var animations: Array[StringName]
|
||||
@export var hitbox: Hitbox
|
||||
|
||||
## Cooldown duration after third attack in the combo is complete.
|
||||
@export var combo_cooldown: float = 0.1
|
||||
|
||||
var anim_index: int = 0
|
||||
var last_attack_msec: int = -10000
|
||||
var _can_enter: bool = true
|
||||
|
||||
|
||||
## This func is used to prevent entering this state using LimboState.set_guard().
|
||||
## Entry is denied for a short duration after the third attack in the combo is complete.
|
||||
func can_enter() -> bool:
|
||||
return _can_enter
|
||||
|
||||
|
||||
func _enter() -> void:
|
||||
if (Time.get_ticks_msec() - last_attack_msec) < 200:
|
||||
# Perform next attack animation in the 3-part combo, if an attack was recently performed.
|
||||
anim_index = (anim_index + 1) % 3
|
||||
else:
|
||||
anim_index = 0
|
||||
|
||||
var horizontal_move: float = Input.get_axis(&"move_left", &"move_right")
|
||||
if not is_zero_approx(horizontal_move):
|
||||
agent.face_dir(horizontal_move)
|
||||
|
||||
hitbox.damage = 2 if anim_index == 2 else 1 # deal 2 damage on a third attack in the combo
|
||||
animation_player.play(animations[anim_index])
|
||||
|
||||
await animation_player.animation_finished
|
||||
if is_active():
|
||||
get_root().dispatch(EVENT_FINISHED)
|
||||
|
||||
|
||||
func _exit() -> void:
|
||||
hitbox.damage = 1
|
||||
last_attack_msec = Time.get_ticks_msec()
|
||||
if anim_index == 2 and _can_enter:
|
||||
# Prevent entering this state for a short duration after the third attack
|
||||
# in the combo sequence is complete.
|
||||
_can_enter = false
|
||||
await get_tree().create_timer(combo_cooldown).timeout
|
||||
_can_enter = true
|
||||
Loading…
Add table
Add a link
Reference in a new issue