Remove the one-way ore API superseded by the transfer menu
The loose end from #24. withdraw_to_fleet, unload_into_building and deliver_cargo were the old one-way moves behind "Load ore" and "Store ore here"; every one of them is a special case of transfer_to_building / transfer_to_fleet, and none had a caller left outside tests. The cargo_delivered signal had no listeners at all. Not just tidying: unload_into_building routed through deposit_to_building, which does NOT special-case the mothership - it writes b.stock, while building_holdings() returns `rocks` for a mothership and ignores stock entirely. So unload_into_building( mothership_id) would have parked ore in a field nothing reads, with no error. Nothing called it that way, but it is a plausibly-named function sitting there to be reached for later. transfer_to_building handles it. CARGO_LOAD_BATCH stays - the transfer menu's batch buttons use it; only its role as withdraw_to_fleet's default argument is gone. The #24 note expected folding these in to be costly for test_cargo_readout, which places no buildings. It is not: the transfer primitives work off GameState records rather than spawned nodes, so a single add_building() in setup is enough and it stays a display test. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
fe1c721d64
commit
b6427b080d
27 changed files with 1085 additions and 275 deletions
|
|
@ -14,9 +14,10 @@ extends SceneTree
|
|||
# Verifies:
|
||||
# 1. withdrawing moves ore bank -> hold, and conserves the total
|
||||
# 2. withdrawing is capped by what is actually banked (no overdraft)
|
||||
# 3. arriving at the mothership banks the hold, but doing so is EDGE
|
||||
# triggered - ore withdrawn while parked there is not instantly taken
|
||||
# back, which would make the button look broken
|
||||
# 3. arriving at the mothership does NOT bank the hold. It used to, edge
|
||||
# triggered on arrival (#14); #24 removed that entirely, because an
|
||||
# automatic one-way move overrides a player who has just loaded the
|
||||
# hold in order to carry ore somewhere else
|
||||
# 4. a building takes the fleet's whole hold when opened
|
||||
# 5. end to end: a queued order the bank cannot reach is fulfilled using
|
||||
# only the fleet, with no Transport Hub in existence
|
||||
|
|
@ -28,6 +29,7 @@ var fleet: Node
|
|||
var field: Node
|
||||
var controller: Node
|
||||
var crafter_id: int = 0
|
||||
var mothership_id: int = 0
|
||||
var stage: int = 0
|
||||
var elapsed: float = 0.0
|
||||
var ships_before: int = 0
|
||||
|
|
@ -74,6 +76,7 @@ func _process(delta: float) -> bool:
|
|||
_clear_hazards()
|
||||
fleet.spawn_ships(2, MOTHERSHIP_AT)
|
||||
field.place(GameState.BUILDING_MOTHERSHIP, MOTHERSHIP_AT)
|
||||
mothership_id = int(game_state.buildings[-1].id)
|
||||
field.place(GameState.BUILDING_SHIP_CRAFTER, CRAFTER_AT)
|
||||
crafter_id = int(game_state.buildings[-1].id)
|
||||
total_before = _total()
|
||||
|
|
@ -107,7 +110,7 @@ func _process(delta: float) -> bool:
|
|||
if elapsed < 0.3:
|
||||
return false
|
||||
var bank_before: int = game_state.rocks
|
||||
var took: int = game_state.withdraw_to_fleet(GameState.SHIP_COST)
|
||||
var took: int = game_state.transfer_to_fleet(mothership_id, GameState.SHIP_COST)
|
||||
if took != GameState.SHIP_COST or game_state.fleet_cargo != GameState.SHIP_COST:
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (withdrew %d into a hold of %d)" % [took, game_state.fleet_cargo])
|
||||
quit(1)
|
||||
|
|
@ -123,14 +126,22 @@ func _process(delta: float) -> bool:
|
|||
stage = 4
|
||||
return false
|
||||
4:
|
||||
# --- 3. still parked on the mothership ----------------------
|
||||
# --- 3. parked on the mothership, and arriving again --------
|
||||
if elapsed < 0.5:
|
||||
return false
|
||||
if game_state.fleet_cargo != GameState.SHIP_COST:
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (ore withdrawn while parked on the mothership was instantly banked again - delivery is not edge triggered)")
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (ore withdrawn while parked on the mothership was banked again by itself)")
|
||||
quit(1)
|
||||
return true
|
||||
print("still parked -> hold kept its %d (delivery is edge triggered)" % game_state.fleet_cargo)
|
||||
# Leaving and coming back is the case the old edge-triggered
|
||||
# delivery fired on, so it is the one worth re-entering.
|
||||
_park_fleet_on(CRAFTER_AT)
|
||||
_park_fleet_on(MOTHERSHIP_AT)
|
||||
if game_state.fleet_cargo != GameState.SHIP_COST:
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (arriving at the mothership auto-banked the hold - #24 removed that)")
|
||||
quit(1)
|
||||
return true
|
||||
print("hold kept its %d across an arrival (no auto-banking)" % game_state.fleet_cargo)
|
||||
|
||||
# --- 4. carry it to the crafter and open it -----------------
|
||||
_park_fleet_on(CRAFTER_AT)
|
||||
|
|
@ -140,7 +151,7 @@ func _process(delta: float) -> bool:
|
|||
5:
|
||||
if elapsed < 0.6:
|
||||
return false
|
||||
var moved: int = game_state.unload_into_building(crafter_id)
|
||||
var moved: int = game_state.transfer_to_building(crafter_id, game_state.fleet_cargo)
|
||||
if moved != GameState.SHIP_COST or game_state.fleet_cargo != 0:
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (unloaded %d, hold left at %d)" % [moved, game_state.fleet_cargo])
|
||||
quit(1)
|
||||
|
|
@ -180,7 +191,7 @@ func _process(delta: float) -> bool:
|
|||
|
||||
# --- 2. no overdraft ----------------------------------------
|
||||
game_state.rocks = 3
|
||||
var over: int = game_state.withdraw_to_fleet(999)
|
||||
var over: int = game_state.transfer_to_fleet(mothership_id, 999)
|
||||
if over != 3 or game_state.rocks != 0:
|
||||
print("TEST_MANUAL_SUPPLY_ROUTE: FAIL (overdrew: took %d from a bank of 3, leaving %d)" % [over, game_state.rocks])
|
||||
quit(1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue