Chelimbalo/players/player/player.gd
2025-12-12 01:31:14 +05:00

70 lines
1.2 KiB
GDScript

extends CharacterBody3D
class_name Player
@export var team: Session.TEAMS
@export var weapon_models: Dictionary[StringName,Node3D]
@export var player_id: int = 1:
set(id):
player_id = id
$PlayerInput.set_multiplayer_authority(id)
$Camera3D.set_multiplayer_authority(id)
var passived: bool = false
signal health_changed(to: int)
signal damaged
signal died
const MAX_HP = 100
@export var hp: int = 100:
set(value):
if dead:
return
if value < 0:
hp = 0
else:
hp = value
health_changed.emit(hp)
if hp == 0:
die()
dead = true
get:
return hp
var dead: bool
func _physics_process(_delta: float) -> void:
if not multiplayer.is_server():
return
move_and_slide()
func die() -> void:
if (not multiplayer.is_server()):
return
Session.add_dead(team)
died.emit()
die_on_peers.rpc()
passived = true
@rpc("authority","call_remote","reliable")
func die_on_peers():
if multiplayer.get_remote_sender_id() != 1:
return
died.emit()
func passive() -> void:
passived = true
func depassive() -> void:
passived = false
func take_damage(damage: int):
if dead:
return
hp -= damage
damaged.emit()
$DamageAudio.multiplayer_play()