Tilemap: Raster an allen Seiten erweitern und verkleinern #136

Closed
opened 2026-09-18 08:03:56 +02:00 by meleki · 1 comment
Owner

Aufgefallen beim Durchsehen von #128: Das Raster wächst und schrumpft nur rechts und unten.

Befund

  • Die Rastergröße sind die Properties Columns und Rows (src/core/model/tilemap.ts:16). Zelle 0,0 ist immer oben links, eine Größenänderung verschiebt keine Zelle. Was außerhalb liegt, wird nicht gezeichnet und kommt beim Vergrößern zurück (src/core/model/tilemap.ts:8).
  • Wer links oder oben Platz braucht, muss heute alles neu malen.
  • Die Karte ist um ihre Position zentriert. Schon beim heutigen Vergrößern nach rechts wandert der sichtbare Inhalt deshalb in der Szene nach links.

Zu bauen

  • Spalten und Zeilen links und oben hinzufügen und entfernen, im Inspector der Tilemap. Die Zellen werden dabei verschoben, und zwar auf allen Layern.
  • Der gemalte Inhalt bleibt dabei an seiner Stelle in der Szene, die Position der Platzierung wird entsprechend nachgezogen.
  • Ein Vorgang ist ein Undo-Schritt.
  • Tests: Unit-Tests für das Verschieben (alle Layer, Zellen außerhalb, Entfernen mit bemalten Zellen), e2e für Anbauen links samt Undo.

Offen (mit Vorschlag)

  • Zellen hängen am Asset, die Größe ist pro Platzierung überschreibbar: Verschiebt man die Zellen, verschiebt sich der Inhalt in allen Platzierungen dieser Tilemap. Vorschlag: Die Position nur an der bearbeiteten Platzierung nachziehen und im Inspector darauf hinweisen, wenn es weitere Platzierungen gibt.
  • Entfernen mit bemalten Zellen: Vorschlag: wie beim Verkleinern heute nichts wegwerfen. Die Zellen landen außerhalb (negative Koordinaten) und kommen beim Wiederanbauen zurück.
  • Mitte beim Vergrößern: Soll auch das heutige Anbauen rechts/unten den Inhalt an seiner Stelle lassen? Vorschlag: ja, gleich mit erledigen, dann verhält sich jede Seite gleich.

held-back, bis es eingeplant wird.

Aufgefallen beim Durchsehen von #128: Das Raster wächst und schrumpft nur rechts und unten. ## Befund - Die Rastergröße sind die Properties Columns und Rows (`src/core/model/tilemap.ts:16`). Zelle `0,0` ist immer oben links, eine Größenänderung verschiebt keine Zelle. Was außerhalb liegt, wird nicht gezeichnet und kommt beim Vergrößern zurück (`src/core/model/tilemap.ts:8`). - Wer links oder oben Platz braucht, muss heute alles neu malen. - Die Karte ist um ihre Position zentriert. Schon beim heutigen Vergrößern nach rechts wandert der sichtbare Inhalt deshalb in der Szene nach links. ## Zu bauen - Spalten und Zeilen **links und oben** hinzufügen und entfernen, im Inspector der Tilemap. Die Zellen werden dabei verschoben, und zwar auf allen Layern. - Der gemalte Inhalt bleibt dabei **an seiner Stelle in der Szene**, die Position der Platzierung wird entsprechend nachgezogen. - Ein Vorgang ist ein Undo-Schritt. - Tests: Unit-Tests für das Verschieben (alle Layer, Zellen außerhalb, Entfernen mit bemalten Zellen), e2e für Anbauen links samt Undo. ## Offen (mit Vorschlag) - **Zellen hängen am Asset, die Größe ist pro Platzierung überschreibbar:** Verschiebt man die Zellen, verschiebt sich der Inhalt in *allen* Platzierungen dieser Tilemap. Vorschlag: Die Position nur an der bearbeiteten Platzierung nachziehen und im Inspector darauf hinweisen, wenn es weitere Platzierungen gibt. - **Entfernen mit bemalten Zellen:** Vorschlag: wie beim Verkleinern heute nichts wegwerfen. Die Zellen landen außerhalb (negative Koordinaten) und kommen beim Wiederanbauen zurück. - **Mitte beim Vergrößern:** Soll auch das heutige Anbauen rechts/unten den Inhalt an seiner Stelle lassen? Vorschlag: ja, gleich mit erledigen, dann verhält sich jede Seite gleich. `held-back`, bis es eingeplant wird.
meleki added the held-back label 2026-09-18 08:03:56 +02:00
admin removed the held-back label 2026-09-18 08:14:21 +02:00
admin added this to the Development project 2026-09-18 08:26:24 +02:00
admin moved this to Next in Development on 2026-09-18 08:27:01 +02:00
Author
Owner

Erledigt in 4728f4f (Wiki d7092c1).

