aboutsummaryrefslogtreecommitdiff
path: root/client/map
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2025-10-23 19:22:20 +0200
committertpart <tpart120@proton.me>2025-10-23 19:22:20 +0200
commitdc34f7f00f80cf001c207bcbb9182f58b3b10ac4 (patch)
tree0a7424420f34bf01be9cec74d2a7cdfb5b50838a /client/map
parentdfee542542135e09b1f078f9c8f1df13fcf2f181 (diff)
downloadhurrycurry-dc34f7f00f80cf001c207bcbb9182f58b3b10ac4.tar
hurrycurry-dc34f7f00f80cf001c207bcbb9182f58b3b10ac4.tar.bz2
hurrycurry-dc34f7f00f80cf001c207bcbb9182f58b3b10ac4.tar.zst
Fix items not despawning correctly when tile is changed while it's being destroyed (Closes #485)
Diffstat (limited to 'client/map')
-rw-r--r--client/map/items/item.gd17
1 files 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()