diff --git a/Accounts.md b/Accounts.md index affaf3a..170defb 100644 --- a/Accounts.md +++ b/Accounts.md @@ -13,7 +13,8 @@ sent, *Wrong user name or password* when the server refuses the pair. The **Account** menu sits at the far right of the toolbar and holds everything about the account: who is signed in (as an entry that cannot be picked), *Change password* and *Logout*. Logout ends the session and brings the sign-in screen back. The name stands in the window title as well -(`Game Maker — user`), because the toolbar itself has no room to spare for a label. +(`Game Maker — user`) rather than as a second label in the bar, which since #183 carries icons +and no words at all. Signing in and out never reloads the page and never builds a second canvas: the picture changes, nothing else. What is unsaved is written before the session ends, the editor then lets go of diff --git a/Architecture.md b/Architecture.md index baaf1c1..e15c4d8 100644 --- a/Architecture.md +++ b/Architecture.md @@ -104,7 +104,11 @@ src/viewport/ view (transforms), items (what to draw), symbols (how to particles (one ParticleContainer per source), tilemap (one container per layer), drawOrder (objects and tilemap layers by z, #174), activeCamera — no editor concepts, so tests reach it freely -src/editor/ App → Editor (layout + ticker), PlaySession (the run), ProjectSession (load/create), +src/editor/ App → Editor (layout + ticker), PlaySession (the run), + ProjectSession (load/create/delete plus the top bar's one menu, #183), + OpenProjectDialog (the project picker behind "Open project…"), + ProjectSettingsDialog + settingsChanges (name, the start-scene switch and the collision + layers in one dialog; the pure rule of what Apply has to carry out), EditorRun (run in editor), state, actions, shortcuts, debugHook, textProbe (finding widgets by their text — the ground floor of the test hook, shared with the sign-in screen), auth/LoginScreen + auth/PasswordDialog + auth/loginRules (the sign-in screen and the change-password dialog in the canvas, and what either may complain about, #177/#182), autosave, @@ -131,7 +135,8 @@ src/editor/inspector/ Inspector panel, host (what a section builds into), field src/editor/panels/ AssetPanel, assetGroups (groups by type and their order, #176), assetIcons (one SVG per asset type in icons/, shared by the panel, the + menu, the tabs and Scene objects, plus the List, Game and Plugins tabs' own three, which stand for no asset), - assetMenu (the two groups of the + menu), HierarchyPanel, Toolbar, + assetMenu (the two groups of the + menu), HierarchyPanel, + Toolbar + toolbarIcons (five icon buttons, no captions: menu, undo, redo, play, pause, #183), TilemapPanel (tools, tiles and layers of the one selected tilemap, beside the scene view, #142; painting itself is SceneViewport) src/editor/graph/ GraphEditor (header, breadcrumb), GraphCanvas, graphView (zoom limits, grid, panAndZoom — shared with NodeBoard and the Tile tab's TileCanvas), EdgeLayer (curves and fold marks), graphMenus, diff --git a/Colliders.md b/Colliders.md index a3e571b..d6369a8 100644 --- a/Colliders.md +++ b/Colliders.md @@ -106,9 +106,9 @@ Tiles can be one-way as well (see [Tilemaps](Tilemaps#one-way-tiles)). ## Collision layers -A project has up to 16 named **collision layers** (#152), edited under **Project → Collision -layers…**; a new project has one, *Default*. Every collider and every tilemap names the layer it -sits on (**Layer**) and the layers it collides with (**Collides with**, a tick per layer). +A project has up to 16 named **collision layers** (#152), edited in the top bar's **menu → +Project settings…**; a new project has one, *Default*. Every collider and every tilemap names the +layer it sits on (**Layer**) and the layers it collides with (**Collides with**, a tick per layer). **Two things meet only when each one names the layer of the other.** The rule is symmetric, as in the physics engine itself, so there is no pair that collides only one way: giving the player's diff --git a/Concepts.md b/Concepts.md index 9c73ead..ba17f7a 100644 --- a/Concepts.md +++ b/Concepts.md @@ -17,7 +17,7 @@ | **Variables asset** | Declarations and nothing else — no graph, no position, never placed. A `Variables` node naming it reads and writes **one value per key for the whole run**, however many graphs point at it. The values start at the declared ones on every Play and are never written back, so playing cannot change the project; while a run is on the asset's inspector shows them live and an edit there reaches the run at once. Two such assets may declare the same name without meeting. See [Behaviors](Behaviors). | | **Run in editor** | A switch only behaviors have (default off). With it on the behavior keeps running while the project is **not** playing — and unlike Play it then edits the *saved* model: what it moves or writes is a real change, autosaved and not on the undo stack. See *Running without Play*. | | **Collider** | A shape (box or circle) for collision detection, placed as a **child** of the object it belongs to (its *body*). Drawn as a green outline in edit mode only. | -| **Collision layer** | One of up to 16 named layers of the project (**Project → Collision layers…**). A collider or tilemap names the layer it is on and the layers it **collides with**; two of them meet only when each one names the layer of the other. A new project has one layer, *Default*, which every collider is on and meets — so nothing collides differently until a layer is named. See [Colliders](Colliders#collision-layers). | +| **Collision layer** | One of up to 16 named layers of the project (**menu → Project settings…**). A collider or tilemap names the layer it is on and the layers it **collides with**; two of them meet only when each one names the layer of the other. A new project has one layer, *Default*, which every collider is on and meets — so nothing collides differently until a layer is named. See [Colliders](Colliders#collision-layers). | | **Rigidbody** | Placed as a **child** of an object, it hands that object to the physics engine while playing: it falls with the scene's gravity, bounces and rests on colliders, pushed by what it meets. At most one per object. See [Physics](Physics). | | **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. | @@ -38,12 +38,15 @@ one, so switching it off hands the view to the next; with none on the tab stays shows what Play would show, minus the editor symbols. Play has no built-in behaviour (no input, 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 — usable while a run is on, because it only moves the editor's view and never the running -world — Undo/Redo, the **start-scene switch** (*Start scene* / *Active scene*, see **Start -scene**), Play/Pause, and on the right the notice line, the save status and the frame -rate. The **Assets** panel's `+` creates an asset and opens its tab; its menu lists the types in +**Toolbar and panels.** The toolbar carries five **icon buttons** and no captions (#183): the +**menu** (three bars) on the left with *New project*, *Open project…* and *Project settings…*, +**undo** and **redo** beside it, and **play** and **pause** in the middle — play turns into a stop +square while a run is on, pause into a second play sign while it is held. On the right stand the +notice line, the save status, the frame rate and the **Account** menu. What the bar used to spell +out lives in the menu now: the project list in *Open project…*, the project name, the +**start-scene switch** (*Start scene* / *Active scene*, see **Start scene**) and the collision +layers in *Project settings…*. The active scene is picked where the scenes are — by double-clicking +one in the **Assets** panel. The **Assets** panel's `+` creates an asset and opens its tab; its menu lists the types in two alphabetical groups, first what can be placed into a scene, then what only lives in the library (#43) — the line between them answers the question that follows right after "which type?". Every type has an **icon** of its own, the same wherever the type shows: in the `+` menu, on the diff --git a/Development.md b/Development.md index fb0e921..a4c655c 100644 --- a/Development.md +++ b/Development.md @@ -13,7 +13,7 @@ npm run check # typecheck + lint + format:check + tests, the gate CI runs npm run build # writes dist/ and regenerates index.html ./build.sh # the same under `set -o pipefail`, for callers that pipe the output php tools/make-user.php # an account; every tool signs in (see Accounts) -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1138 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1147 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/Scenes.md b/Scenes.md index e17d7b7..d288bee 100644 --- a/Scenes.md +++ b/Scenes.md @@ -5,9 +5,10 @@ Those are three different questions, and this page is about keeping them apart. ## Active scene, start scene The **active scene** is what the editor shows: the Scene tab draws it, the hierarchy lists it, a -dropped asset lands in it. It is set by the toolbar's **Scene** picker, by double-clicking a scene -in the Assets panel, or through *Set as active scene* in its context menu. `●` marks it in the -list. +dropped asset lands in it. It is set by double-clicking a scene in the Assets panel, or through +*Set as active scene* in its context menu — the toolbar has no scene picker since #183. `●` marks +it in the list. Both ways stay open while a run is on: they only move the editor's view and never +touch the running world. The **start scene** is where a run begins — the title screen, the first level, whatever a player would see first. It is named on the **project**, not on the scene asset: right-click a scene in @@ -15,7 +16,7 @@ the Assets panel → **Set as start scene**. `▶` marks it, and the same place scene** to take the name back. A project that never names one has none, and then the two questions have the same answer. -Which of the two Play uses is the **switch next to the Play button**: +Which of the two Play uses is the **Play starts** switch in **menu → Project settings…**: | Switch | What Play builds its world from | | --- | --- | @@ -24,10 +25,11 @@ Which of the two Play uses is the **switch next to the Play button**: The switch is remembered in the **browser**, not in the project: it says how *you* are working this afternoon, not what the game does, and it must never turn up in a diff of the project file. +It stands in the settings dialog beside the project name and the collision layers, which *do* +belong to the project — the dialog is the one place these are edited, not the split it says. It is captioned with the mode it stands in — *Start scene* or *Active scene*, worded exactly like the entries of its own menu, so that what you picked and what you read back are the same words. -Which scene that currently is stands in the **scene selector** on the left, and the start scene is -marked `▶` in the Assets panel. +The start scene is marked `▶` in the Assets panel, the active one `●`. The point of the two modes is that a game with a title screen is otherwise tedious to work on: every run would begin at the title, three clicks away from the level you are editing. *Active