RAIDER_GameJam/player/player.gd
Felix Kaiser 3f62e5e31d blergh
2025-02-17 16:46:19 +01:00

77 lines
2.4 KiB
GDScript

extends CharacterBody3D
class_name Player
var input_dir := Vector2.ZERO
@onready var animation_tree: AnimationTree = $AnimationTree
@onready var pelvis: Node3D = $Node/base/pelvis
var not_dead := true
@onready var weapon_slot_2: Area3D = $WeaponSlot2
@onready var weapon_slot: Area3D = $WeaponSlot
@onready var collision_shape_3d: CollisionShape3D = $CollisionShape3D
@onready var player_hit_box: Area3D = $PlayerHitBox
@onready var node: Node3D = $Node
@onready var explosion: Node3D = $Explosion
@onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
@export_multiline var death_message : Array[String]
@onready var color_rect: ColorRect = $CanvasLayer/ColorRect
func handle_dying():
not_dead = false
weapon_slot_2.queue_free()
weapon_slot.queue_free()
collision_shape_3d.queue_free()
player_hit_box.queue_free()
node.queue_free()
explosion.play()
HudSignalBus.roll_dialog.emit(death_message)
audio_stream_player.play()
get_tree().create_tween().tween_property(color_rect, "color", Color.BLACK, 5)
get_tree().create_timer(5).timeout.connect(foo)
func foo():
get_tree().change_scene_to_file("res://mainmenu.tscn")
func handle_animations():
if !not_dead:
return
animation_tree.set("parameters/walk_timescale/scale", (velocity.length())/3)
if velocity.length() > 0.1:
pelvis.look_at(global_position+velocity)
pelvis.rotation.x = 0
pelvis.rotation.z = 0
if velocity.length() < 0.1 and animation_tree.get("parameters/idle_walk_blend/blend_amount") >= 1:
var tween = get_tree().create_tween()
tween.tween_property(animation_tree, "parameters/idle_walk_blend/blend_amount", 0, .5)
#tween.connect("finished", $FootSoundPlayer.play)
if (velocity.length()) > 0.1 and animation_tree.get("parameters/idle_walk_blend/blend_amount") == 0:
var tween = get_tree().create_tween()
tween.tween_property(animation_tree, "parameters/idle_walk_blend/blend_amount", 1, .5)
func _physics_process(delta: float) -> void:
handle_animations()
var asd = Vector2.ZERO
if not_dead:
if Input.is_action_just_pressed("shoot3"):
handle_dying()
asd = Input.get_vector("strafe_left", "strafe_right", "move_front", "move_back")*5
rotation.y -= delta*Input.get_axis("turn_left","turn_right")*2
input_dir = lerp(input_dir, asd, .1)
var input_velocity = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, rotation.y)
velocity.x = input_velocity.x
velocity.z = input_velocity.z
velocity = velocity + Vector3.DOWN*1
move_and_slide()