Time Scale: soll ein multiplikator sein - ist quasi der Speed => Time scale eben (default: 1 wie es jetzt ist) - hier prüfen ob die aussage verstanden wurde
Prewarm: macht im prinzip einen Time Offset von der eingestellt Lifetime. sprich start wäre bei 1s sekunde lifetime bei sekunde 1 - hier auch noch überprüfen ob diese aussage korrekt wäre damit der prewarm richtig ist
Noch zwei properties ins asset (inspector)
- Time Scale: soll ein multiplikator sein - ist quasi der Speed => Time scale eben (default: 1 wie es jetzt ist) - hier prüfen ob die aussage verstanden wurde
- Prewarm: macht im prinzip einen Time Offset von der eingestellt Lifetime. sprich start wäre bei 1s sekunde lifetime bei sekunde 1 - hier auch noch überprüfen ob diese aussage korrekt wäre damit der prewarm richtig ist
admin
added the particles label 2026-09-14 06:31:07 +02:00
admin
added this to the Development project 2026-09-14 06:31:07 +02:00
admin
moved this to Next in Development on 2026-09-14 06:31:11 +02:00
Beide Zeilen sitzen im Inspector, und beide Aussagen habe ich vor dem Bauen gegen die Bauart geprueft.
Time Scale: die Aussage geht ohne Rest auf. Ein Partikel ist hier eine Funktion der Uhr, also ist "Speed" genau ein Faktor auf das Uhr-Argument -- nichts weiter. Bei 2 rueckt das Geburtsraster n/rate doppelt so schnell vor und ein Partikel ist in der halben Wanduhrzeit durch. Keine Zeile im Zeichencode, kein Zustand. Default 1, Minimum 0 (0 haelt das Bild an).
Prewarm: die Aussage stimmt woertlich -- aber nur fuer Continuous. Nachgerechnet: bei Rate r und Lifetime L leben zur Feldzeit L die Indizes 1..floor(L*r), also exakt der Dauerzustand. L ist dabei nicht ungefaehr richtig, sondern der kleinste Offset, der das Feld fuellt -- "Lifetime 1 s -> Start bei Sekunde 1" ist genau die Grenze.
Bei Burst kippt es: dort werden alle zur Zeit 0 geboren und sind bei time >= lifetime tot -- derselbe Offset wuerde den Burst komplett ueberspringen, man saehe nie etwas. Prewarm ist dort deshalb unterdrueckt, und dafuer gibt es einen eigenen Check.
Wo es steht
fieldTime(settings, elapsed) = elapsed * timeScale + prewarmOffset(settings) -- eine reine Funktion neben liveRange, gerufen an der einen Stelle, an der ParticleField.sync seine Zeit bildet. Vorschau und Welt sind die einzigen zwei Aufrufer, also haben beide es damit.
Der Slider im Tab zaehlt weiter Wanduhr-Sekunden, deshalb teilt die Spanne (drei Lifetimes) jetzt durch die Zeitskala.
Alte Projektdateien brauchen keine Migration: eine fehlende Zeile faellt auf 1 / aus zurueck und verhaelt sich wie vorher -- belegt dadurch, dass die 25 Bestands-Checks in Modul 31 unveraendert gruen sind.
Geprueft, nicht behauptet
Gate
CHECK EXIT 0, 920 Tests (916 + 4 neue), Lauf 07:30 -- juenger als jede Quelle
e2e Modul 31
ALL PASSED - 30 Checks (25 + 5 neue), E2E EXIT 0, Lauf 07:30 gegen den committeten Baum
Prettier
EXIT 0 ueber alle beruehrten Dateien
Sonden
keine im Diff
Fuenf Gegenproben, jede beisst an genau ihrer Stelle -- drei billige auf der reinen Regel, zwei teure mit Neubau:
Der Zaehler 821 (816 + 5) ist gerechnet, nicht gemessen -- den vollen Lauf faehrt der Runner; ich lese ihn nach und melde, falls er abweicht.
Prewarm ist ein Sprung im Uhr-Argument, keine Simulation: was vor dem Start passiert waere, wird berechnet, nicht nachgespielt. Bei Emittern, deren Bild von der Vorgeschichte abhaengt (kaeme erst mit Kollision), traegt das nicht.
Commit 8ae20d0, Wiki 198483b (Particles, Architecture, Development).
Beide Zeilen sitzen im Inspector, und beide Aussagen habe ich vor dem Bauen gegen die Bauart geprueft.
**Time Scale: die Aussage geht ohne Rest auf.** Ein Partikel ist hier eine Funktion der Uhr, also ist "Speed" genau ein Faktor auf das Uhr-Argument -- nichts weiter. Bei 2 rueckt das Geburtsraster `n/rate` doppelt so schnell vor und ein Partikel ist in der halben Wanduhrzeit durch. Keine Zeile im Zeichencode, kein Zustand. Default 1, Minimum 0 (0 haelt das Bild an).
**Prewarm: die Aussage stimmt woertlich -- aber nur fuer Continuous.** Nachgerechnet: bei Rate r und Lifetime L leben zur Feldzeit L die Indizes 1..floor(L*r), also exakt der Dauerzustand. L ist dabei nicht ungefaehr richtig, sondern der *kleinste* Offset, der das Feld fuellt -- "Lifetime 1 s -> Start bei Sekunde 1" ist genau die Grenze.
Bei **Burst** kippt es: dort werden alle zur Zeit 0 geboren und sind bei `time >= lifetime` tot -- derselbe Offset wuerde den Burst komplett ueberspringen, man saehe nie etwas. Prewarm ist dort deshalb unterdrueckt, und dafuer gibt es einen eigenen Check.
## Wo es steht
`fieldTime(settings, elapsed) = elapsed * timeScale + prewarmOffset(settings)` -- eine reine Funktion neben `liveRange`, gerufen an der **einen** Stelle, an der `ParticleField.sync` seine Zeit bildet. Vorschau und Welt sind die einzigen zwei Aufrufer, also haben beide es damit.
Der Slider im Tab zaehlt weiter Wanduhr-Sekunden, deshalb teilt die Spanne (drei Lifetimes) jetzt durch die Zeitskala.
**Alte Projektdateien brauchen keine Migration:** eine fehlende Zeile faellt auf 1 / aus zurueck und verhaelt sich wie vorher -- belegt dadurch, dass die 25 Bestands-Checks in Modul 31 unveraendert gruen sind.
## Geprueft, nicht behauptet
| | |
|---|---|
| Gate | `CHECK EXIT 0`, **920 Tests** (916 + 4 neue), Lauf 07:30 -- juenger als jede Quelle |
| e2e Modul 31 | **ALL PASSED - 30 Checks** (25 + 5 neue), `E2E EXIT 0`, Lauf 07:30 gegen den committeten Baum |
| Prettier | `EXIT 0` ueber alle beruehrten Dateien |
| Sonden | keine im Diff |
**Fuenf Gegenproben, jede beisst an genau ihrer Stelle** -- drei billige auf der reinen Regel, zwei teure mit Neubau:
| Verbogen | Ergebnis |
|---|---|
| Time Scale ignoriert | 2 Unit-Tests fallen |
| Prewarm auch fuer Burst | 1 Unit-Test faellt (`leaves a burst alone`) |
| Prewarm wirkungslos | 2 Unit-Tests fallen |
| Zeilen erreichen das Feld nicht | 3 FAILED in e2e: `warm: 1` statt 20, `fast: 11` statt 20, `count: 8` statt 10 |
| Spanne folgt der Skala nicht | 1 FAILED, isoliert: `count: 10` bleibt richtig, nur `span: 6` statt 3 |
## Grenzen
- Der Zaehler **821** (816 + 5) ist gerechnet, nicht gemessen -- den vollen Lauf faehrt der Runner; ich lese ihn nach und melde, falls er abweicht.
- Prewarm ist ein Sprung im Uhr-Argument, keine Simulation: was vor dem Start passiert *waere*, wird berechnet, nicht nachgespielt. Bei Emittern, deren Bild von der Vorgeschichte abhaengt (kaeme erst mit Kollision), traegt das nicht.
Commit `8ae20d0`, Wiki `198483b` (*Particles*, *Architecture*, *Development*).
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.
Noch zwei properties ins asset (inspector)
Beide Zeilen sitzen im Inspector, und beide Aussagen habe ich vor dem Bauen gegen die Bauart geprueft.
Time Scale: die Aussage geht ohne Rest auf. Ein Partikel ist hier eine Funktion der Uhr, also ist "Speed" genau ein Faktor auf das Uhr-Argument -- nichts weiter. Bei 2 rueckt das Geburtsraster
n/ratedoppelt so schnell vor und ein Partikel ist in der halben Wanduhrzeit durch. Keine Zeile im Zeichencode, kein Zustand. Default 1, Minimum 0 (0 haelt das Bild an).Prewarm: die Aussage stimmt woertlich -- aber nur fuer Continuous. Nachgerechnet: bei Rate r und Lifetime L leben zur Feldzeit L die Indizes 1..floor(L*r), also exakt der Dauerzustand. L ist dabei nicht ungefaehr richtig, sondern der kleinste Offset, der das Feld fuellt -- "Lifetime 1 s -> Start bei Sekunde 1" ist genau die Grenze.
Bei Burst kippt es: dort werden alle zur Zeit 0 geboren und sind bei
time >= lifetimetot -- derselbe Offset wuerde den Burst komplett ueberspringen, man saehe nie etwas. Prewarm ist dort deshalb unterdrueckt, und dafuer gibt es einen eigenen Check.Wo es steht
fieldTime(settings, elapsed) = elapsed * timeScale + prewarmOffset(settings)-- eine reine Funktion nebenliveRange, gerufen an der einen Stelle, an derParticleField.syncseine Zeit bildet. Vorschau und Welt sind die einzigen zwei Aufrufer, also haben beide es damit.Der Slider im Tab zaehlt weiter Wanduhr-Sekunden, deshalb teilt die Spanne (drei Lifetimes) jetzt durch die Zeitskala.
Alte Projektdateien brauchen keine Migration: eine fehlende Zeile faellt auf 1 / aus zurueck und verhaelt sich wie vorher -- belegt dadurch, dass die 25 Bestands-Checks in Modul 31 unveraendert gruen sind.
Geprueft, nicht behauptet
CHECK EXIT 0, 920 Tests (916 + 4 neue), Lauf 07:30 -- juenger als jede QuelleE2E EXIT 0, Lauf 07:30 gegen den committeten BaumEXIT 0ueber alle beruehrten DateienFuenf Gegenproben, jede beisst an genau ihrer Stelle -- drei billige auf der reinen Regel, zwei teure mit Neubau:
leaves a burst alone)warm: 1statt 20,fast: 11statt 20,count: 8statt 10count: 10bleibt richtig, nurspan: 6statt 3Grenzen
Commit
8ae20d0, Wiki198483b(Particles, Architecture, Development).