diff --git a/Architecture.md b/Architecture.md index 5d077cd..5135a6b 100644 --- a/Architecture.md +++ b/Architecture.md @@ -148,7 +148,8 @@ src/core/time.ts the global clock: one scaled step a frame, shared by the src/core/music/ time (ticks, 480 to the quarter, tempo and meter, a position as bar, beat and tick), sequence (the notes of a window of playing time, across the seam of a loop — a pure rule), Scheduler (#332: plans the notes ahead on the audio clock through a host, so it is measured with a clock - of the test's own) + of the test's own), pattern (#333: a pattern's notes, grid, meter, tempo and loop, held to + their rules, and the sequence it plays) src/runtime/ GameRun (one run: start, tick, `Load scene` — shared by Play and a released game, #266), World, Entity, System interface, Input tracker, CollisionSystem (the editor run's detection), solids (what `Move` collides with and how it slides — one-way solids let it through unless @@ -206,7 +207,7 @@ src/viewport/ WorldViewport (the drawing of a world or a holder, the ba core/soundfx/pitchPlayer, a phase vocoder, #317; a note of an instrument is one voice of what reaches its Output, each way with its own file, #331; a voice can start and be released at a second of the audio clock, #332), music (the scheduler on the library's clock, its - notes played by the project's instruments, driven by `__gm.music` until #333) + musicTimer + notes played by the project's instruments: the Pattern tab's player, #333, and `__gm.music`) + musicTimer (the Web Worker whose interval is the scheduler's beat, #332), ShaderLibrary, ParticleLibrary, particles (one ParticleContainer per source), tilemap (one container per layer), shaderPicture (the picture a shader is laid over when it shades a camera's frame, #299, or @@ -337,6 +338,11 @@ src/editor/curve/ CurveEditor (header: Preset, the picked point's type, Pre graph drawn from curveValue, points and handles edited with the vector art gestures, the preview dot and its rail) + curveView (the curve laid onto a picture for those gestures and read back, a point held between its neighbours, a point put down on free space) +src/editor/pattern/ PatternEditor (header: Play, Grid; plays through the scheduler and follows edits, #333), + PianoRoll (keys, ruler, notes and velocity lane in one widget, the gestures and keys) + + rollView (its geometry: rows, hits, bands) + rollEdit (what a gesture does to the notes) +src/editor/music/ timeView (the time axis: ticks to pixels, zoom, the lines of bars, beats and grid) + TimeRuler + (bars, loop, start and playhead) — for the piano roll and the song tab (#334) src/editor/tile/ TileEditor (header + kind), TileCanvas (every tile of the block and a sample map, animated), PictureStrip (the pictures as animation steps; its reorder maths is `dropIndex` in ui/sortable), TilePalette (the tiles as a grid of pictures in the tilemap panel, #139) diff --git a/Concepts.md b/Concepts.md index 5b95d1c..d5cc36a 100644 --- a/Concepts.md +++ b/Concepts.md @@ -4,7 +4,7 @@ | **Asset** | Named thing with a type (`scene`, `camera`, `clip`, `sprite`, `text`, `behavior`, `collider`, `container`, `texture`, `animation`, `statemachine`, `shader`, `shaderfunction`, `font`, `sound`, `soundfx`, `instrument`, `particles`, `variables`) and typed properties. Assets have **no position**. | | **Texture** | An uploaded image. Scenes, textures, animations, state machines, shaders, fonts, sounds and Variables assets are the eight types that cannot be placed: a texture has no position, it is *worn* by a sprite through the ordinary property `texture`. See [Textures](Textures). | | **Font** | An uploaded typeface, worn by a text through the ordinary property `font`; no font means the editor's own. Uploaded and picked exactly like a texture, and stored the same way. See [Fonts](Fonts). | -| **Sound** | An uploaded audio file. Uploaded, picked and stored exactly like a typeface — but nothing *wears* it: it is neither on screen nor in the scene, and a graph plays it with `Play sound`. Its own rows say how loud it is and whether it loops; the node scales the one and can overrule the other either way. A **sound FX** asset is a graph of effects (gain, pitch, EQ, mix) a `Play sound` can send it through. See [Sounds](Sounds). An **instrument** plays sounds as notes, see [Instruments](Instruments). | +| **Sound** | An uploaded audio file. Uploaded, picked and stored exactly like a typeface — but nothing *wears* it: it is neither on screen nor in the scene, and a graph plays it with `Play sound`. Its own rows say how loud it is and whether it loops; the node scales the one and can overrule the other either way. A **sound FX** asset is a graph of effects (gain, pitch, EQ, mix) a `Play sound` can send it through. See [Sounds](Sounds). An **instrument** plays sounds as notes, see [Instruments](Instruments), and a **pattern** is notes for one, drawn in a piano roll, see [Patterns](Patterns). | | **State machine** | A named set of **states**, edited as nodes in its own tab. A behavior puts it into a state with `Set state`, moves it along a named transition with `State transition` and branches on it with `State branch`. Its **Scope** says where the current state lives: **Local** gives every behavior instance one of its own, **Global** keeps a single one for the whole run. See [State machines](State-machines). | | **Shader** | A node graph that becomes the GLSL a sprite is drawn with, edited in its own tab. A sprite, a text or a particle source wears it through `shader`; the numbers the graph declares are rows below that dropdown. A **shader function** is a part of such a graph kept on its own and used as a node in other shaders. See [Shaders](Shaders). | | **Particles** | A node graph that says what *one* particle is as a function of its age and of a random number drawn once for it — no forces, no simulation. Unlike the other graph assets it **is** placeable: the object made from it is a source, whose rows say how many go out and for how long they live. Because a particle is a formula, the same second always draws the same picture and the tab's slider can jump to any of them exactly. See [Particles](Particles). | diff --git a/Development.md b/Development.md index 44290db..2b4b78b 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 # 1744 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1796 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/Home.md b/Home.md index c7b5c12..2f10046 100644 --- a/Home.md +++ b/Home.md @@ -23,6 +23,7 @@ Live: · Widget playground: