Forgejo #19, part 6 of #12. Transporters are built at the ship crafter, fly themselves to the nearest hub and wait there. When a building is short of what its queue needs, the nearest idle transporter runs hub -> mothership -> building -> hub. Ore leaves the bank when it is loaded and lands in the building's stock on arrival, so what is drawn and what happens are the same event - the extractor hauler's rule. Production orders are now TYPED (interceptor / transporter) rather than a bare count, since the crafter builds two different things. One at a time is dispatched per building: without that, every idle transporter chases the same shortfall and they all arrive carrying ore nobody needs. Three fixes from play-testing feedback: - Storing ore into a building is now a deliberate button press, not a side effect of opening the menu. - The mothership's load-ore controls were positioned from the TOP of the screen, so on any viewport shorter than ~1300px the label fell off the bottom. They are anchored to the bottom edge now, and the label had no explicit font size so it inherited the theme's 78px and wrapped off screen. Checked at 720x960 and 720x1280. - The craft button looked live and did nothing. It was not the transport work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships, so the fleet is at its cap from the first frame and every interceptor order was refused. The button is now visibly disabled and says why. The underlying balance (crafter useless until Wing Doctrine) is left alone - that is a design call, not a bug to quietly change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
38 lines
1.5 KiB
GDScript
38 lines
1.5 KiB
GDScript
extends Node2D
|
|
|
|
# Preview, not a test. A transporter mid-run between the mothership and a
|
|
# building it is supplying, so the #19 vessel can actually be looked at
|
|
# alongside the hub that stations it. Headless draws no pixels.
|
|
#
|
|
# bash tests/screenshot.sh res://tests/_transporter_preview.tscn /tmp/t.png 25 1280x720
|
|
|
|
|
|
func _ready() -> void:
|
|
GameState.buildings.clear()
|
|
GameState.extractors.clear()
|
|
GameState.transporters.clear()
|
|
GameState.rocks = 200
|
|
GameState.add_building(GameState.BUILDING_MOTHERSHIP, Vector2(-420.0, 0.0))
|
|
GameState.add_building(GameState.BUILDING_TRANSPORT_HUB, Vector2(420.0, 0.0))
|
|
|
|
# One laden, mid-leg, and one running home empty, so both states show.
|
|
GameState.transporters.append({
|
|
"hub_id": 2, "state": GameState.TRANSPORTER_TO_BUILDING, "target_id": 2,
|
|
"carrying": 8, "progress": 0.45,
|
|
"from": Vector2(-420.0, 0.0), "to": Vector2(420.0, 0.0),
|
|
})
|
|
GameState.transporters.append({
|
|
"hub_id": 2, "state": GameState.TRANSPORTER_RETURNING, "target_id": 0,
|
|
"carrying": 0, "progress": 0.5,
|
|
"from": Vector2(-380.0, 150.0), "to": Vector2(420.0, 150.0),
|
|
})
|
|
|
|
var main: Node = load("res://Main.tscn").instantiate()
|
|
add_child(main)
|
|
main.get_node("AsteroidField").set_process(false)
|
|
main.get_node("EnemySpawner").set_process(false)
|
|
# Freeze the simulation so the vessels stay where they were placed.
|
|
GameState.set_process(false)
|
|
main.get_node("Fleet").move_to(Vector2(0.0, 260.0))
|
|
var cam: Camera2D = main.get_node("Camera2D")
|
|
cam.zoom = Vector2(0.85, 0.85)
|