SchildDerStaerke/scripts/rogue.gd

65 lines
1.9 KiB
GDScript

class_name Rogue extends Player
var attacks := ["2H_Ranged_Shoot"]
var reloadings := ["2H_Ranged_Reload"]
var aimings := ["2H_Ranged_Aiming"]
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"
]
@export var arrow_scene: PackedScene
@onready var shoot_point: Node3D = $Rig/Skeleton3D/handslot_r/ShootPoint
@export var loaded: bool
var current_arrow: Node3D
func _ready() -> void:
if loaded == true:
arrow_loaded()
print("Current arrow: " + str(current_arrow))
func _input(event: InputEvent) -> void:
# Shoot
if event.is_action_pressed("attack"):
if loaded == true:
if enough_stamina_available(attack_cost):
use_stamina(attack_cost)
anim_state.travel(attacks.pick_random())
loaded = false
else:
print("No arrow loaded!")
# Reload
if Input.is_action_pressed("reload"):
if loaded == false:
anim_state.travel(reloadings.pick_random())
loaded = true
else:
print("Already loaded!")
# Aiming
if Input.is_action_pressed("block"): state = States.aiming
if Input.is_action_just_released("block"): state = States.idle
anim_tree.set("parameters/conditions/aiming", state == States.aiming)
anim_tree.set("parameters/conditions/not_aiming", state != States.aiming)
#Camera
spring_arm.get_child(0).fov = 40 if state == States.aiming else 70
spring_arm.transform.origin.x = 0.5 # Shoulder offset
spring_arm.spring_length = 3.0
# Calls the _input() from player.gd
super._input(event)
func shoot_arrow() -> void:
if current_arrow != null:
current_arrow.shoot()
func arrow_loaded() -> void:
print("Arrow loaded...")
current_arrow = arrow_scene.instantiate()
#new_arrow.global_transform = shoot_point.global_transform
shoot_point.add_child(current_arrow)