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