Randoloot/tests/levels/exploration_test.gd
2026-10-11 21:19:40 +02:00

73 lines
2.8 KiB
GDScript

extends Node2D
const POI = preload("res://scripts/levels/exploration_poi.gd")
func _ready() -> void:
GameState.start_new_run()
var ship = preload("res://scenes/game/player_ship.tscn").instantiate()
ship.name = "PlayerShip"
add_child(ship)
ship.set_physics_process(false)
ship.get_node("WeaponController").set_physics_process(false)
var inv = ship.get_node("ShipInventory")
for kind in ["wreck", "asteroid", "ruin"]:
for index in 12:
var poi = StaticBody2D.new()
poi.set_script(POI)
poi.kind = kind
poi.player = ship
poi.reward_seed = index + 1
poi.poi_id = kind + str(index)
add_child(poi)
if kind == "asteroid":
poi.take_weapon_hit(poi.hull - 1)
assert(not poi._claimed and is_equal_approx(poi.hull, 1))
poi.take_weapon_hit(1)
assert(poi._claimed)
else:
assert(poi.claim())
assert(not poi.claim())
await get_tree().process_frame
assert(GameState.captain.parts > 0)
assert(inv.ammunition > 50 and inv.missile_ammunition > 2)
assert(GameState.captain.minerals.iron + GameState.captain.minerals.titanium + GameState.captain.minerals.aluminium > 0)
var ancient = 0
var modules: Array = inv.cargo.filter(func(item): return item != null)
for loot in get_tree().get_nodes_in_group("loot"):
modules.append(loot.item)
for item in modules:
if item.item_level == 2:
ancient += 1
assert(item.get_addon_count() >= 4)
for modifier in item.additional_modifiers:
var bounds = modifier.affix.get_value_range(2)
assert(modifier.value >= lerpf(bounds.x, bounds.y, 0.9) - 0.00001)
assert(ancient == 12)
var discovery = StaticBody2D.new()
discovery.set_script(POI)
discovery.kind = "ruin"
discovery.player = ship
discovery.poi_id = "auto-discovery"
discovery.position = Vector2(1000, 0)
discovery.approach_radius = 200
add_child(discovery)
assert(discovery._label.text == "?")
discovery._physics_process(0)
assert(not discovery._claimed)
ship.position = Vector2(810, 0)
discovery._physics_process(0)
assert(discovery._claimed and GameState.explored_pois.has("auto-discovery"))
assert(not discovery.claim())
var data = preload("res://scripts/levels/system_generator.gd").generate(1, 1234)
var bodies = Node2D.new()
bodies.name = "CelestialBodies"
add_child(bodies)
preload("res://scripts/levels/exploration_generator.gd").spawn(self, data, ship)
var generated = get_tree().get_nodes_in_group("exploration_pois").filter(func(p): return not p.is_queued_for_deletion())
assert(generated.size() >= 8 and generated.size() <= 14)
var probe = generated[0]
assert(probe.reward_scale() == 1.0)
GameState.system_level = 10
assert(is_equal_approx(probe.reward_scale(), 1.45))
GameState.system_level = 1
print("EXPLORATION_TEST: PASS rewards, duplicate prevention, minerals, ancient level+1 and high addons, generation")
get_tree().quit()