30 lines
715 B
GDScript3
30 lines
715 B
GDScript3
|
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()
|