Files
feuerwerk/todo-notes/done/expand-und-pack-node.md
T
root 14f542365e Build a Pack or Expand node's ports from a struct variable
The port editor gets 'From variable' next to '+ Field': pick a struct variable
of the behavior and its fields land as ports. It only adds - a field the node
already declares stays as it is, because it may carry an edge - and the entry
is disabled once there is nothing left to add. A list of structs counts too:
it declares the shape of every item, which is exactly the bundle a Pack builds
for it. A color field arrives as a number port; the graph has no color type.

AddPortsCommand is new underneath: adding five ports had to be one undo step,
and it checks every key before it appends a single one, so a collision does
not leave half the list behind. AddPortCommand is a three-line subclass of it,
which leaves its sixteen call sites untouched.
2026-09-10 21:35:30 +02:00

1.4 KiB
Raw Blame History

beim expand und pack node habe ich mir eigentlich auch vorgestellt, dass man sich eine struct variable auswählt und automatisch die felder erzeugt werden. wir können das so lassen wie es ist (eigene felder definieren), aber eine helfer auswahl von structs das die felder erstellt wäre gut.


Umgesetzt (2026-09-10). From variable ▾ steht in der Kopfzeile des Port-Editors neben + Field ▾; das Menü listet die Struct-Variablen des Behaviors und legt deren Felder als Ports an.

Drei Entscheidungen, die die Notiz offen ließ:

  • Es ergänzt nur, es schreibt nichts um. Ein Feld, das der Node schon deklariert, bleibt stehen – es könnte eine Kante tragen. Ist nichts mehr zu ergänzen, ist der Eintrag deaktiviert.
  • Eine Liste aus Structs zählt mit (shapes (item)): sie deklariert die Form jedes Items, also genau das Bündel, das ein Pack für sie baut.
  • Ein Color-Feld wird ein Zahlport. FIELD_KINDS ist keine Teilmenge von DECLARED_PORT_KINDS – der Graph kennt keine Farbe, im Wertemodell ist sie eine Zahl.

Zwei Fallen unterwegs, beide gemessen: AddPortCommand legt genau einen Port an, „alle Felder auf einmal" wäre sonst in fünf Undo-Schritte zerfallen – daher AddPortsCommand, das alle Schlüssel prüft, bevor es einen anhängt (sonst bliebe nach einer Kollision die halbe Liste stehen). Und ein Struct-Feld darf exec heißen, ein Port nicht; die Fehlermeldung sagt jetzt auch warum.