From 7095ad8157466b314c42c51aa702db1853b05ceb Mon Sep 17 00:00:00 2001 From: meleki Date: Fri, 2 Oct 2026 23:53:00 +0200 Subject: [PATCH] Scene editing: a scene comes up framed as Fit frames it (#295) Concepts: Unpack is in the right-click menu only. Colliders: the inspector does not list the corners of a polygon. Development: 1695 editor checks. --- Colliders.md | 2 +- Concepts.md | 2 +- Development.md | 2 +- Scene-editing.md | 6 ++++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Colliders.md b/Colliders.md index 3190eba..d1819e9 100644 --- a/Colliders.md +++ b/Colliders.md @@ -45,7 +45,7 @@ its slant. the collider — without a picked corner Delete removes the object, as everywhere. A **right-click** on a corner opens a menu with **Delete point**. Three corners always stay. The pick ends with a press beside the corners and when another object is selected. Each change is one undo step. The - list can also be edited in the inspector. + inspector does not list the corners (#295): the outline in the scene view is where they are edited. A polygon may be concave: it is cut into convex pieces (ear clipping, then the cuts that are not needed are joined again), which is what collision works with. One that crosses itself or has no area is drawn **red** and collides with nothing. diff --git a/Concepts.md b/Concepts.md index 3ce0188..93dfc59 100644 --- a/Concepts.md +++ b/Concepts.md @@ -24,7 +24,7 @@ | **Override** | A per-object value that replaces the asset's value for one property. Only changed keys are stored; the inspector paints their label gold and offers a reset (↺) and an **apply** (↑) that writes the value into the asset instead. Both appear only where the value really differs from its base — an override carrying the asset's own value is none. | | **Default** | Every property has a schema default. Asset values that differ from it are marked gold in the inspector and can be reset (↺) the same way an override can. The asset's name in the **Assets** panel carries the same gold while any of them does (`assetDeviates`, `src/core/properties/deviation.ts` — the inspector marks the rows of that same schema, so the list cannot claim a deviation the inspector then fails to show). A behavior's variables are not in it: their default is declared on the variable itself, so the asset value cannot differ from it. | | **Instance** | An object resolved from a placed container's template. Its **values** can be edited — position, name, property overrides — and only what actually deviates is stored, as a sparse `instanceEdits` entry on the container object keyed by the template path. Everything else keeps following the template. Its **structure** cannot: it can not be removed, re-parented or given a collider, and nothing of the scene can be parented into it. ↺ ▾ resets to the nearest base, which inside a container is the **template as the containers in between leave it**; ↑ ▾ offers **Apply to container** (write the value into the template, where every other instance still at the old value picks it up) and/or **Apply to asset** (which drops the template's override as well). With one base left the menu collapses to a plain ↺ / ↑, with none the buttons disappear. Gold marks the same thing the buttons offer. | -| **Unpack** | Writes a placed container's content into the scene as ordinary objects (hierarchy context menu, or the inspector's *Content* section). The ids survive it, so the selection does; from then on the structure is editable and the objects no longer follow the template. | +| **Unpack** | Writes a placed container's content into the scene as ordinary objects (*Unpack container* in the right-click menu of the hierarchy or the scene view). The ids survive it, so the selection does; from then on the structure is editable and the objects no longer follow the template. | | **Start scene** | The scene a run *begins* with, named on the project rather than on any asset (right-click a scene in the Assets panel → *Set as start scene*, `▶` marks it in the list; *Clear start scene* takes it back). It is a different question from which scene is **active**, which is the one you have open in the editor — the switch next to Play says which of the two Play asks. Without a start scene named, both are the same thing. See [Scenes](Scenes). | | **Load scene** | The node that swaps the running scene for another one, inside the same run. Everything of the old scene is destroyed — its objects, their behaviors, and the sounds those behaviors were playing — while what belongs to the **run** carries on: the values of the Variables assets, the states of the global machines, and the clock. A top-level object with **Keep on scene load** switched on travels into the next scene instead, with everything below it. See [Scenes](Scenes). | | **Edit mode** | The Scene tab draws the project model; panels, grid, gizmos and drag-to-move are active. | diff --git a/Development.md b/Development.md index 3300364..32a9ece 100644 --- a/Development.md +++ b/Development.md @@ -18,7 +18,7 @@ php tests/php/accounts.test.php # the API's accoun # has and the web server's container has not (SKIP there) php tests/php/snapshots.test.php # the snapshot store (#231), the same way php tests/php/releases.test.php # the release store (#266), the same way -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1692 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1695 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 diff --git a/Scene-editing.md b/Scene-editing.md index 74219e0..74acd1a 100644 --- a/Scene-editing.md +++ b/Scene-editing.md @@ -28,6 +28,12 @@ match only while they are the same size: with the tilemap panel open beside the view is narrower and *Auto* may come to a smaller step. Without a camera, *Fit* frames the whole content in a whole step as before. +**A scene comes up framed.** When a project is loaded and when another scene is opened, the Scene +tab shows it as if *Fit* had been clicked (#295). From then on the view is yours: nothing moves it +until the next scene is opened. A scene with nothing in it stands at the origin, one screen pixel +per world pixel. A scene the running game loads is not framed anew, and the Container tab keeps the +view of each container as before. + **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 sprite can never hide a symbol regardless of z or hierarchy order. A viewport label keeps a