From cd5d761d811013762aa388a8e22ac18d8e89c8a8 Mon Sep 17 00:00:00 2001 From: MelekTaus Date: Thu, 17 Sep 2026 07:27:45 +0200 Subject: [PATCH] Animations: easing per key (#101) --- Animations.md | 13 +++++++++++-- Home.md | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Animations.md b/Animations.md index 8f7899f..cdf5b25 100644 --- a/Animations.md +++ b/Animations.md @@ -26,11 +26,20 @@ choice holds until the next key (that is how a picture sequence works: a `textur frame by frame). Before the first key a row holds its first value, after the last one its last. A row may be **relative**: its numbers are added to what the target held when the animation started, so one walk cycle can bob every enemy where it stands. Rotation blends like any number — -from 350 to 10 goes backwards over 340°, a full turn is 0 → 360. Every key has an -`interpolation` field that may be absent and then means linear; easing lands there later. A row +from 350 to 10 goes backwards over 340°, a full turn is 0 → 360. A row whose object is gone stays, labelled *(missing)*, and is skipped when playing. The same object and property cannot be keyed twice on one animation. +**Easing.** Every key of a number or colour row has an **Easing** for the way from it to the next +key: *Linear* (the default, stored as no field at all), *Step* (holds until the next key, like a +texture does), *Ease in* (starts slow: at half the time a quarter of the way), *Ease out* (starts +fast: three quarters) and *Ease in-out* (slow at both ends, halfway at half the time). The curves +are quadratic. Set it in the inspector for all picked keys at once; keys of a row that cannot blend +are left alone. A new value or a move keeps a key's easing. The timeline draws it into the key: the +right half is the start of the way, the left half its end, a round half a slow one — a diamond is +linear, a circle ease in-out, a half-round key ease in or ease out, a square a step. Player and +preview evaluate it in one place, so both show the same curve. + **The Animation tab.** The header picks the animation, what it **animates** (the root), **+ Row** (a dialog: the root or one of its objects, then a property of that; the inspector's *Change target…* reopens it to move a row's keys to another property of the same kind), **Play** diff --git a/Home.md b/Home.md index ff8e0d3..260a856 100644 --- a/Home.md +++ b/Home.md @@ -43,7 +43,7 @@ into issues #1-#50, closed ones included, each carrying the commits it was filed Several scenes in one run (a `Load scene` node — screens are containers today), auth, touch-optimised layout, graph comments/groups. Sound has no mixer, no fade and no `Set volume` on a playing voice (see [Sounds](Sounds)). A frame is always stretched to -the sprite's `width` x `height`: no nine-slice. Animations have no easing, no events on the +the sprite's `width` x `height`: no nine-slice. Animations have no events on the timeline and no preview in the Scene tab. Slicing cuts a regular grid only — no detection of where the sprites actually sit on the sheet. Unreferenced image files are never collected — deliberately, since the image picker offers them again; nothing deletes a stored image except `DELETE ?r=textures/{file}`.