Randoloot/tests/abilities/scanner_test.gd
2026-10-12 22:16:09 +02:00

56 lines
3.0 KiB
GDScript

extends Node2D
const GENERATOR := preload("res://scripts/items/item_generator.gd")
func _ready() -> void:
GameState.start_new_run()
var ship := preload("res://scenes/game/player_ship.tscn").instantiate() as CharacterBody2D
add_child(ship)
ship.set_physics_process(false)
var weapons := ship.get_node("WeaponController")
weapons.set_physics_process(false)
var inventory := ship.get_node("ShipInventory") as ShipInventory
assert(inventory.module_slots.size() == 5 and inventory.extension_slots.size() == 5)
var overlay := ship.get_node("ScannerOverlay").get_child(0)
var base_range: float = overlay.call("get_scan_range")
var energy_before: float = ship.get("energy")
var target := Node2D.new()
target.position = Vector2(base_range + 100.0, 0)
add_child(target)
target.add_to_group("exploration_pois")
assert(not overlay.call("is_target_in_range", target))
var computer := GENERATOR.generate_for_definition(preload("res://resources/items/ship_computer.tres"), 5)
assert(computer.get_addon_count() > 0)
assert(inventory.add_item(computer))
for index in 4:
assert(not inventory.can_move_item("cargo", inventory.cargo.find(computer), "module", index))
assert(not inventory.can_move_item("cargo", inventory.cargo.find(computer), "extension", 0))
assert(inventory.move_item("cargo", inventory.cargo.find(computer), "module", 4))
assert(overlay.call("is_target_in_range", target))
overlay.call("_process", 20.0)
assert(overlay.get("targets").has(target) and ship.get("energy") == energy_before)
for definition in GENERATOR.DEFINITIONS:
if definition.category == ItemDefinition.Category.ACTIVE_EXTENSION:
var extension := GENERATOR.generate_for_definition(definition, 1000, 2)
assert(extension.additional_modifiers.is_empty())
assert(inventory.add_item(extension))
assert(not inventory.can_move_item("cargo", inventory.cargo.find(extension), "module", 0))
assert(inventory.move_item("cargo", inventory.cargo.find(extension), "extension", 0))
var launcher := ItemInstance.new()
launcher.definition = ShipInventory.MISSILE_DEFINITIONS[0]
assert(inventory.add_item(launcher))
for index in 3:
assert(inventory.move_item("cargo", inventory.cargo.find(launcher), "weapon", index))
weapons.set("missile_cooldown_remaining", 0.0)
inventory.missile_ammunition = 1
assert(weapons.call("try_fire_missile", index))
assert(inventory.move_item("weapon", index, "cargo", inventory.cargo.find(null)))
assert(inventory.move_item("module", 4, "cargo", inventory.cargo.find(null)))
assert(is_equal_approx(overlay.call("get_scan_range"), base_range))
assert(not overlay.call("is_target_in_range", target))
inventory.preserve_for_restart()
var restored := preload("res://scenes/game/player_ship.tscn").instantiate()
add_child(restored)
restored.set_physics_process(false)
assert(restored.get_node("ShipInventory").extension_slots[0] == inventory.extension_slots[0])
print("SCANNER_TEST: PASS categories, extensions without addons, passive range, computer removal, all weapon slots, restart")
get_tree().quit()