35 lines
936 B
GDScript
35 lines
936 B
GDScript
## 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)
|