AI part two

pull/28/head
Sascha Woitschetzki 2025-08-19 06:20:32 +07:00
parent 78a6df0fdf
commit 5a8b173b48
2 changed files with 37 additions and 24 deletions

@ -8,7 +8,6 @@ const ACTION_COLLECT: StringName = &"collect gold"
# Animationsnamen
const ANIM_TAKE_GOLD: StringName = &"take_gold"
const ANIM_TAKE_GOLD := "take_gold"
@export var gold_amount: int = 10
var has_gold: bool = false

@ -1,29 +1,43 @@
class_name Knight extends Player
class_name Knight
extends Player
const ATTACK_ANIMS: Array[StringName] = [
&"1h_slice_diagonal",
&"1h_slice_horizontal",
&"1h_attack_chop"
]
const FOOTSTEP_SOUNDS: Array[String] = [
"res://resources/audio/footstep_grass_000.ogg",
"res://resources/audio/footstep_grass_001.ogg",
"res://resources/audio/footstep_grass_002.ogg",
"res://resources/audio/footstep_grass_003.ogg",
"res://resources/audio/footstep_grass_004.ogg"
]
var attacks := ["1h_slice_diagonal", "1h_slice_horizontal", "1h_attack_chop"]
var footsteps := [
"res://resources/audio/footstep_grass_000.ogg",
"res://resources/audio/footstep_grass_001.ogg",
"res://resources/audio/footstep_grass_002.ogg",
"res://resources/audio/footstep_grass_003.ogg",
"res://resources/audio/footstep_grass_004.ogg"
]
func _input(event: InputEvent) -> void:
# Attack
if event.is_action_pressed("attack"):
if enough_stamina_available(attack_cost):
use_stamina(attack_cost)
if state == States.blocking:
anim_state.travel("Block_Attack")
else:
anim_state.travel(attacks.pick_random())
# Block
if Input.is_action_pressed("block"): state = States.blocking
if Input.is_action_just_released("block"): state = States.idle
anim_tree.set("parameters/conditions/blocking", state == States.blocking)
anim_tree.set("parameters/conditions/not_blocking", state != States.blocking)
_on_attack()
# Block + Animator-Zustände
_update_block_state()
# Calls the _input() from player.gd
super._input(event)
super._input(event)
func _on_attack() -> void:
if not enough_stamina_available(attack_cost):
return
use_stamina(attack_cost)
var target_anim: StringName = &"Block_Attack" if state == States.blocking else ATTACK_ANIMS.pick_random()
anim_state.travel(target_anim)
func _update_block_state() -> void:
if Input.is_action_pressed("block"):
state = States.blocking
elif Input.is_action_just_released("block"):
state = States.idle
var is_blocking: bool = state == States.blocking
anim_tree.set("parameters/conditions/blocking", is_blocking)
anim_tree.set("parameters/conditions/not_blocking", not is_blocking)