## SPDX-License-Identifier: GPL-3.0-or-later ## Copyright (c) 2024 interstellardevelopment.org class_name Carryable extends RigidBody3D var carried: bool = false var carried_by: NPC func _ready() -> void: if ($Area3D as Area3D).body_entered.connect(_on_body_entered): pass func carry() -> void: ($CollisionShape3D as CollisionShape3D).disabled = true freeze = true carried = true func uncarry() -> void: ($CollisionShape3D as CollisionShape3D).disabled = false freeze = false carried = false func _on_body_entered(body: Node) -> void: if Networking.isManager: if body is NPC and (body as NPC).phase == 2: carried_by = body Networking.pick_up_sync_call(carried_by, self) if body is Player and carried: Networking.incapacitate_sync_call(body as Player) func _physics_process(_delta: float) -> void: if Networking.isManager and sleeping and !carried: Networking.object_sync_call(position, rotation, name)