74 lines
2.5 KiB
GDScript
74 lines
2.5 KiB
GDScript
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.action_button.visible:
|
|
return _fail("extractor did not expose a contextual action")
|
|
if not scene.get_node("UI/EnterAtmosphereButton").visible:
|
|
return _fail("extractor action hid the separate landing action")
|
|
controller._on_context_action_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 from extractor while landing remained available" % 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
|