Tilemap: Füllen (Flood-Fill) und Tile aufnehmen (Pipette) #133

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

Folge-Issue zu #128, dort unter „Nicht enthalten“ aufgeführt.

Befund

  • Die Werkzeuge im Inspector sind Select, Brush, Erase, Rect (src/editor/inspector/tilemapSection.ts). Gemalt wird über PaintTilesCommand (src/core/commands/tilemapCommands.ts:26), ein Strich ist ein Undo-Schritt.
  • Eine zusammenhängende Fläche lässt sich nur mit Rect oder Strich um Strich füllen. Ein Tile, das schon auf der Karte liegt, muss man in der Palette wieder heraussuchen.

Zu bauen

  • Werkzeug „Fill“: füllt ab der angeklickten Zelle alle angrenzenden Zellen des aktiven Layers, die dasselbe Tile tragen (auch „leer“), mit dem gewählten Tile. Das Raster begrenzt die Fläche. Ein Klick ist ein Undo-Schritt, über PaintTilesCommand.
  • Tile aufnehmen: Die Zelle unter dem Mauszeiger setzt die Auswahl in der Palette auf ihr Tile. Ein Undo-Schritt entsteht dabei nicht, es ändert sich ja nichts am Projekt.
  • Tests: Unit-Tests für die Füllfläche (Nachbarschaft, Ränder, Füllen von „leer“, Füllen mit demselben Tile ändert nichts), e2e für Fill samt Undo und für das Aufnehmen.

Offen (mit Vorschlag)

  • Nachbarschaft beim Füllen: 4 oder 8 Nachbarn? Vorschlag: 4, sonst läuft die Füllung durch diagonale Lücken.
  • Aufnehmen, woher? Vom aktiven Layer oder vom obersten sichtbaren Tile an der Stelle? Vorschlag: aktiver Layer. Das ist der, auf dem man gleich weitermalt.
  • Bedienung des Aufnehmens: eigenes Werkzeug oder Modifier beim Brush (z. B. Alt-Klick)? Vorschlag: Alt-Klick in Brush, Rect und Fill, ohne eigenen Knopf.
Folge-Issue zu #128, dort unter „Nicht enthalten“ aufgeführt. ## Befund - Die Werkzeuge im Inspector sind **Select, Brush, Erase, Rect** (`src/editor/inspector/tilemapSection.ts`). Gemalt wird über `PaintTilesCommand` (`src/core/commands/tilemapCommands.ts:26`), ein Strich ist ein Undo-Schritt. - Eine zusammenhängende Fläche lässt sich nur mit Rect oder Strich um Strich füllen. Ein Tile, das schon auf der Karte liegt, muss man in der Palette wieder heraussuchen. ## Zu bauen - **Werkzeug „Fill“:** füllt ab der angeklickten Zelle alle angrenzenden Zellen des aktiven Layers, die dasselbe Tile tragen (auch „leer“), mit dem gewählten Tile. Das Raster begrenzt die Fläche. Ein Klick ist ein Undo-Schritt, über `PaintTilesCommand`. - **Tile aufnehmen:** Die Zelle unter dem Mauszeiger setzt die Auswahl in der Palette auf ihr Tile. Ein Undo-Schritt entsteht dabei nicht, es ändert sich ja nichts am Projekt. - Tests: Unit-Tests für die Füllfläche (Nachbarschaft, Ränder, Füllen von „leer“, Füllen mit demselben Tile ändert nichts), e2e für Fill samt Undo und für das Aufnehmen. ## Offen (mit Vorschlag) - **Nachbarschaft beim Füllen:** 4 oder 8 Nachbarn? Vorschlag: **4**, sonst läuft die Füllung durch diagonale Lücken. - **Aufnehmen, woher?** Vom aktiven Layer oder vom obersten sichtbaren Tile an der Stelle? Vorschlag: **aktiver Layer**. Das ist der, auf dem man gleich weitermalt. - **Bedienung des Aufnehmens:** eigenes Werkzeug oder Modifier beim Brush (z. B. Alt-Klick)? Vorschlag: **Alt-Klick** in Brush, Rect und Fill, ohne eigenen Knopf.
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:26:38 +02:00
  1. Nachbarschaft beim Füllen: 4, dein vorschlag passt
  2. Aufnehmen, woher? dein vorschlag, aktiver Layer
  3. Bedienung des Aufnehmns: beides, eigenes Werkzeug und wenn alt gedrückt gehalten, wechsel zu pipette werkzeug, loslassen = zurück zum vorherigen werkzeug
