Files
feuerwerk/todo-notes/done/overwrite-textfarbe-auch-bei-assets.md
T
root e9634f0f0d Paint an asset's name gold while any of its values deviates
The inspector already marked an asset value that differs from its schema
default, but the Assets panel gave no hint, so a changed asset looked
like an untouched one until you opened it.

The rule sits next to the existing objectDeviates as a pure function:
assetDeviates asks whether any marked property differs, markedAssetSchema
says which rows the inspector marks at all. buildAssetSection now builds
its rows from that same list, replacing the behavior/rest split it used
to carry, so the list cannot claim a deviation the inspector then fails
to show.

A behavior's variables are deliberately not in it. Their default is
declared on the variable itself, which means the asset value *is* that
default; counting them would paint the fixture's Mover gold while the
inspector beside it marks nothing.
2026-09-09 15:21:39 +02:00

2.4 KiB

die textfarbe beim asset soll auch in diesem gold dargestellt werden, falls ein property des assets einen override hat. ist somit relativ simpel: im prinzip genau das checken was im inspector erscheint wenn man das asset auswählt => gibt es wo einen override (gold) dann auch den assetname links im panel gold darstellen.


Umgesetzt (2026-09-09). Der Name einer Asset-Zeile im Assets-Panel ist gold, solange das Asset irgendeine Property traegt, die der Inspector gold malen wuerde — dieselbe Farbe und dasselbe Kriterium wie in der Hierarchie.

Die Regel steht als reine Funktion in src/core/properties/deviation.ts, neben dem schon vorhandenen objectDeviates:

  • markedAssetSchema(asset) — die Zeilen, die der Asset-Inspector als "modified" markiert.
  • assetDeviates(asset) — ob davon eine von ihrem Schema-Default abweicht (isModified).

Panel und Inspector benutzen dieselbe Liste, statt die Bedingung zweimal zu formulieren: buildAssetSection baut seine Property-Zeilen jetzt aus markedAssetSchema(asset) (das ersetzt die Fallunterscheidung Behavior/Rest, die dort vorher stand). Damit kann die Liste keine Abweichung behaupten, die der Inspector danach nicht zeigt.

Ein Sonderfall, der eine Entscheidung brauchte: die Variablen eines Behaviors. Sie sind Teil von schemaForAsset, aber der Inspector markiert sie bewusst nie (setModified ist dort ein No-op) — ihr Default ist auf der Variablen selbst deklariert, der Asset-Wert ist dieser Default. Ein Behavior mit speed = 200 ist deshalb nicht gold. Sonst waere im E2E-Fixture der "Mover" gold gewesen, ohne dass der Inspector irgendwo etwas markiert haette — genau der Widerspruch, den die Notiz ausschliesst.

Belegt (E2E-Modul 04, sechs neue Checks ueber den Test-Hook __gm.assetRowColor, der die tatsaechliche Label-Farbe der Zeile liest):

  • Crate (Hoehe 60 statt 100, eigene Farbe) → #f2c84b, Main camera (alles auf Default) → #e6e8ee
  • Mover (Variable speed = 200 gegen deklarierten Default 0) → #e6e8ee, wie der Inspector
  • ein ↺ zurueckgesetzt → bleibt gold, weil die zweite Abweichung noch steht
  • die zweite auch zurueckgesetzt → wird schlicht, ohne Reload; Undo bringt die Marke zurueck

Screenshot 15-asset-reset: im Panel sind "Level 1" (Hintergrundfarbe), "Crate" und "Crate collider" gold, "Main camera", "Mover", "Spawner" und das frisch angelegte "Sprite" weiss.