diff options
| author | tpart <tpart120@proton.me> | 2025-10-23 19:22:20 +0200 |
|---|---|---|
| committer | tpart <tpart120@proton.me> | 2025-10-23 19:22:20 +0200 |
| commit | dc34f7f00f80cf001c207bcbb9182f58b3b10ac4 (patch) | |
| tree | 0a7424420f34bf01be9cec74d2a7cdfb5b50838a /client/map | |
| parent | dfee542542135e09b1f078f9c8f1df13fcf2f181 (diff) | |
| download | hurrycurry-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.gd | 17 |
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() |