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.
This commit is contained in:
root committed 2026-09-09 15:21:39 +02:00
1 parent e0d43e12aa
commit e9634f0f0d
10 files changed
+166 -15

No files matched your search

@@ -0,0 +1,37 @@
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.
@@ -1 +0,0 @@
die textfarbe beim asset soll auch in diesem gold dargestellt werden, falls ein property des assets einen override hat
+14
View File
@@ -0,0 +1,14 @@
Zitat aus der readme: "Unreferenced image files are never collected."
Ich würde sagen dass soll vorerst auch so bleiben.
Was passt:
drag and drop file in den editor => textur wird hochgeladen und passende asset wird erstellt => das soll so bleiben, das passt
Was wir auch haben aber ändern:
klickt man auf das `+` => `Texture`, dann öffnet sich der File System Browser.
Anstelle des file system browser => ein dialog mit allen images die am server existieren.
- auswählen => ok, dann wird es wiederverwendet => dialog schließt sich => texture asset mit ausgewählten image wird erstellt.
- oder hochladen button => file system browser => OK => dialog schließt sich => texture asset mit hochgeladenen image wird erstellt (im prinzip das was wir jetzt auch haben)