Files
net-gunner/scripts/pawn_body.gd

69 lines
2.0 KiB
GDScript

class_name PawnBody extends Node3D
@export var projectile_template : PackedScene
@onready var anim_player : AnimationPlayer = %AnimationPlayer
@onready var ranged_point : Node3D = %RangedPoint
#@onready var material : StandardMaterial3D = $Mesh.material
@onready var struggle_ui : Sprite3D = %StruggleUI
@onready var struggle_bar : ProgressBar = %StruggleBar
@onready var anim_tree : AnimationTree = %AnimationTree
@onready var anim_machine : AnimationNodeStateMachinePlayback = %AnimationTree.get("parameters/playback")
@onready var walk_sound : AudioStreamPlayer3D = $WalkSound
@onready var footstep_timer : Timer = $FootstepTimer
signal shooting()
signal reloading()
@rpc("call_local")
func play_animation(anim_name : String) -> void:
anim_player.play(anim_name)
@rpc("call_local")
func travel_animation(node_name : String) -> void:
anim_machine.travel(node_name)
@rpc("call_local")
func show_struggle() -> void:
struggle_ui.visible = true
func set_animation_parameter(parameter : String, value : Variant) -> void:
anim_tree.set(parameter, value)
func stop_footsteps() -> void:
footstep_timer.stop()
func play_footsteps(step_time : float = 1) -> void:
if footstep_timer.is_stopped():
walk_sound.play()
footstep_timer.start(step_time)
elif footstep_timer.wait_time != step_time:
footstep_timer.wait_time = step_time
func _on_struggle_changed(value : float) -> void:
if value <= 0:
struggle_ui.visible = false
else:
struggle_bar.value = value
func set_animation_length(node_name : String, length : float) -> void:
if length == 0:
length = 0.01
var blendtree : AnimationNodeBlendTree = anim_tree.tree_root.get_node(node_name)
if !blendtree:
return
var anim_node : AnimationNodeAnimation = blendtree.get_node("Animation")
if !anim_node:
return
var animation : Animation = anim_player.get_animation(anim_node.animation)
if !animation:
return
var a_scale : float = animation.length / length
anim_tree["parameters/%s/TimeScale/scale" % node_name] = a_scale
func _on_footstep_timer_timeout() -> void:
walk_sound.play()