From c577f0a57cb064be035ac4052c0e5acd7da16c7e Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Fri, 17 Feb 2023 12:37:53 -0500 Subject: [PATCH] fix crash when arrows collide with multiple things at once (fixes #50) --- maps/test_room.tscn | 10 +++++++++- objects/player/arrow_projectile.gd | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/maps/test_room.tscn b/maps/test_room.tscn index c8873aa..e0ccb69 100644 --- a/maps/test_room.tscn +++ b/maps/test_room.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=2] +[gd_scene load_steps=19 format=2] [ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=1] [ext_resource path="res://tilesets/t_cave.tres" type="TileSet" id=2] @@ -16,6 +16,7 @@ [ext_resource path="res://objects/environment/falling_block/falling_block.tscn" type="PackedScene" id=14] [ext_resource path="res://objects/environment/moving_platform/moving_platform.tscn" type="PackedScene" id=15] [ext_resource path="res://objects/respawn_point.tscn" type="PackedScene" id=16] +[ext_resource path="res://objects/player/arrow_projectile.tscn" type="PackedScene" id=17] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 16, 20 ) @@ -117,3 +118,10 @@ position = Vector2( 88, 160 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="RespawnPoint"] position = Vector2( 0, -4 ) shape = SubResource( 1 ) + +[node name="ArrowProjectile" parent="." instance=ExtResource( 17 )] +position = Vector2( 128, 128 ) + +[node name="ArrowProjectile2" parent="." instance=ExtResource( 17 )] +position = Vector2( 198, 130 ) +speed = 0.0 diff --git a/objects/player/arrow_projectile.gd b/objects/player/arrow_projectile.gd index d197081..41279c0 100644 --- a/objects/player/arrow_projectile.gd +++ b/objects/player/arrow_projectile.gd @@ -64,6 +64,10 @@ func _exit_tree(): get_tree().create_timer(particles.lifetime, false).connect("timeout", particles, "queue_free") func _make_sparks(): + # return if this has already happened to avoid crash + if is_queued_for_deletion(): + return + var particles = $SparkParticles remove_child(particles) particles.global_position = global_position + particles.position * scale.x