Randoloot/tests/levels/enemy_tiers_test.gd
2026-10-17 18:37:56 +02:00

39 lines
1.5 KiB
GDScript

extends Node
const BALANCE := preload("res://scripts/levels/level_balance.gd")
const GENERATOR := preload("res://scripts/levels/system_generator.gd")
const ENEMY := preload("res://scenes/game/enemy_ship.tscn")
func _ready() -> void:
assert(BALANCE.enemy_tiers(1).count(0) == 8)
assert(preload("res://resources/items/gamma_cannon.tres").weapon_range == 300.0)
for level in range(2, 1001):
assert(BALANCE.enemy_count(level) >= BALANCE.enemy_count(level - 1))
for level in range(1, 1001):
var tiers := BALANCE.enemy_tiers(level)
assert(tiers.count(1) == 2 and tiers.count(2) == 1)
assert(tiers.size() == BALANCE.enemy_count(level))
assert(tiers.count(0) >= 2)
for level in [1, 10, 100, 1000]:
var data: Dictionary = GENERATOR.generate(level, 314159)
var elites := 0
var bosses := 0
for entry in data["enemies"]:
elites += 1 if entry["tier"] == 1 else 0
bosses += 1 if entry["tier"] == 2 else 0
assert(elites == 2 and bosses == 1)
for tier in 3:
var enemy := ENEMY.instantiate() as CharacterBody2D
add_child(enemy)
enemy.set_physics_process(false)
enemy.call("apply_level_settings", 1, tier)
var bar := enemy.get_node("HealthBar")
bar.call("_process", 0.0)
var label := bar.get_child(0) as Label
assert(label.text == ["", "ELITA", "BOSS"][tier])
assert(label.light_mask == 4)
assert(enemy.get_node("Sprite2D").modulate == enemy.call("get_tier_tint"))
enemy.queue_free()
print("ENEMY_TIERS_TEST: PASS (1000 levels, generated encounters, exactly two elites/one boss, tint and labels)")
get_tree().quit()