extends Node2D const EFFECT := preload("res://scripts/game/enemy_destruction_effect.gd") func _ready() -> void: run.call_deferred() func run() -> void: var source := Sprite2D.new() source.texture = preload("res://assets/alien_ships/alien_01.png") source.scale = Vector2.ONE*56.0/maxf(source.texture.get_width(),source.texture.get_height()) source.position = Vector2(100,80) add_child(source) for tier in 3: var effect := Node2D.new() effect.set_script(EFFECT) effect.play_audio = false effect.configure(source,Vector2(100,0),tier) add_child(effect) effect.set_process(false) assert(effect.global_position.is_equal_approx(source.global_position)) assert(effect._fragments.size() >= 18) assert(effect._bursts.size() == 3+tier) effect._process(0.1) assert(effect.global_position.x > source.global_position.x) assert(effect._bursts[0].visual.visible) effect._process(1.6) for burst in effect._bursts: assert(not burst.visual.visible) effect._process(1.0) assert(effect.is_queued_for_deletion()) await get_tree().process_frame # Actual enemy death must spawn the new effect and award the kill only once. var enemy := preload("res://scenes/game/enemy_ship.tscn").instantiate() add_child(enemy) enemy.get_node("Sprite2D").texture = source.texture enemy.take_damage(1e12) enemy.take_damage(1e12) assert(enemy.is_queued_for_deletion()) assert(get_tree().get_nodes_in_group("enemy_explosions").size() == 1) await get_tree().process_frame for index in 24: var effect := Node2D.new() effect.set_script(EFFECT) effect.play_audio = false effect.configure(source,Vector2.ZERO,0) add_child(effect) await get_tree().process_frame assert(get_tree().get_nodes_in_group("enemy_explosions").size() <= EFFECT.MAX_EFFECTS) for child in get_children(): child.queue_free() for frame in 3: await get_tree().process_frame print("ENEMY_DESTRUCTION_TEST: PASS (tiers, debris, drift, lifetime, enemy death, effect cap)") get_tree().quit()