Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the hauling are #19. Placeable, costed at 30, gated behind a new "Freight Handling" research node hanging off Logistics, with its own info popup, build-menu glyph and map marker. Drawn as an octagonal dock ring with berth arms and a squared-off freight core: deliberately radial-but-flat so it does not read as a small mothership, which is the only structure with swept arms. Its stationed transports are NeonPiece children of one rotating holder, per #10 - the geometry is rasterised once and only the holder's rotation changes, so the traffic costs no redraws. Building._draw()'s match has a catch-all that renders anything unrecognised as a ship crafter, so a missing case is silent and looks almost right. The test checks for the hub's own _hub_traffic holder rather than trusting that something plausible appeared - which caught exactly that: a _ready() patch had silently not applied and the hub was rendering through the crafter branch. The build menu grew a third row. Every button, label and price moved: the old row occupied 332px against a 372px pitch, and three of those do not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px price digits) at a 290px pitch, ending at y=1176. Rendered and looked at - the first attempt tightened the pitch alone and left every price overlapping the row beneath it, which no headless test would have seen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ff162faef5
commit
823828f3b3
10 changed files with 400 additions and 52 deletions
|
|
@ -15,7 +15,7 @@ enum Icon {
|
|||
# build menu used to pick from the generic set, which left the mothership
|
||||
# and the command centre sharing a folded-map glyph and neither of them
|
||||
# looking anything like the structure they build.
|
||||
MOTHERSHIP, CRAFTER, COMMAND_CENTER, EXTRACTOR,
|
||||
MOTHERSHIP, CRAFTER, COMMAND_CENTER, EXTRACTOR, TRANSPORT_HUB,
|
||||
}
|
||||
|
||||
# Size the glyphs were originally drawn against. Every glyph dimension is
|
||||
|
|
@ -119,6 +119,8 @@ func _draw() -> void:
|
|||
_draw_command_icon(center, pulse, s)
|
||||
Icon.EXTRACTOR:
|
||||
_draw_extractor_icon(center, pulse, s)
|
||||
Icon.TRANSPORT_HUB:
|
||||
_draw_transport_hub_icon(center, pulse, s)
|
||||
|
||||
|
||||
func _draw_close(center: Vector2, pulse: float, s: float) -> void:
|
||||
|
|
@ -204,6 +206,32 @@ func _draw_mothership_icon(center: Vector2, pulse: float, s: float) -> void:
|
|||
NeonDraw.draw_glowing_polygon(self, ring, _active_color(), pulse, core_color)
|
||||
|
||||
|
||||
func _draw_transport_hub_icon(center: Vector2, pulse: float, s: float) -> void:
|
||||
# A ring of docking cradles with a freight box in the middle: reads as
|
||||
# "things are stationed here and go out from here", which is what the hub
|
||||
# does, and shares no silhouette with the crafter's open cradle.
|
||||
var ring_r: float = 11.0 * s
|
||||
var ring: PackedVector2Array = PackedVector2Array()
|
||||
for i in range(8):
|
||||
var a: float = (float(i) / 8.0) * TAU + PI / 8.0
|
||||
ring.append(center + Vector2(cos(a), sin(a)) * ring_r)
|
||||
NeonDraw.draw_glowing_polygon(self, ring, _active_color(), pulse, core_color)
|
||||
|
||||
var box: float = 4.2 * s
|
||||
NeonDraw.draw_glowing_polygon(self, PackedVector2Array([
|
||||
center + Vector2(-box, -box), center + Vector2(box, -box),
|
||||
center + Vector2(box, box), center + Vector2(-box, box),
|
||||
]), _active_color(), pulse, core_color)
|
||||
|
||||
# Three stubby berths, so the ring reads as occupied rather than as a
|
||||
# plain octagon.
|
||||
for i in range(3):
|
||||
var a: float = (float(i) / 3.0) * TAU - PI / 2.0
|
||||
var dir: Vector2 = Vector2(cos(a), sin(a))
|
||||
NeonDraw.draw_glowing_line(self, center + dir * (box * 1.5),
|
||||
center + dir * (ring_r - 1.5 * s), _active_color(), pulse, 0.35 * s, core_color)
|
||||
|
||||
|
||||
func _draw_crafter_icon(center: Vector2, pulse: float, s: float) -> void:
|
||||
# Reactor core, truss spine, and an open cradle holding a hull.
|
||||
var core_centre: Vector2 = center + Vector2(-11, 0) * s
|
||||
|
|
|
|||
Loading…
Reference in a new issue