Entscheidungen: Meine Rückfrage zu den drei offenen Punkten lief nach 300 s ins MCP-Timeout. Gebaut ist deshalb nach den Vorschlägen, danach hast du sie abgenommen:

  1. Mehrere Platzierungen: Die Zellen gehören zum Asset und verschieben sich überall. Die Position wird nur an der bearbeiteten Platzierung nachgezogen. Liegt die Karte noch woanders, zeigt der Inspector eine Warnung.
  2. Entfernen bemalter Spalten/Zeilen: Es geht nichts verloren. Die Zellen landen außerhalb des Rasters und kommen beim Wiederanbauen zurück.
  3. Columns/Rows an einer platzierten Karte halten den Inhalt ebenfalls an seiner Stelle, schon während der Vorschau beim Ziehen.

Umsetzung

  • Neuer Block GRID EDGES im Inspector der platzierten Tilemap: Left, Top, Right, Bottom, je mit − und +. Ein Klick = eine Spalte/Zeile = ein Undo-Schritt.
  • ResizeTilemapEdgeCommand: verschiebt links/oben die Zellen aller Layer und zieht die Position über die eigene Matrix der Platzierung nach (Drehung, Skalierung, Spiegelung, gedrehter Parent). Größe als Override an der Platzierung, Grenzen 1–1000.
  • Die Vorschau im Columns-/Rows-Feld rechnet jede Position von der Ausgangslage aus: kein Rundungsdrift, Undo landet exakt.
  • Nicht angefasst: Columns/Rows am Asset selbst sowie Reset to asset/Apply to asset verschieben die Position nicht.

Tests

  • npm run check: 1371 Tests (+12), CHECK EXIT 0; Build grün.
  • 9 Unit-Tests in tests/core/tilemap-resize.test.ts, 3 in tests/editor/tilemap-size-field.test.ts.
  • Gegenprobe mit 3 absichtlichen Fehlern (Matrix ignoriert, nur erster Layer, Undo ohne Zellen): alle gefangen.
  • e2e Modul 40, Schritt 40o, 2 Checks: echtes + bei Left verschiebt beide Layer, Columns 7, x 0 → −24, Zelle bleibt am Schirm bei 340.5/260.5; Undo stellt alles exakt her.
  • Lokal: 39+40 → 66 Checks, breite Kette → 610 Checks, alles grün. Check-Summe 1040 gerechnet, CI-Bestätigung steht noch aus.

Doku: Wiki Tilemaps.md (neuer Abschnitt Growing and shrinking the grid), Development.md, README-Summe.

Erledigt in 4728f4f (Wiki d7092c1). **Entscheidungen:** Meine Rückfrage zu den drei offenen Punkten lief nach 300 s ins MCP-Timeout. Gebaut ist deshalb nach den Vorschlägen, danach hast du sie abgenommen: 1. **Mehrere Platzierungen:** Die Zellen gehören zum Asset und verschieben sich überall. Die Position wird nur an der bearbeiteten Platzierung nachgezogen. Liegt die Karte noch woanders, zeigt der Inspector eine Warnung. 2. **Entfernen bemalter Spalten/Zeilen:** Es geht nichts verloren. Die Zellen landen außerhalb des Rasters und kommen beim Wiederanbauen zurück. 3. **Columns/Rows** an einer platzierten Karte halten den Inhalt ebenfalls an seiner Stelle, schon während der Vorschau beim Ziehen. **Umsetzung** - Neuer Block **GRID EDGES** im Inspector der platzierten Tilemap: Left, Top, Right, Bottom, je mit − und +. Ein Klick = eine Spalte/Zeile = ein Undo-Schritt. - `ResizeTilemapEdgeCommand`: verschiebt links/oben die Zellen **aller Layer** und zieht die Position über die eigene Matrix der Platzierung nach (Drehung, Skalierung, Spiegelung, gedrehter Parent). Größe als Override an der Platzierung, Grenzen 1–1000. - Die Vorschau im Columns-/Rows-Feld rechnet jede Position von der Ausgangslage aus: kein Rundungsdrift, Undo landet exakt. - Nicht angefasst: Columns/Rows am Asset selbst sowie *Reset to asset*/*Apply to asset* verschieben die Position nicht. **Tests** - `npm run check`: 1371 Tests (+12), CHECK EXIT 0; Build grün. - 9 Unit-Tests in `tests/core/tilemap-resize.test.ts`, 3 in `tests/editor/tilemap-size-field.test.ts`. - Gegenprobe mit 3 absichtlichen Fehlern (Matrix ignoriert, nur erster Layer, Undo ohne Zellen): alle gefangen. - e2e Modul 40, Schritt 40o, 2 Checks: echtes `+` bei Left verschiebt beide Layer, Columns 7, x 0 → −24, Zelle bleibt am Schirm bei 340.5/260.5; Undo stellt alles exakt her. - Lokal: 39+40 → 66 Checks, breite Kette → 610 Checks, alles grün. Check-Summe 1040 gerechnet, CI-Bestätigung steht noch aus. **Doku:** Wiki `Tilemaps.md` (neuer Abschnitt *Growing and shrinking the grid*), `Development.md`, README-Summe.
admin moved this to Done in Development on 2026-09-18 13:58:29 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#136