Animation: private Behavior-Variablen werden weiter als Zeile angeboten #270

Closed
opened 2026-09-29 18:26:29 +02:00 by meleki · 2 comments
Owner

Aus #257 („Not done: the animation track picker still offers private variables.“).

Befund

  • Seit #257 kann eine Behavior-Variable Private sein. Platzierte Objekte zeigen sie nicht, und + Property am Properties-Node bietet sie nicht an (src/editor/inspector/portSection.ts:120).
  • Der Dialog „Add a row to …“ im Animation-Tab (src/editor/animation/RowDialog.ts:101) holt seine Auswahl über targetDefs und animatableDefsOf (src/core/model/animation.ts:373). Das liefert für ein Behavior alle asset.variables (Zeile 381), die privaten eingeschlossen.
  • Eine Animation kann also eine private Variable von außen keyen, obwohl sie sonst nirgends außerhalb des eigenen Graphen auftaucht.

Zu bauen (Vorschlag)

  • Der Dialog filtert private Variablen heraus, mit isPrivateVariable aus src/core/model/Asset.ts.
  • animatableDefsOf selbst bleibt, wie es ist. So laufen bestehende Zeilen weiter und behalten ihre Beschriftung (trackLabel und die Laufzeit lesen dieselbe Funktion).
  • Tests: Unit für die Auswahl des Dialogs (private Variable fehlt, öffentliche ist da). e2e in Modul 56: Variable auf Private schalten, der Dialog bietet sie danach nicht mehr an. Gegenprobe wie üblich.

Offen (mit Vorschlag)

  1. Eine bestehende Zeile auf eine Variable, die später privat wird? Vorschlag: Sie läuft weiter und bleibt sichtbar, so wie ein von Hand benannter Port am Properties-Node in #257. Nur neu anbieten tut der Dialog sie nicht.
Aus #257 („Not done: the animation track picker still offers private variables.“). ## Befund - Seit #257 kann eine Behavior-Variable **Private** sein. Platzierte Objekte zeigen sie nicht, und `+ Property` am `Properties`-Node bietet sie nicht an (`src/editor/inspector/portSection.ts:120`). - Der Dialog „Add a row to …“ im Animation-Tab (`src/editor/animation/RowDialog.ts:101`) holt seine Auswahl über `targetDefs` und `animatableDefsOf` (`src/core/model/animation.ts:373`). Das liefert für ein Behavior **alle** `asset.variables` (Zeile 381), die privaten eingeschlossen. - Eine Animation kann also eine private Variable von außen keyen, obwohl sie sonst nirgends außerhalb des eigenen Graphen auftaucht. ## Zu bauen (Vorschlag) - Der Dialog filtert private Variablen heraus, mit `isPrivateVariable` aus `src/core/model/Asset.ts`. - `animatableDefsOf` selbst bleibt, wie es ist. So laufen bestehende Zeilen weiter und behalten ihre Beschriftung (`trackLabel` und die Laufzeit lesen dieselbe Funktion). - Tests: Unit für die Auswahl des Dialogs (private Variable fehlt, öffentliche ist da). e2e in Modul 56: Variable auf Private schalten, der Dialog bietet sie danach nicht mehr an. Gegenprobe wie üblich. ## Offen (mit Vorschlag) 1. **Eine bestehende Zeile auf eine Variable, die später privat wird?** Vorschlag: Sie läuft weiter und bleibt sichtbar, so wie ein von Hand benannter Port am `Properties`-Node in #257. Nur neu anbieten tut der Dialog sie nicht.
meleki added the new label 2026-09-29 18:26:29 +02:00

vorschlag passt, alles bleibt, aber anbieten soll es der dialog einfach nicht mehr

vorschlag passt, alles bleibt, aber anbieten soll es der dialog einfach nicht mehr
admin removed the new label 2026-09-29 18:41:06 +02:00
admin added this to the Development project 2026-09-29 18:41:09 +02:00
admin moved this to Next in Development on 2026-09-29 18:41:10 +02:00
Author
Owner

Done in 6491888, wiki ba34f36 (Animations, Behaviors, Development).

