Asset rows: click selects, double-click or + opens the tab (#71); 717 checks

admin committed 2026-09-13 12:10:37 +02:00
1 parent 7eac624fb1
commit 85c2a04fb6
6 files changed
+15 -10

No files matched your search

+6 -2
@@ -32,8 +32,12 @@ no movement): everything that happens is defined by behavior graphs.
**Toolbar and panels.** The toolbar holds the **Project** menu (new project, switch project,
*Delete this project…*), the project name (type to rename), the **Scene** picker for the active
scene, Undo/Redo, Play/Pause, and on the right the notice line, the save status and the frame
rate. The **Assets** panel's `+` creates an asset; right-clicking a row offers *Set as active
scene* (double-click or `Enter` does the same), *Create sprite from texture*, *Create animation
rate. The **Assets** panel's `+` creates an asset and opens its tab. A click on a row only
selects (the inspector shows it, no tab moves); a **double-click** opens the tab the asset lives
in — Scene, Behavior, State machine, Shader, Texture, Animation or Container — and on a scene
also makes it the active one. `Enter` does the same once the list has keyboard focus (`Tab`).
A sprite, camera, text or collider has no tab of its own, so a double-click on one does nothing.
Right-clicking a row offers *Set as active scene*, *Create sprite from texture*, *Create animation
from texture* and *Delete…*. In
**Scene objects** it offers *Select asset*, *Add collider*, *Create container*, *Unpack
container*, *Unparent*, *Expand all* / *Collapse all* and *Remove*.
+1 -1
@@ -19,7 +19,7 @@ Like the Behavior tab it follows the selection without being bound to it — the
its placed copies or one of its template objects shows it, anything else leaves the tab on what you
were editing, and only a deleted container makes it fall back to another one. Selecting a template
*object* also switches to the tab, the rule a graph node and a texture frame already follow: it
exists in no other view. Selecting the asset itself does not.
exists in no other view. Selecting the asset itself does not; double-clicking it does.
Placing a container anywhere creates **one** object. Its content is never copied: `resolveObjects`
(`src/core/model/instance.ts`) weaves the template in whenever the holder is read, one level per
+2 -2
@@ -12,7 +12,7 @@ npm run check # typecheck + lint + format:check + tests, the gate CI runs
# code is lost (tail's is reported), so a red run reads as green
npm run build # writes dist/ and regenerates index.html
./build.sh # the same under `set -o pipefail`, for callers that pipe the output
node tools/seed-e2e.mjs && node tools/e2e.mjs # 703 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 717 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
./e2e.sh status # live progress, or the last run's result
@@ -150,4 +150,4 @@ widths to find click points. The **render device is not in this repo** — `/dev
and a 1 GB `/dev/shm` come from `container.options` in the runner's own `config.yaml`, which
applies to every job on that runner. Without them chromium falls back to llvmpipe, which gets
WebGL 1.0 only. Measured in the job container: `ANGLE (Intel, Vulkan 1.3.230, HD Graphics 630)`,
WebGL 2.0, and the same 703 checks as here.
WebGL 2.0, and the same 717 checks as here.
+2 -2
@@ -6,8 +6,8 @@ be refused, which today means a container that would end up inside itself (`plac
`src/core/model/placement.ts` — the same function the command runs, so the preview cannot promise
a placement the drop then denies). Picking a container up selects it, but the Container tab does
*not* follow that while a drag is in flight: the target must not swap out from under the pointer.
Dragging is the only way to place: a double-click on a scene makes it the active one, on anything
else it does nothing.
Dragging is the only way to place: a double-click on an asset opens its tab (a scene also becomes
the active one), it never places.
**Editor symbols are always on top.** The viewport draws scene content (sprites) in an
`objects` layer and editor symbols (camera icon, labels) in an `overlay` layer above it, so a
+2 -1
@@ -5,7 +5,8 @@ shaders; the one effect the node set is sized for is the "Adjust colors" recipe
## The Shader tab
`+` in the **Assets** panel makes a shader; selecting one opens the **Shader** tab on it, with the
`+` in the **Assets** panel makes a shader and opens the **Shader** tab on it (a double-click on
an existing one does the same; a click only selects). The tab has the
same canvas the Behavior tab has: right-click places a node, drag moves, drag from a port links,
`Snap` snaps to the 24 px grid, `Fit` frames the graph, undo takes every step back. The readout on
the right says `N properties` while the graph compiles, otherwise why it does not (`No Output node`,
+2 -2
@@ -4,8 +4,8 @@ events like "on state entered" and a highlight of the current state while playin
steps. The states are edited in the **State machine** tab, which is the graph canvas the Behavior
tab uses — so placing, dragging, the header's **Snap** checkbox, renaming in the inspector,
`Delete` and undo are the graph's.
Selecting the asset opens the tab (a behavior, texture or container asset does not switch tabs —
a machine has nothing to show anywhere else). Right-click on its canvas offers a `State` and
Double-clicking the asset (or creating it) opens the tab, like every asset with a tab; a click
only selects. Right-click on its canvas offers a `State` and
nothing else, named by its number (`State 3` for the third); no behavior palette offers one.
**A behavior reads it through two nodes**, both with a `machine` input that is a picker while