From dc34f7f00f80cf001c207bcbb9182f58b3b10ac4 Mon Sep 17 00:00:00 2001 From: tpart Date: Thu, 23 Oct 2025 19:22:20 +0200 Subject: Fix items not despawning correctly when tile is changed while it's being destroyed (Closes #485) --- client/map/items/item.gd | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/client/map/items/item.gd b/client/map/items/item.gd index bf7c60ed..d3e84e06 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -71,19 +71,22 @@ func animate_spawn(): scale = Vector3.ONE * 0.001 # setting to zero breaks assertions somewhere in the engine func _process(delta): - if not is_instance_valid(owned_by): return - if owned_by.get_parent() is Item or owned_by is Item: return - var player_owned = owned_by.get_parent().get_parent() is Player - player_owned_timer = player_owned_timer + delta if player_owned else 0. - var anim_speed = 10.0 * exp(player_owned_timer * 3.0) # infinity is fine. G.interpolate can handle it - position = G.interpolate(position, position_target, delta * anim_speed) - rotation.y = G.interpolate_angle(rotation.y, rotation_target, delta * anim_speed) + # Update position + if is_instance_valid(owned_by): + if owned_by.get_parent() is Item or owned_by is Item: return + var player_owned = owned_by.get_parent().get_parent() is Player + player_owned_timer = player_owned_timer + delta if player_owned else 0. + var anim_speed = 10.0 * exp(player_owned_timer * 3.0) # infinity is fine. G.interpolate can handle it + position = G.interpolate(position, position_target, delta * anim_speed) + rotation.y = G.interpolate_angle(rotation.y, rotation_target, delta * anim_speed) + # Fade in if creation_timer != null: creation_timer += delta * 10.0 if creation_timer > 1: scale = Vector3.ONE creation_timer = null else: scale = Vector3.ONE * creation_timer + # Fade out if destroy_timeout != null: destroy_timeout -= delta * 5.0 if is_instance_valid(progress_instance): progress_instance.hide() -- cgit v1.3