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" ] func _input(event: InputEvent) -> void: # Attack if event.is_action_pressed("attack"): _on_attack() # Block + Animator-Zustände _update_block_state() # Calls the _input() from player.gd super._input(event) func _on_attack() -> void: if not can_spend_stamina(attack_cost): return spend_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)