What changes

  • The dialog "Add a row to ..." no longer offers a behavior's private variables. Public variables and everything else are offered as before.
  • Existing rows stay, as decided above. A row on a variable that goes private later keeps playing and keeps its label.

Deviation from the proposal

  • Under Change target… the row's own variable stays on offer, private or not. Otherwise the dialog would open with no property and a disabled button for such a row. Other private variables are not offered there either.
  • The command itself does not refuse a private variable, only the dialog does not offer it. That is how the issue meant it.

Under the hood

  • What the dialog offers is now the pure function offeredDefs in src/core/model/animation.ts: what the target can animate, less private variables and less what another row animates already. The filter moved there from RowDialog.ts.
  • animatableDefsOf is unchanged. The label and the runtime read it, so they know nothing of the lock.

Tests (on melektaus-atx)

gate        198 files, 2883 tests, CHECK EXIT 0 (2882 + 1)
e2e 55,56   ALL PASSED - 27 checks (56: +56e)
e2e 25      ALL PASSED - 31 checks (uses the same dialog)
  • 56e opens the dialog with the real mouse through "+ Row". It offers Enabled, Run in editor, Run while paused and hp, and neither private variable. mood has no row, so it is not the "already has a row" rule that hides it. The row "Brain 56 · timer" stays in the timeline.
  • The three unit counter-checks work, each fails the new test: not filtering private variables, not excepting the row's own variable, and filtering in animatableDefsOf (the existing row then loses its variable).
  • The browser counter-check works too. The build went through, and 56e fails because mood shows up in the dialog.
  • Screenshot checked: object "Brain 56", property "hp", the row on timer is there.
  • The e2e total of 1610 is computed (1609 + 1). CI is still switched off, so there is no run for 6491888.

Finding, not fixed

  • e2e 56 fails when it runs alone (GM_STEPS=56, measured twice): typing "9" did not arrive: focus is BODY. That is 56a-ii from #257, which this change does not touch. With 55 before it the module passes, so a full run does not show it. It was not measured on HEAD without this change.
Done in `6491888`, wiki `ba34f36` (*Animations*, *Behaviors*, *Development*). **What changes** - The dialog "Add a row to ..." no longer offers a behavior's private variables. Public variables and everything else are offered as before. - Existing rows stay, as decided above. A row on a variable that goes private later keeps playing and keeps its label. **Deviation from the proposal** - Under *Change target…* the row's own variable stays on offer, private or not. Otherwise the dialog would open with no property and a disabled button for such a row. Other private variables are not offered there either. - The command itself does not refuse a private variable, only the dialog does not offer it. That is how the issue meant it. **Under the hood** - What the dialog offers is now the pure function `offeredDefs` in `src/core/model/animation.ts`: what the target can animate, less private variables and less what another row animates already. The filter moved there from `RowDialog.ts`. - `animatableDefsOf` is unchanged. The label and the runtime read it, so they know nothing of the lock. **Tests** (on `melektaus-atx`) ``` gate 198 files, 2883 tests, CHECK EXIT 0 (2882 + 1) e2e 55,56 ALL PASSED - 27 checks (56: +56e) e2e 25 ALL PASSED - 31 checks (uses the same dialog) ``` - **56e** opens the dialog with the real mouse through "+ Row". It offers `Enabled`, `Run in editor`, `Run while paused` and `hp`, and neither private variable. `mood` has no row, so it is not the "already has a row" rule that hides it. The row "Brain 56 · timer" stays in the timeline. - The three unit counter-checks work, each fails the new test: not filtering private variables, not excepting the row's own variable, and filtering in `animatableDefsOf` (the existing row then loses its variable). - The browser counter-check works too. The build went through, and 56e fails because `mood` shows up in the dialog. - Screenshot checked: object "Brain 56", property "hp", the row on `timer` is there. - The e2e total of 1610 is computed (1609 + 1). CI is still switched off, so there is no run for `6491888`. **Finding, not fixed** - e2e 56 fails when it runs alone (`GM_STEPS=56`, measured twice): `typing "9" did not arrive: focus is BODY`. That is 56a-ii from #257, which this change does not touch. With 55 before it the module passes, so a full run does not show it. It was not measured on HEAD without this change.
admin moved this to Done in Development on 2026-10-01 07:46:02 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#270