signalis-eb/godot/src/player.gd

56 lines
1.4 KiB
GDScript

class_name Player extends CharacterBody3D
@export var walk_speed: float = 4.0
@export var run_speed: float = 6.0
@onready var input = $Input
@onready var interactor = $Interactor
var is_running: bool:
get: return velocity and input.is_running
var is_carrying_item = true
var is_weapon_ready: bool:
get: return is_carrying_item and input.is_weapon_ready
func _ready() -> void:
input.connect('interact', _on_interact)
input.connect('fire', _on_fire)
func _physics_process(delta: float) -> void:
if is_weapon_ready:
rotate_toward_look(delta)
else:
move_and_rotate(delta)
func move_and_rotate(_delta: float):
var speed = run_speed if input.is_running else walk_speed
velocity = input.next_velocity(speed)
if !velocity.is_zero_approx():
look_at(global_position + velocity, Vector3.UP, true)
move_and_slide()
func rotate_toward_look(_delta: float):
velocity = Vector3.ZERO
var target = input.get_look_target(global_position)
if target.is_some():
look_at(target.unwrap(), Vector3.UP, true)
func _on_interact():
interactor.interact_nearest()
func _on_fire():
if is_weapon_ready:
print('firing weapon')
func on_save():
return {
position = position,
rotation = rotation
}
func on_before_load():
pass
func on_load(data: Dictionary):
position = data.position
rotation = data.rotation