Randoloot/tests/items/enemy_destruction_test.gd
2026-10-31 16:08:17 +01:00

51 lines
1.9 KiB
GDScript

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()