Particles: Scene View Icon #89

Closed
opened 2026-09-14 06:41:26 +02:00 by admin · 1 comment

Wie bei Behavior oder Container: ein eigenes Icon in der Scene View

Wie bei Behavior oder Container: ein eigenes Icon in der Scene View
admin added the particles label 2026-09-14 06:41:26 +02:00
admin added this to the Development project 2026-09-14 06:41:26 +02:00
admin moved this to Next in Development on 2026-09-14 06:41:34 +02:00
Owner

Gebaut, gemessen, fünffach gegengeprüft — Commit 78baf0c.

Die Falle vor dem Bauen

Der naheliegende Weg wäre falsch gewesen. isSymbolType liest sich wie „zeichnet ein Icon", heißt aber „ist Editor-Dekoration": vier Stellen hängen daran (collectWorldItems, GameViewport.collectFrame, syncDrawOrder, placementOf). Ein Eintrag 'particles' dort hätte der Quelle ein Icon gegeben und ihre Partikel genommen — im Spiel und in der Scene View.

Die zwei Fragen sind jetzt zwei Funktionen: hasSceneIcon (zeichnet ein Icon) und isSymbolType (ist Dekoration). Das Icon ist eine Dekoration von SceneViewport und damit umsonst editor-only, weil GameViewport Dekorationen nie synchronisiert.

Was drin ist

Ring (r 10, #c26a1f) mit vier Funken, aufrecht und unskaliert wie die anderen Symbole, Mitte offen — anders als Behavior und Container zeichnet eine Quelle selbst etwas, und genau dort ist das Feld am dichtesten. Name daneben, gestrichelte Linie zum Eltern-Objekt in derselben Farbe.

Beim Schreiben der Tests dazugekommen: der Greifrahmen wuchs mit der Skalierung der Quelle, das Icon nicht. placementOf gibt für 'particles' jetzt nur die Translation zurück, der Rahmen ist die aufrechte 24 × 24, die ihr Icon deckt. Die eigene Transform der Quelle geht weiterhin ungebremst in jedes Partikel.

Belege

./check.sh CHECK EXIT 0, 921 Tests (920 + 1)
e2e Modul 31 ALL PASSED – 33 Checks (30 + 3), E2E EXIT 0
Angesehen Screenshot: Ring, Funken, Fountain daneben, grünes Testpartikel scheint durch die Mitte

Fünf Gegenproben, jede beißt an ihrer Stelle:

Verbogen Ergebnis
placementOf ignoriert das Icon 1 Unit-Test: Rahmen 48 statt 24
hasSceneIcon lässt Partikel fallen 2 Unit-Tests
Icon gar nicht gezeichnet 3 FAILED, sceneIcon liefert null
Ring gefüllt statt hohl 1 FAILED isoliert: centre: "#c26a1f" statt Grün
Elternlinie zurück auf isSymbolType 1 FAILED isoliert: link: false

Ein Zwischenfall gehört dazu: der Ring-Check fiel zuerst mit Abstand genau 30 bei Schwelle < 30. Ursache war mein eigenes alpha: 0.9, das Orange mit dem Grün darunter mischte — gefunden, indem ich den Screenshot des gescheiterten Laufs angesehen und die Pixelzeile nachgemessen habe. Das Icon war korrekt, meine Sonde nicht. Alpha ist raus, die Farbe misst exakt #c26a1f.

Zähler 824 in README und Wiki Development. Wiki-Commit d52f1c1 (Particles, Architecture, Development).

Gebaut, gemessen, fünffach gegengeprüft — Commit `78baf0c`. ### Die Falle vor dem Bauen Der naheliegende Weg wäre falsch gewesen. `isSymbolType` liest sich wie *„zeichnet ein Icon"*, heißt aber **„ist Editor-Dekoration"**: vier Stellen hängen daran (`collectWorldItems`, `GameViewport.collectFrame`, `syncDrawOrder`, `placementOf`). Ein Eintrag `'particles'` dort hätte der Quelle ein Icon gegeben und **ihre Partikel genommen** — im Spiel und in der Scene View. Die zwei Fragen sind jetzt zwei Funktionen: **`hasSceneIcon`** (zeichnet ein Icon) und **`isSymbolType`** (ist Dekoration). Das Icon ist eine Dekoration von `SceneViewport` und damit umsonst editor-only, weil `GameViewport` Dekorationen nie synchronisiert. ### Was drin ist Ring (r 10, `#c26a1f`) mit vier Funken, aufrecht und unskaliert wie die anderen Symbole, **Mitte offen** — anders als Behavior und Container zeichnet eine Quelle selbst etwas, und genau dort ist das Feld am dichtesten. Name daneben, gestrichelte Linie zum Eltern-Objekt in derselben Farbe. Beim Schreiben der Tests dazugekommen: der Greifrahmen wuchs mit der Skalierung der Quelle, das Icon nicht. `placementOf` gibt für `'particles'` jetzt nur die Translation zurück, der Rahmen ist die aufrechte 24 × 24, die ihr Icon deckt. Die eigene Transform der Quelle geht weiterhin ungebremst in jedes Partikel. ### Belege | | | |---|---| | `./check.sh` | `CHECK EXIT 0`, **921 Tests** (920 + 1) | | e2e Modul 31 | **ALL PASSED – 33 Checks** (30 + 3), `E2E EXIT 0` | | Angesehen | Screenshot: Ring, Funken, `Fountain` daneben, grünes Testpartikel scheint durch die Mitte | **Fünf Gegenproben, jede beißt an ihrer Stelle:** | Verbogen | Ergebnis | |---|---| | `placementOf` ignoriert das Icon | 1 Unit-Test: Rahmen 48 statt 24 | | `hasSceneIcon` lässt Partikel fallen | 2 Unit-Tests | | Icon gar nicht gezeichnet | **3 FAILED**, `sceneIcon` liefert `null` | | Ring gefüllt statt hohl | **1 FAILED** isoliert: `centre: "#c26a1f"` statt Grün | | Elternlinie zurück auf `isSymbolType` | **1 FAILED** isoliert: `link: false` | Ein Zwischenfall gehört dazu: der Ring-Check fiel zuerst mit Abstand **genau 30** bei Schwelle `< 30`. Ursache war mein eigenes `alpha: 0.9`, das Orange mit dem Grün darunter mischte — gefunden, indem ich den Screenshot des gescheiterten Laufs **angesehen** und die Pixelzeile nachgemessen habe. Das Icon war korrekt, meine Sonde nicht. Alpha ist raus, die Farbe misst exakt `#c26a1f`. Zähler **824** in README und Wiki *Development*. Wiki-Commit `d52f1c1` (*Particles*, *Architecture*, *Development*).
admin moved this to Done in Development on 2026-09-14 08:28:12 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#89