42 lines
1.1 KiB
GDScript
42 lines
1.1 KiB
GDScript
extends Node
|
|
class_name DespawningItem
|
|
|
|
@export var time_to_despawn: float = 8
|
|
|
|
# The minimum speed required to reset despawn timer.
|
|
@export var minimum_speed_square: float = 0.1
|
|
|
|
|
|
@onready var _pickable: XRToolsPickable = get_parent() as XRToolsPickable
|
|
@onready var _rigid: RigidBody3D = get_parent() as RigidBody3D
|
|
|
|
|
|
var _time_left: float = time_to_despawn
|
|
|
|
func _ready() -> void:
|
|
if not _pickable:
|
|
push_error("DespawningItem must be a grand child of an XRToolsPickable.")
|
|
return
|
|
if not _rigid:
|
|
push_error("DespawningItem must be a grand child of an RigidBody3D.")
|
|
return
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
# if we're held or moving, reset timer and return
|
|
if _pickable.get_picked_up_by() or _rigid.linear_velocity.length_squared() > pow(minimum_speed_square,2):
|
|
_time_left = time_to_despawn
|
|
get_parent().visible = true
|
|
return
|
|
|
|
|
|
# Count down to zero and despawn
|
|
_time_left -= delta
|
|
if _time_left <= 0:
|
|
print("DespawningItem despawning!" , get_parent())
|
|
NetworkManager.despawn_item(get_parent())
|
|
|
|
# Make item blink in and out before despawning
|
|
if _time_left < time_to_despawn / 2:
|
|
get_parent().visible = int(_time_left * 5.0) %2 == 0
|