feat(world): Materialien, Kollision und Laternen für die neuen Straßen

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Sonnet 5 committed 2026-09-17 21:26:18 +02:00
1 parent ca4f7161af
commit 25248b3929
8 files changed
+205 -110

No files matched your search

+6 -12
View File
@@ -74,18 +74,12 @@ def _sorted_surfaces(entries: list[dict]) -> list[dict]:
def _line(line, i: int, j: int) -> list[list[float]]:
"""Ein Linienzug in Chunk-Koordinaten, richtungsunabhängig festgelegt.
normalize() dreht eine Linie in eine feste Laufrichtung. Normalisieren und Sortieren ist für
curb und edges nur zulässig, solange keine Laterne ihre Straßenseite aus der Listenposition
wählt, sondern aus der Geometrie - Kantenrichtung und eine Prüfung gegen die Gehwegfläche.
Bei den früheren centerlines war das nicht so, deshalb blieben sie unsortiert und
unnormalisiert.
Eingelöst wird die Voraussetzung erst mit einer geometriebasierten Nachfolgefunktion in
props.js (vorgesehen als sidewalkLampPoints(), als Ablösung von vergeLampPoints()). Heute
liest dort noch niemand curb oder edges: vergeLampPoints() wählt die Seite weiterhin über den
geraden/ungeraden Index (Zeile 107) und läuft auf chunk.centerlines/chunk.roads. Bis zur
Ablösung ist das hier deshalb folgenlos - nicht weil die Bedingung gälte, sondern weil noch
kein Verbraucher zuhört.
normalize() dreht eine Linie in eine feste Laufrichtung, damit dieselbe Linie unabhängig vom
Rechenweg gleich in der Datei steht. Zulässig ist das, weil kein Verbraucher aus Richtung oder
Listenposition etwas ableitet: Die Laternen (sidewalkLampPoints() in props.js) suchen ihre
Straßenseite an der Gehwegfläche, und die Oberkante des Bordsteins (kerbGeometry() in
geometry.js) findet ihre Seite an der Fahrbahnfläche. Bei den früheren centerlines war das
nicht so, deshalb blieben sie unsortiert und unnormalisiert.
"""
ox = SLICE["x0"] + i * CHUNK_SIZE
oy = SLICE["y1"] - j * CHUNK_SIZE