extends SceneTree var state: Node var scene: Node var fleet: Node var controller: Node var planet: Node2D var extractor_index: int = -1 var resource_type: String var stage: int = 0 var elapsed: float = 0.0 func _initialize() -> void: state = root.get_node("GameState") state.extractors.clear() state.transporters.clear() state.fleet_cargo = 0 state.fleet_gas_cargo = 0 scene = load("res://Main.tscn").instantiate() root.add_child(scene) fleet = scene.get_node("Fleet") controller = scene.get_node("BuildController") func _process(delta: float) -> bool: elapsed += delta match stage: 0: scene.get_node("AsteroidField").set_process(false) scene.get_node("EnemySpawner").set_process(false) for planets in scene.get_node("PlanetField").populated_chunks.values(): if not planets.is_empty() and is_instance_valid(planets[0]): planet = planets[0] break if planet == null: return _fail("no nearby generated planet available") resource_type = planet.resource_type state.add_extractor(planet.planet_name, planet.position, resource_type, planet.planet_id) extractor_index = state.extractors.size() - 1 state.extractors[extractor_index].inventory.deposit(resource_type, 12) for ship in fleet.ships: ship.position = planet.position fleet.move_to(planet.position) elapsed = 0.0 stage = 1 return false 1: if elapsed < 1.2: return false if controller.current_extractor_index != extractor_index or not controller.transfer_button.visible: return _fail("extractor did not expose the transfer shortcut") if not controller.action_button.visible \ or controller.action_button.icon != controller.landing_button.icon \ or controller.landing_button.visible: return _fail("landing was not folded into the shared action control") controller._on_transfer_pressed() if not controller.transfer_menu.visible or controller.transfer_list.extractor_index != extractor_index: return _fail("transfer panel did not bind to the extractor") var before: int = state.fleet_resource(resource_type) controller._on_resource_transfer(resource_type, false, 5) if state.fleet_resource(resource_type) != before + 5: return _fail("fleet did not fetch five resources from extractor") if state.extractor_resource(extractor_index, resource_type) < 7: return _fail("extractor transfer removed too much stock") print("fleet fetched %s while landing remained the contextual action" % resource_type) print("TEST_EXTRACTOR_TRANSFER: PASS") quit(0) return true return false func _fail(message: String) -> bool: print("TEST_EXTRACTOR_TRANSFER: FAIL (%s)" % message) quit(1) return true