33 lines
873 B
GDScript
33 lines
873 B
GDScript
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.set_down_sync_call(carried_by, self)
|
|
(body as Player).incapacitate()
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if Networking.isManager and sleeping and !carried:
|
|
Networking.object_sync_call(position, rotation, name)
|