spaceship/tests/test_extractor_transfer.gd

76 lines
2.6 KiB
GDScript3
Raw Normal View History

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