Rebuild the fire hydrant silhouette (flange, bonnet, outlets)
Full build / Import + headless tests (push) Successful in 53s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 21:56:28 +01:00
1 parent 7dd8251a0c
commit 5bab6754c0
5 files changed
+22 -13

No files matched your search

+7 -7
View File
@@ -262,14 +262,14 @@
"fire_hydrant": {
"bounds_godot": {
"max": [
0.24,
0.76,
0.19
0.265,
0.815,
0.235
],
"min": [
-0.24,
-0.265,
0,
-0.19
-0.235
]
},
"category": "props",
@@ -279,8 +279,8 @@
],
"path": "assets/models/blender/props/fire_hydrant.glb",
"replaces": "generated/fire_hydrant.glb",
"triangles": 466,
"vertices": 725
"triangles": 610,
"vertices": 902
},
"firefighter_helmet": {
"attach": "head",
Binary file not shown.
+1 -1
View File
@@ -144,7 +144,7 @@ the first candidates for a `vegetation-artist`/lookdev pass.
| `trash_bin` | 228 | — |
| `planter_box` | 1,324 | — |
| `newspaper_box` | 244 | — |
| `fire_hydrant` | 466 | — |
| `fire_hydrant` | 610 | accept (2026-11-03 rebuild: bolted flange, bonnet cap nut, larger side + front outlets) |
| `street_lamp` | 428 | — |
| `street_tree` | 2,592 | P1 candidate (flat-shaded clumps) |
| `palm_tree` | 400 | P1 candidate (same foliage language) |
Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 52 KiB

+14 -5
View File
@@ -1303,17 +1303,26 @@ def build_prop(name):
p.append(box("Paper", (0.26, 0.004, 0.14), (0, -0.168, 0.60), M("paper")))
p.append(box("Handle", (0.14, 0.03, 0.02), (0, -0.18, 0.47), M("steel"), bevel=0.006))
p.append(box("Coin", (0.06, 0.02, 0.08), (0.14, -0.175, 0.76), M("steel"), bevel=0.005))
elif name == "fire_hydrant": # r 0.15-0.19, h ~0.74
p.append(lathe("Hydrant", [(0.19, 0.0), (0.19, 0.06), (0.15, 0.09), (0.14, 0.52),
elif name == "fire_hydrant": # r 0.19 body, h ~0.76 + flange, bonnet and outlets
# Bolted base flange so the ground seam reads as a bolted fitting.
p.append(lathe("Flange", [(0.235, 0.0), (0.235, 0.03), (0.19, 0.06)],
M("hydrant_red"), seg=12, sharp=30))
p.append(lathe("Hydrant", [(0.19, 0.06), (0.15, 0.09), (0.14, 0.52),
(0.17, 0.55), (0.17, 0.60), (0.12, 0.66), (0.05, 0.72),
(0.05, 0.75), (0.0, 0.76)], M("hydrant_red"), seg=12,
sharp=30))
# Bonnet cap nut on top so the dome reads as a valve, not a bottle.
p.append(sphere("BonnetNut", 0.035, (0, 0, 0.78), M("chrome"), seg=8, rings=5))
for s in (-1.0, 1.0):
p.append(cyl("Nozzle", 0.05, 0.05, 0.10, (0.17 * s, 0, 0.40), M("hydrant_red"),
# Larger side outlets so they register in profile.
p.append(cyl("Nozzle", 0.062, 0.055, 0.12, (0.17 * s, 0, 0.40), M("hydrant_red"),
seg=10, rot=(0, math.radians(90), 0)))
p.append(cyl("Cap", 0.055, 0.055, 0.03, (0.225 * s, 0, 0.40), M("chrome"), seg=6,
p.append(cyl("Cap", 0.068, 0.068, 0.04, (0.245 * s, 0, 0.40), M("chrome"), seg=6,
rot=(0, math.radians(90), 0), smooth=False))
p.append(cyl("FrontCap", 0.065, 0.065, 0.05, (0, -0.16, 0.40), M("chrome"), seg=6,
# Front outlet (faces -Y = the street) with a proper chrome cap.
p.append(cyl("FrontNozzle", 0.072, 0.06, 0.06, (0, -0.155, 0.40), M("hydrant_red"),
seg=10, rot=(math.radians(90), 0, 0)))
p.append(cyl("FrontCap", 0.082, 0.082, 0.04, (0, -0.215, 0.40), M("chrome"), seg=6,
rot=(math.radians(90), 0, 0), smooth=False))
for a in range(6):
ang = math.tau * a / 6