1. Nachbarschaft beim Füllen: 4, dein vorschlag passt 2. Aufnehmen, woher? dein vorschlag, aktiver Layer 3. Bedienung des Aufnehmns: beides, eigenes Werkzeug und wenn alt gedrückt gehalten, wechsel zu pipette werkzeug, loslassen = zurück zum vorherigen werkzeug
Author
Owner

Umgesetzt in 0b32d3c, Wiki fe18812. Die drei Antworten aus dem Kommentar oben gelten alle.

Was es jetzt gibt

Das Tilemap-Panel hat zwei neue Werkzeuge. Die Knöpfe stehen in zwei Zeilen: Select · Brush · Erase und Rect · Fill · Pick (mit sechs Knöpfen in einer Zeile wurden die Namen abgeschnitten).

  • Fill: Ein Klick füllt alle Zellen des aktiven Layers, die mit der angeklickten Zelle zusammenhängen und dasselbe Tile tragen (auch leere). Es zählen nur die 4 Kanten-Nachbarn, das Raster ist die Grenze. Ein Klick ist ein Undo-Schritt. Füllen mit dem Tile, das schon dort liegt, ändert nichts. Reine Funktion floodFill in src/core/model/tilemap.ts.
  • Pick: nimmt das Tile der angeklickten Zelle vom aktiven Layer. Leere Zelle: Hinweis in der Console, sonst keine Änderung.
  • Alt halten: Pick ist aktiv, solange Alt gedrückt ist, egal welches Werkzeug gewählt war. Loslassen bringt das vorige Werkzeug zurück.

Selbst entschieden, weil das Issue nichts dazu sagt:

  1. Nach einem Klick mit dem Pick-Knopf geht es zurück auf das Malwerkzeug vor Pick (Brush, Rect oder Fill), von Select oder Erase aus auf den Brush — dieselbe Regel wie beim Klick in die Palette.
  2. Wird bei gehaltenem Alt ein anderes Werkzeug gewählt, bleibt dieses; das Loslassen ändert dann nichts.
  3. Wird die Karte bei gehaltenem Alt abgewählt, landet das Werkzeug beim Loslassen auf Select.

Tests

npm run check                                          → 100 Files, 1359 Tests (vorher 1349), CHECK EXIT 0
npm run build                                          → BUILD EXIT 0
GM_STEPS=39,40 (frisch geseedet)                       → ALL PASSED – 64 checks (vorher 60)
GM_STEPS=1-16,24,25,33,36,38,39,40 (frisch geseedet)   → ALL PASSED – 608 checks
  • 10 neue Unit-Tests: 7 für die Füllfläche (tests/core/tilemap-fill.test.ts: diagonale Lücken, leeres Raster bis zum Rand, Tile ersetzen, Zellen außerhalb des Rasters, dasselbe Tile, Leeren, 300 × 300), 3 für die Werkzeugregeln (tests/editor/painted-tilemap.test.ts).
  • Gegenprobe mit 3 absichtlichen Fehlern (8 statt 4 Nachbarn, Pick ignoriert Alt, Loslassen stellt nicht zurück): jeder von einem Test gefangen, Originale per cmp zurückgesetzt.
  • 4 neue e2e-Checks, Modul 40, Schritt 40n: Fill füllt die 15 leeren Zellen um den Block, die Füllung ist ein Undo-Schritt, der Pick-Knopf nimmt Grass auf und gibt an Fill zurück, Alt über echte Tastenereignisse. Das Harness kennt dafür die Taste Alt.
  • Von dir selbst getestet und abgenommen.

Einschränkung: Alt nur in Chromium geprüft. Auf manchen Linux-Desktops fängt der Fenstermanager Alt+Klick ab; dann bleibt der Pick-Knopf.

