Add manual extractor resource transfers

This commit is contained in:
Loïc Wisniewski 2026-08-14 22:21:01 +02:00
commit db0e6a0ec2
7 changed files with 180 additions and 14 deletions

View file

@ -0,0 +1,24 @@
extends Node2D
func _ready() -> void:
GameState.extractors.clear()
GameState.transporters.clear()
GameState.fleet_cargo = 9
GameState.fleet_gas_cargo = 4
var main: Node = load("res://Main.tscn").instantiate()
add_child(main)
var planet: Node2D
for planets in main.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
GameState.add_extractor(planet.planet_name, planet.position, planet.resource_type, planet.planet_id)
var index: int = GameState.extractors.size() - 1
GameState.extractors[index].inventory.deposit(planet.resource_type, 38)
var controller: Node = main.get_node("BuildController")
controller.transfer_extractor_index = index
main.get_node("UI/TransferMenu").visible = true
controller._refresh_transfer()

View file

@ -0,0 +1,4 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://tests/_extractor_transfer_preview.gd" id="1"]
[node name="ExtractorTransferPreview" type="Node2D"]
script = ExtResource("1")

View file

@ -0,0 +1,74 @@
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

View file

@ -0,0 +1 @@
uid://0ghcdnlq2vd2