A link could only be removed through the menu of its port, and the
line itself took no input. A transition of a state machine could only
be deleted in the list of the inspector. Now the line is the handle,
in a behavior's graph and between states alike.
- A click on a line selects that link and draws a halo behind it. A
press counts within 6 screen pixels of the line, and where two cross
the one drawn last wins.
- Ctrl-click or Shift-click adds a link or takes it away. The rubber
band takes every line it crosses, into the same selection as the
nodes and boxes it caught.
- Delete or Backspace removes what is picked as one undo step. A
right-click on a line offers Hide link and Delete link.
- The inspector shows a picked link: the node and port at each end and
the type it carries, with Hide link and Delete link below. For
several it says how many.
- The arrow of a transition is picked the same way, on its name too.
Delete or a right-click with Delete transition removes it.
- The menu of a port is unchanged, Disconnect included, as answered in
the issue.
- editor/graph/edgeHit.ts holds the hit test as pure functions, and
editor/inspector/edgeSection.ts builds the section. The selection
has a new kind edge, and node and annotation carry edgeIds.
Decided here:
- A hidden link has no line and is never picked this way, also while
it is shown on loan. Its mark at the port stays its handle.
- The menu of a line speaks about the whole selection, like the menu
of a box. With nodes or boxes held alongside it reads Delete N
items.
- Hiding picked links lets go of them, since no line is left.
- A link wins over the box it crosses, and a mark wins over a link.
- A transition has no Hide entry.
- With nodes or boxes in the selection the inspector keeps showing
the node or box, not the link.
Tests:
- Gate: 201 files, 2982 tests (2967 + 15), exit 0
- e2e, full run: 1635 checks passed (1629 + 6), exit 0
- Smokes: 24 / 19 / 21, exit 0
- The full run was done for exactly this state.
- 15 unit tests in tests/editor/edge-selection.test.ts
- Six e2e checks with a real mouse, block 6z-xi in module 06 and 26e7
in module 26
- 12 unit counter-probes all fail tests, run on stein2
- Three browser counter-probes fail, the build went through each
time: no hit on the line, no halo, a band that skips lines
- Screenshots of a picked link and a picked transition looked at
before the last build, none after it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A shader could only be judged by placing it on a sprite and running
the scene. The shader tab now shows its effect next to the graph, on
the image the user picked last, without a picker to maintain.
- The preview follows the last selection that has an image: a placed
sprite with its overrides, size and tint, a sprite asset, a texture
or a frame. Clicking the shader, a node, a behavior or a scene keeps
the picture.
- Without such a selection, or when the picked image is deleted, a
built-in 64 px test image is shown. Its colour runs with u and v, a
checkerboard shows where a UV lands and the border fades for alpha.
- Each property gets a slider. The sliders belong to the preview and
never write to the project. They start at the sprite's values when
it carries this shader, otherwise at the default.
- The preview has its own clock. Hold and Restart are only enabled
when a Time node is in the graph.
- The graph | splitter | panel layout of the particles tab moves into
PreviewSplit, and both tabs use it.
- A nine-sliced frame is previewed unsliced. This is documented.
Findings:
- The slider row stayed squeezed to a few pixels when the properties
changed while the tab was hidden. The layout was triggered one level
too high. The slider check in block 28n holds this.
- The graph canvas is narrower now, 385 px at a 1280 px window, the
same as in the particles tab. Block 28b clicked at a fixed x+420 and
now uses the measured width.
Tests:
- ./check.sh: 132 files, 1952 tests (was 131 / 1941), exit 0
- npm run build: exit 0
- GM_STEPS=28,31 freshly seeded: ALL PASSED, 105 checks
- 11 new unit tests in tests/editor/shader-preview.test.ts
- 7 new e2e checks in block 28n
- Counter-probes: start values ignoring the sprite fail 1 unit test,
a preview ignoring the selection fails 2 e2e checks
- Check total 1209 in README is computed (1202 + 7), CI measures it
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>