Doku

  • Wiki Tilemaps.md: Fill, Pick und Alt bei den Werkzeugen; „Nothing fills an area …“ unter What it does not do yet gestrichen.
  • Check-Summe 1038 (1034 + 4) in README und Development.md — gerechnet, CI-Bestätigung steht aus.
Umgesetzt in `0b32d3c`, Wiki `fe18812`. Die drei Antworten aus dem Kommentar oben gelten alle. ## Was es jetzt gibt Das Tilemap-Panel hat zwei neue Werkzeuge. Die Knöpfe stehen in zwei Zeilen: **Select · Brush · Erase** und **Rect · Fill · Pick** (mit sechs Knöpfen in einer Zeile wurden die Namen abgeschnitten). - **Fill:** Ein Klick füllt alle Zellen des aktiven Layers, die mit der angeklickten Zelle zusammenhängen und dasselbe Tile tragen (auch leere). Es zählen nur die 4 Kanten-Nachbarn, das Raster ist die Grenze. Ein Klick ist ein Undo-Schritt. Füllen mit dem Tile, das schon dort liegt, ändert nichts. Reine Funktion `floodFill` in `src/core/model/tilemap.ts`. - **Pick:** nimmt das Tile der angeklickten Zelle vom **aktiven Layer**. Leere Zelle: Hinweis in der Console, sonst keine Änderung. - **Alt halten:** Pick ist aktiv, solange Alt gedrückt ist, egal welches Werkzeug gewählt war. Loslassen bringt das vorige Werkzeug zurück. Selbst entschieden, weil das Issue nichts dazu sagt: 1. Nach einem Klick mit dem **Pick-Knopf** geht es zurück auf das Malwerkzeug vor Pick (Brush, Rect oder Fill), von Select oder Erase aus auf den Brush — dieselbe Regel wie beim Klick in die Palette. 2. Wird bei gehaltenem Alt ein anderes Werkzeug gewählt, bleibt dieses; das Loslassen ändert dann nichts. 3. Wird die Karte bei gehaltenem Alt abgewählt, landet das Werkzeug beim Loslassen auf Select. ## Tests ``` npm run check → 100 Files, 1359 Tests (vorher 1349), CHECK EXIT 0 npm run build → BUILD EXIT 0 GM_STEPS=39,40 (frisch geseedet) → ALL PASSED – 64 checks (vorher 60) GM_STEPS=1-16,24,25,33,36,38,39,40 (frisch geseedet) → ALL PASSED – 608 checks ``` - **10 neue Unit-Tests:** 7 für die Füllfläche (`tests/core/tilemap-fill.test.ts`: diagonale Lücken, leeres Raster bis zum Rand, Tile ersetzen, Zellen außerhalb des Rasters, dasselbe Tile, Leeren, 300 × 300), 3 für die Werkzeugregeln (`tests/editor/painted-tilemap.test.ts`). - **Gegenprobe** mit 3 absichtlichen Fehlern (8 statt 4 Nachbarn, Pick ignoriert Alt, Loslassen stellt nicht zurück): jeder von einem Test gefangen, Originale per `cmp` zurückgesetzt. - **4 neue e2e-Checks, Modul 40, Schritt 40n:** Fill füllt die 15 leeren Zellen um den Block, die Füllung ist ein Undo-Schritt, der Pick-Knopf nimmt Grass auf und gibt an Fill zurück, Alt über echte Tastenereignisse. Das Harness kennt dafür die Taste `Alt`. - Von dir selbst getestet und abgenommen. **Einschränkung:** Alt nur in Chromium geprüft. Auf manchen Linux-Desktops fängt der Fenstermanager Alt+Klick ab; dann bleibt der Pick-Knopf. ## Doku - Wiki `Tilemaps.md`: Fill, Pick und Alt bei den Werkzeugen; „Nothing fills an area …“ unter *What it does not do yet* gestrichen. - Check-Summe **1038** (1034 + 4) in README und `Development.md` — gerechnet, CI-Bestätigung steht aus.
admin moved this to Done in Development on 2026-09-18 13:21:56 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#133