60 lines
1.7 KiB
GDScript
60 lines
1.7 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: Area3D
|
|
|
|
func _ready() -> void:
|
|
if loaded == true:
|
|
arrow_loaded()
|
|
|
|
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)
|
|
|
|
# Calls the _input() from player.gd
|
|
super._input(event)
|
|
|
|
func shoot_arrow() -> void:
|
|
current_arrow.shoot()
|
|
|
|
func arrow_loaded() -> void:
|
|
print("Arrow loaded...")
|
|
var new_arrow = arrow_scene.instantiate()
|
|
#new_arrow.global_transform = shoot_point.global_transform
|
|
shoot_point.add_child(new_arrow)
|
|
current_arrow = new_arrow
|