auch hier wieder den graph verwenden (soll node basiert werden)
erstmal durchplanen und rückfragen stellen bis alle details festgelegt sind und es bei der umsetzung keine unklarheiten mehr gibt.
- hier natürlich ein eigener Tab
- auch hier wieder den graph verwenden (soll node basiert werden)
erstmal durchplanen und rückfragen stellen bis alle details festgelegt sind und es bei der umsetzung keine unklarheiten mehr gibt.
Umgesetzt mit Commit 0f9e161, Wiki 1f25273 (neue Seite Particles).
Name geworden: particles / "Particles" -- nicht particlesystem/particleeffect.
Der Typ landet in data/projects/*.json, und dieses Projekt migriert bewusst nicht;
ein spaeteres Umbenennen hiesse Seeder anfassen und alle vier Projekte neu saeen.
Der Kern in einem Satz
Ein Partikel ist eine Funktion von Alter und einer einmal gezogenen Zufallszahl --
keine Sache, die Frame fuer Frame fortgeschrieben wird. Und weil ein continuous Emitter
Partikel n zur Zeit n/rate gebiert, ist das ganze Feld eine Funktion der Uhr, nicht
der Frames. Daraus faellt gratis heraus: keine Ringpuffer-Buchfuehrung, exakte Zeitspruenge
("zeig mir Sekunde 2") und Reproduzierbarkeit als messbare Eigenschaft statt als Behauptung.
Die acht Festlegungen aus der Planungsrunde
Modell
Formel statt Simulation
Asset
ein Typ particles, platzierbar und Graph-Traeger -- behavior war die Schablone
Output
7 Ausgaenge: x, y, scaleX, scaleY, rotation, color, alpha
Tab
Graph ueber einer Vorschau, dazwischen ein Splitter; Hold, Zeit-Schieber, Restart
Raum
Zeile Move with source, Default aus = Weltraum (Fahne)
Compiler: dasselbe Geruest wie compileShader, aber JS statt GLSL und ohne eval --
jeder Node-Ausgang wird eine Closure in ein Float64Array, in Abhaengigkeitsreihenfolge;
ein Node mit zwei Abnehmern wird einmal ausgewertet. Zeichnen: ein Pixi-ParticleContainer je Quelle = ein Draw-Call. Katalog: 28 Nodes. Winkel in Grad (wie rotation), Farbe als gepackte Zahl -- daher Mix color neben Mix, denn gepackte Zahlen zu mischen liefe durch Gruen.
Vier Funde, die erst der Bau geliefert hat
Der zehnte Tab passt bei 1280 nicht mehr -- exakt die Vorhersage aus #84, einen Tag
spaeter eingetreten. Wache 14b verlangt jetzt hidden.length > 0 statt === 0; das
Overflow-Menue arbeitet im Standardfenster tatsaechlich.
Das +-Menue scrollt ab dem dreizehnten Eintrag (MAX_LIST_HEIGHT 320 px). Particles lag unter der Maske: locate fand es, der Klick ging ins Leere -- dieselbe
Falle wie bei der Node-Palette. Der erste Testlauf ist genau daran gefallen.
Die Vorschau war unsichtbar -- sie trug graphBackground, sah also aus wie Canvas,
und ein stehender Partikel las sich als Node ohne Rahmen; dazu war der Header so voll,
dass Fit zu "Fi" gekappt wurde. Beides hat nur der Screenshot gezeigt, kein Check.
Zwei Quellen desselben Assets streuten identisch (Seed war schlicht der Partikelindex).
Beim Durchsehen gefunden, kein Check hatte es gemeldet; der Seed wird jetzt mit hashId(objectId) gewuerzt.
Geprueft, nicht behauptet
./check.sh
=== CHECK EXIT 0 ===, 916 Tests (+24), Log juenger als jede Quelle
e2e 1-14
ALL PASSED -- 398 (vorher 395, also genau die drei neuen)
e2e 31
ALL PASSED -- 18, davon 16 modul-eigen
Bundle
beide Laeufe gegen index-BxWhFjAf.js
Angesehen
zwei Screenshots: Tab (Graph, Splitter, abgesetzte Vorschau, Fit vollstaendig) und Szene (Quelle mit Gizmo, Inspector mit POSITION/TRANSFORM/PROPERTIES)
Drei Gegenproben, jede beisst an ihrer Stelle: Deckel in liveRange stumpf -> genau der
Cap-Test; unfed-Farbe fest auf Weiss -> genau der Default-Test; Zeitursprung pro Frame
statt einmalig, neu gebaut -> 7 der 18 e2e-Checks fallen (Zahl 1 statt 11, Alter des
aeltesten, Gravitation, Erloeschen, Burst), die uebrigen 11 bleiben gruen. Damit ist belegt,
dass die Checks wirklich das Uhr-Raster messen und nicht bloss "irgendwas wird gezeichnet".
Zaehler 809 = 790 + 19; die 790 sind CI-Lauf 30 (f83c568) gegengelesen.
Grenzen, die ich benenne
Kollision, Wind und Bremsen im Flug sind dauerhaft draussen -- das ist der Preis des
Formel-Modells, kein Versaeumnis. Eine Quelle wird nie gecullt (ihr Fussabdruck ist
24x24, ihre Partikel koennen ueberall sein), viele Quellen in einer Szene kosten also.
Partikelzeit ist die Editor-Uhr: eine Pause im Spiel friert keine Fontaene ein.
Die Vorschau zeigt das Asset, nie eine Instanz -- Default-Zeilen und ein weisses
Quadrat, nie die Textur einer platzierten Quelle. Und eine Quelle mit Emitting aus ist
im Canvas unsichtbar, sobald der letzte Partikel tot ist; waehlbar bleibt sie ueber die
Hierarchie.
Umgesetzt mit **Commit 0f9e161**, Wiki `1f25273` (neue Seite *Particles*).
Name geworden: **`particles` / "Particles"** -- nicht `particlesystem`/`particleeffect`.
Der Typ landet in `data/projects/*.json`, und dieses Projekt migriert bewusst nicht;
ein spaeteres Umbenennen hiesse Seeder anfassen und alle vier Projekte neu saeen.
## Der Kern in einem Satz
Ein Partikel ist eine **Funktion von Alter und einer einmal gezogenen Zufallszahl** --
keine Sache, die Frame fuer Frame fortgeschrieben wird. Und weil ein *continuous* Emitter
Partikel n zur Zeit `n/rate` gebiert, ist das **ganze Feld eine Funktion der Uhr**, nicht
der Frames. Daraus faellt gratis heraus: keine Ringpuffer-Buchfuehrung, exakte Zeitspruenge
("zeig mir Sekunde 2") und Reproduzierbarkeit als messbare Eigenschaft statt als Behauptung.
## Die acht Festlegungen aus der Planungsrunde
| | |
|---|---|
| **Modell** | Formel statt Simulation |
| **Asset** | **ein** Typ `particles`, platzierbar *und* Graph-Traeger -- `behavior` war die Schablone |
| **Output** | 7 Ausgaenge: `x, y, scaleX, scaleY, rotation, color, alpha` |
| **Tab** | Graph ueber einer Vorschau, dazwischen ein Splitter; `Hold`, Zeit-Schieber, `Restart` |
| **Raum** | Zeile `Move with source`, Default **aus** = Weltraum (Fahne) |
| **Ausstoss** | Enum `Mode: Continuous \| Burst` + Node `Emit` fuer Behavior-Graphen |
| **Editor** | eine sichtbare Quelle animiert den Scene-Tab |
| **Inspector** | X/Y - Scale, Rotation, Mirror X/Y - Effect-Zeilen |
**Compiler:** dasselbe Geruest wie `compileShader`, aber **JS statt GLSL und ohne `eval`** --
jeder Node-Ausgang wird eine Closure in ein `Float64Array`, in Abhaengigkeitsreihenfolge;
ein Node mit zwei Abnehmern wird **einmal** ausgewertet.
**Zeichnen:** ein Pixi-`ParticleContainer` je Quelle = **ein Draw-Call**.
**Katalog:** 28 Nodes. Winkel in **Grad** (wie `rotation`), Farbe als gepackte Zahl -- daher
`Mix color` neben `Mix`, denn gepackte Zahlen zu mischen liefe durch Gruen.
## Vier Funde, die erst der Bau geliefert hat
1. **Der zehnte Tab passt bei 1280 nicht mehr** -- exakt die Vorhersage aus #84, einen Tag
spaeter eingetreten. Wache 14b verlangt jetzt `hidden.length > 0` statt `=== 0`; das
Overflow-Menue arbeitet im Standardfenster tatsaechlich.
2. **Das `+`-Menue scrollt ab dem dreizehnten Eintrag** (`MAX_LIST_HEIGHT` 320 px).
`Particles` lag unter der Maske: `locate` fand es, der Klick ging ins Leere -- dieselbe
Falle wie bei der Node-Palette. Der erste Testlauf ist genau daran gefallen.
3. **Die Vorschau war unsichtbar** -- sie trug `graphBackground`, sah also aus wie Canvas,
und ein stehender Partikel las sich als Node ohne Rahmen; dazu war der Header so voll,
dass `Fit` zu "Fi" gekappt wurde. **Beides hat nur der Screenshot gezeigt, kein Check.**
4. **Zwei Quellen desselben Assets streuten identisch** (Seed war schlicht der Partikelindex).
Beim Durchsehen gefunden, kein Check hatte es gemeldet; der Seed wird jetzt mit
`hashId(objectId)` gewuerzt.
## Geprueft, nicht behauptet
| | |
|---|---|
| `./check.sh` | `=== CHECK EXIT 0 ===`, **916 Tests** (+24), Log juenger als jede Quelle |
| e2e `1-14` | **ALL PASSED -- 398** (vorher 395, also genau die drei neuen) |
| e2e `31` | **ALL PASSED -- 18**, davon 16 modul-eigen |
| Bundle | beide Laeufe gegen `index-BxWhFjAf.js` |
| Angesehen | zwei Screenshots: Tab (Graph, Splitter, abgesetzte Vorschau, `Fit` vollstaendig) und Szene (Quelle mit Gizmo, Inspector mit POSITION/TRANSFORM/PROPERTIES) |
**Drei Gegenproben, jede beisst an ihrer Stelle:** Deckel in `liveRange` stumpf -> genau der
Cap-Test; `unfed`-Farbe fest auf Weiss -> genau der Default-Test; **Zeitursprung pro Frame
statt einmalig, neu gebaut -> 7 der 18 e2e-Checks fallen** (Zahl 1 statt 11, Alter des
aeltesten, Gravitation, Erloeschen, Burst), die uebrigen 11 bleiben gruen. Damit ist belegt,
dass die Checks wirklich das Uhr-Raster messen und nicht bloss "irgendwas wird gezeichnet".
Zaehler **809** = 790 + 19; die 790 sind CI-Lauf 30 (`f83c568`) gegengelesen.
## Grenzen, die ich benenne
**Kollision, Wind und Bremsen im Flug sind dauerhaft draussen** -- das ist der Preis des
Formel-Modells, kein Versaeumnis. Eine Quelle wird **nie gecullt** (ihr Fussabdruck ist
24x24, ihre Partikel koennen ueberall sein), viele Quellen in einer Szene kosten also.
Partikelzeit ist die **Editor-Uhr**: eine Pause im Spiel friert keine Fontaene ein.
Die Vorschau zeigt das **Asset**, nie eine Instanz -- Default-Zeilen und ein weisses
Quadrat, nie die Textur einer platzierten Quelle. Und eine Quelle mit `Emitting` aus ist
im Canvas unsichtbar, sobald der letzte Partikel tot ist; waehlbar bleibt sie ueber die
Hierarchie.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
erstmal durchplanen und rückfragen stellen bis alle details festgelegt sind und es bei der umsetzung keine unklarheiten mehr gibt.
Umgesetzt mit Commit
0f9e161, Wiki1f25273(neue Seite Particles).Name geworden:
particles/ "Particles" -- nichtparticlesystem/particleeffect.Der Typ landet in
data/projects/*.json, und dieses Projekt migriert bewusst nicht;ein spaeteres Umbenennen hiesse Seeder anfassen und alle vier Projekte neu saeen.
Der Kern in einem Satz
Ein Partikel ist eine Funktion von Alter und einer einmal gezogenen Zufallszahl --
keine Sache, die Frame fuer Frame fortgeschrieben wird. Und weil ein continuous Emitter
Partikel n zur Zeit
n/rategebiert, ist das ganze Feld eine Funktion der Uhr, nichtder Frames. Daraus faellt gratis heraus: keine Ringpuffer-Buchfuehrung, exakte Zeitspruenge
("zeig mir Sekunde 2") und Reproduzierbarkeit als messbare Eigenschaft statt als Behauptung.
Die acht Festlegungen aus der Planungsrunde
particles, platzierbar und Graph-Traeger --behaviorwar die Schablonex, y, scaleX, scaleY, rotation, color, alphaHold, Zeit-Schieber,RestartMove with source, Default aus = Weltraum (Fahne)Mode: Continuous | Burst+ NodeEmitfuer Behavior-GraphenCompiler: dasselbe Geruest wie
compileShader, aber JS statt GLSL und ohneeval--jeder Node-Ausgang wird eine Closure in ein
Float64Array, in Abhaengigkeitsreihenfolge;ein Node mit zwei Abnehmern wird einmal ausgewertet.
Zeichnen: ein Pixi-
ParticleContainerje Quelle = ein Draw-Call.Katalog: 28 Nodes. Winkel in Grad (wie
rotation), Farbe als gepackte Zahl -- daherMix colornebenMix, denn gepackte Zahlen zu mischen liefe durch Gruen.Vier Funde, die erst der Bau geliefert hat
spaeter eingetreten. Wache 14b verlangt jetzt
hidden.length > 0statt=== 0; dasOverflow-Menue arbeitet im Standardfenster tatsaechlich.
+-Menue scrollt ab dem dreizehnten Eintrag (MAX_LIST_HEIGHT320 px).Particleslag unter der Maske:locatefand es, der Klick ging ins Leere -- dieselbeFalle wie bei der Node-Palette. Der erste Testlauf ist genau daran gefallen.
graphBackground, sah also aus wie Canvas,und ein stehender Partikel las sich als Node ohne Rahmen; dazu war der Header so voll,
dass
Fitzu "Fi" gekappt wurde. Beides hat nur der Screenshot gezeigt, kein Check.Beim Durchsehen gefunden, kein Check hatte es gemeldet; der Seed wird jetzt mit
hashId(objectId)gewuerzt.Geprueft, nicht behauptet
./check.sh=== CHECK EXIT 0 ===, 916 Tests (+24), Log juenger als jede Quelle1-1431index-BxWhFjAf.jsFitvollstaendig) und Szene (Quelle mit Gizmo, Inspector mit POSITION/TRANSFORM/PROPERTIES)Drei Gegenproben, jede beisst an ihrer Stelle: Deckel in
liveRangestumpf -> genau derCap-Test;
unfed-Farbe fest auf Weiss -> genau der Default-Test; Zeitursprung pro Framestatt einmalig, neu gebaut -> 7 der 18 e2e-Checks fallen (Zahl 1 statt 11, Alter des
aeltesten, Gravitation, Erloeschen, Burst), die uebrigen 11 bleiben gruen. Damit ist belegt,
dass die Checks wirklich das Uhr-Raster messen und nicht bloss "irgendwas wird gezeichnet".
Zaehler 809 = 790 + 19; die 790 sind CI-Lauf 30 (
f83c568) gegengelesen.Grenzen, die ich benenne
Kollision, Wind und Bremsen im Flug sind dauerhaft draussen -- das ist der Preis des
Formel-Modells, kein Versaeumnis. Eine Quelle wird nie gecullt (ihr Fussabdruck ist
24x24, ihre Partikel koennen ueberall sein), viele Quellen in einer Szene kosten also.
Partikelzeit ist die Editor-Uhr: eine Pause im Spiel friert keine Fontaene ein.
Die Vorschau zeigt das Asset, nie eine Instanz -- Default-Zeilen und ein weisses
Quadrat, nie die Textur einer platzierten Quelle. Und eine Quelle mit
Emittingaus istim Canvas unsichtbar, sobald der letzte Partikel tot ist; waehlbar bleibt sie ueber die
Hierarchie.