Add DespawningItem

This commit is contained in:
JonShard
2026-07-28 10:39:34 +02:00
parent 3f951fef64
commit 7d694de307
12 changed files with 168 additions and 18 deletions
+43
View File
@@ -0,0 +1,43 @@
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:
print("SpeedSquare: ", _rigid.linear_velocity.length_squared())
# 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
print("DespawningItem resetting timer: ", get_parent())
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