Tilemap: Layer Z Index #174

Closed
opened 2026-09-19 13:38:52 +02:00 by admin · 2 comments

Die einzelnen Layers brauchen ein eigenes Z: die frage ist was besser wäre: absolut oder relativ zur tilemap Z (offset)

Die einzelnen Layers brauchen ein eigenes Z: die frage ist was besser wäre: absolut oder relativ zur tilemap Z (offset)
admin added the high-priority label 2026-09-19 13:38:52 +02:00
admin added this to the Development project 2026-09-19 13:39:01 +02:00
admin moved this to Next in Development on 2026-09-19 13:39:03 +02:00
Owner

Umgesetzt in 47eea2f (Wiki b79ed36).

Entscheidung: relativ (per Rückfrage gewählt). Das Z eines Layers ist ein Offset und wird auf das Z der platzierten Tilemap addiert, genauso wie das Z eines Kinds auf das seines Elternobjekts. Ein absolutes Z wäre hier auch nicht sauber gegangen: Die Layer gehören zum Asset, ein absoluter Wert hätte also für jede Platzierung derselben Map gleich gegolten.

Verhalten

  • Vorgabe 0: Alles bleibt wie vorher. Die Layer kommen direkt nach ihrer Map, in der Reihenfolge der Liste. Bestehende Projekte ändern sich nicht, ein Test prüft das.
  • Beispiel: Map Z 0, Figur Z 5, Layer „Roofs“ Z 10. Dann läuft die Figur zwischen Boden und Dächern. Wird die Map in Z verschoben, wandern alle Layer mit.
  • Negatives Z sortiert einen Layer unter die Map.
  • Bei gleichem Z entscheidet zwischen Layern die Reihenfolge der Liste, gegenüber anderen Objekten wie immer die Hierarchie.
  • Im Game gilt dieselbe Reihenfolge, auch wenn ein Run das Z der Map ändert.
  • Bedienung: Im Tilemap-Panel steht unter „Name“ das Feld Z für den gewählten Layer. Jede Änderung ist ein Undo-Schritt.

Technisch: Eine Tilemap zeichnet in einen Container pro Layer statt in einen für die ganze Map. Die Sortierung steckt in der reinen Funktion drawSlots (src/viewport/drawOrder.ts), die Editor-Szene und Game gemeinsam nutzen.

Tests

  • npm run check: 111 Dateien, 1594 Tests (vorher 1582), grün.
  • 12 neue Unit-Tests in tests/viewport/layer-z.test.ts: Kommando mit Undo/Redo, Laden und Speichern, Reihenfolge in Szene und Game, zwei Platzierungen derselben Map, negatives Z, Gleichstand, versteckte Layer und Symbole.
  • Gegenprobe mit 9 eingebauten Fehlern: 8 gefangen (einer davon erst durch einen nachgeschobenen Test), eine Mutation war gleichwertig zum Original.
  • Neuer e2e-Check 40p: −5 ins echte Feld getippt, der Layer liegt danach im Scene-View unter der Map und unter dem anderen Layer, Undo stellt es zurück. Module 39–43 lokal grün (102 Checks).

CI zu 47eea2f lief beim Schreiben noch. Die Check-Summe 1076 in README und Wiki ist deshalb nur gerechnet; das gemessene Ergebnis kommt als Nachtrag.

Umgesetzt in `47eea2f` (Wiki `b79ed36`). **Entscheidung: relativ** (per Rückfrage gewählt). Das Z eines Layers ist ein Offset und wird auf das Z der platzierten Tilemap addiert, genauso wie das Z eines Kinds auf das seines Elternobjekts. Ein absolutes Z wäre hier auch nicht sauber gegangen: Die Layer gehören zum Asset, ein absoluter Wert hätte also für jede Platzierung derselben Map gleich gegolten. **Verhalten** - Vorgabe 0: Alles bleibt wie vorher. Die Layer kommen direkt nach ihrer Map, in der Reihenfolge der Liste. Bestehende Projekte ändern sich nicht, ein Test prüft das. - Beispiel: Map Z 0, Figur Z 5, Layer „Roofs“ Z 10. Dann läuft die Figur zwischen Boden und Dächern. Wird die Map in Z verschoben, wandern alle Layer mit. - Negatives Z sortiert einen Layer unter die Map. - Bei gleichem Z entscheidet zwischen Layern die Reihenfolge der Liste, gegenüber anderen Objekten wie immer die Hierarchie. - Im Game gilt dieselbe Reihenfolge, auch wenn ein Run das Z der Map ändert. - Bedienung: Im Tilemap-Panel steht unter „Name“ das Feld **Z** für den gewählten Layer. Jede Änderung ist ein Undo-Schritt. **Technisch:** Eine Tilemap zeichnet in einen Container pro Layer statt in einen für die ganze Map. Die Sortierung steckt in der reinen Funktion `drawSlots` (`src/viewport/drawOrder.ts`), die Editor-Szene und Game gemeinsam nutzen. **Tests** - `npm run check`: 111 Dateien, 1594 Tests (vorher 1582), grün. - 12 neue Unit-Tests in `tests/viewport/layer-z.test.ts`: Kommando mit Undo/Redo, Laden und Speichern, Reihenfolge in Szene und Game, zwei Platzierungen derselben Map, negatives Z, Gleichstand, versteckte Layer und Symbole. - Gegenprobe mit 9 eingebauten Fehlern: 8 gefangen (einer davon erst durch einen nachgeschobenen Test), eine Mutation war gleichwertig zum Original. - Neuer e2e-Check 40p: −5 ins echte Feld getippt, der Layer liegt danach im Scene-View unter der Map und unter dem anderen Layer, Undo stellt es zurück. Module 39–43 lokal grün (102 Checks). **CI zu `47eea2f`** lief beim Schreiben noch. Die Check-Summe **1076** in README und Wiki ist deshalb nur gerechnet; das gemessene Ergebnis kommt als Nachtrag.
admin moved this to Done in Development on 2026-09-19 14:03:54 +02:00
Owner

Nachtrag CI zu 47eea2f: grün, in den Job-Logs selbst nachgelesen.

  • Gate (Task 150): 111 Testdateien grün, CHECK EXIT 0
  • Suite (Task 151): ALL PASSED – 1076 checks, Smokes 24 / 19 / 21

Die Summe 1076 ist damit bestätigt.

**Nachtrag CI zu `47eea2f`:** grün, in den Job-Logs selbst nachgelesen. - Gate (Task 150): 111 Testdateien grün, `CHECK EXIT 0` - Suite (Task 151): `ALL PASSED – 1076 checks`, Smokes 24 / 19 / 21 Die Summe 1076 ist damit bestätigt.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#174