feat: hero batch 3 — pedestrian footbridge + viaduct station platforms
- footbridge.glb: 18m truss footbridge over the central avenue one block south of the rail line — X-pattern teal trusses, mesh railings, real stair flights at both ends. Deck and stairs are WALKABLE (box deck collider + invisible ramp colliders over the stair visuals): a third elevated crossing route between the viaduct and the plaza, and a new grapple anchor over the avenue - platform.glb: station platform strips on the viaduct deck flanking the crossing — canopy on posts, benches, line signs; dresses the deck route players actually run - Fixed a parse error from an undefined color constant caught by the capture loop (blank render -> error -> fix -> verified) Movement 11/11, smoke 0 failures; full-city aerial verified. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
18f50adb78
commit
911066875b
@@ -301,3 +301,59 @@ phonebooth()
|
||||
busstop()
|
||||
bicycle()
|
||||
print("hero: batch 2 built")
|
||||
|
||||
|
||||
# ── Batch 3: footbridge + station platform ───────────────────────────────────
|
||||
|
||||
def footbridge():
|
||||
"""Pedestrian bridge: 18m deck, X-trusses, railings, stairs both ends."""
|
||||
clear()
|
||||
SPAN, DH = 18.0, 5.5
|
||||
box("deck", (SPAN, 3.0, 0.35), (0, 0, DH), GRAY, 0.03)
|
||||
box("deck_edge", (SPAN + 0.2, 3.2, 0.12), (0, 0, DH - 0.22), INK, 0.01)
|
||||
# side trusses: X pattern of rotated bars + top chord
|
||||
for sy in (-1, 1):
|
||||
y = sy * 1.45
|
||||
box("chord", (SPAN, 0.12, 0.12), (0, y, DH + 1.25), TEAL, 0.01)
|
||||
n = 6
|
||||
for i in range(n):
|
||||
x = -SPAN / 2 + SPAN / n * (i + 0.5)
|
||||
for ang in (0.6, -0.6):
|
||||
box("truss", (0.09, 0.09, 1.55), (x, y, DH + 0.62), TEAL, 0.0,
|
||||
rot=(0, ang, 0))
|
||||
# rail mesh
|
||||
box("rail", (SPAN, 0.05, 0.5), (0, y, DH + 0.55), mat("railmesh", (0.3, 0.32, 0.38)), 0.0)
|
||||
# stairs at both ends, descending outward along the bridge axis
|
||||
steps = 10
|
||||
for end in (-1, 1):
|
||||
for i in range(steps):
|
||||
z = DH - 0.3 - i * (DH - 0.3) / steps
|
||||
x = end * (SPAN / 2 + 0.5 + i * 0.62)
|
||||
box("step", (0.62, 2.6, 0.22), (x, 0, z), GRAY, 0.01)
|
||||
# stair rails
|
||||
box("stairrail", (steps * 0.64, 0.08, 0.08),
|
||||
(end * (SPAN / 2 + 0.4 + steps * 0.31), 1.25, DH * 0.55), INK, 0.0,
|
||||
rot=(0, end * -0.68, 0))
|
||||
export(os.path.join(OUT, "footbridge.glb"))
|
||||
|
||||
|
||||
def platform():
|
||||
"""Station platform strip for the viaduct deck: canopy, benches, signs."""
|
||||
clear()
|
||||
L = 14.0
|
||||
for i in range(4):
|
||||
x = -L / 2 + L / 4 * (i + 0.5)
|
||||
cyl("post", 0.1, 2.6, (x, 0, 1.3), METAL)
|
||||
box("proof", (L, 2.2, 0.12), (0, 0, 2.7), WHITE, 0.02)
|
||||
box("proof_edge", (L + 0.2, 2.4, 0.06), (0, 0, 2.6), TEAL, 0.01)
|
||||
for x in (-L / 4, L / 4):
|
||||
box("bench", (1.8, 0.45, 0.08), (x, 0.4, 0.5), WOOD, 0.01)
|
||||
for sx in (-1, 1):
|
||||
box("bleg", (0.08, 0.4, 0.5), (x + sx * 0.75, 0.4, 0.25), INK, 0.0)
|
||||
box("psign", (2.2, 0.1, 0.55), (0, 0.9, 2.15), mat("psign", (0.15, 0.35, 0.6)), 0.01)
|
||||
export(os.path.join(OUT, "platform.glb"))
|
||||
|
||||
|
||||
footbridge()
|
||||
platform()
|
||||
print("hero: batch 3 built")
|
||||
|
||||
Reference in New Issue
Block a user