quickshell: give Archie a gallop for the ball, move his bed next to the bowl

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-08-04 13:34:20 +01:00
parent 36360544ee
commit 8eda5c82b5

View file

@ -1206,6 +1206,52 @@ in
"........TTT..........TTT....................",
"........TTTTT........TTTTT.................."
]
// Galloping for the ball. A bound, not a trot: reaching, with
// the hind legs thrown back and the front legs stretched out
// ahead then everything gathered under him. Same body and
// tail as walkB; it is entirely in the legs.
readonly property var runA: [
"...............................KKKKKKKK.....",
"..............................KKKKKKKKKK....",
"KKKK..........................KKKKKKKKKKK...",
"KKKK..........................KKKKK.KKKKK...",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKK..TTKKKKK.",
".KKKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTTT.",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTT..",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTT.....",
"...KKKKKKKKKKKKKKKKKKKKKKKKKTTKKKK..........",
"...KKKKKKKKKKKKKKKKKKKKKKKKKTTTKKK..........",
"...KKKKKKKKKKKKKKKKKKKKKKKKTTTT.............",
".....KKKKKKKKKKKKKKKKKKKKKTTTT..............",
"....TTKKKKKKKKKKKKKKKKKKKTTTT...............",
".....TTTTT..............TTTT................",
"....TTTTT................TTTT...............",
"...TTTTT..................TTTT..............",
"..TTTTT....................TTTT.............",
"..TTTTT....................TTTT.............",
".TTTTTT....................TTTTTT..........."
]
readonly property var runB: [
"...............................KKKKKKKK.....",
"..............................KKKKKKKKKK....",
"KKKK..........................KKKKKKKKKKK...",
"KKKK..........................KKKKK.KKKKK...",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKK..TTKKKKK.",
".KKKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTTT.",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTTTTT..",
"..KKKKKKKKKKKKKKKKKKKKKKKKKKRRKKKKTTTTT.....",
"...KKKKKKKKKKKKKKKKKKKKKKKKKTTKKKK..........",
"...KKKKKKKKKKKKKKKKKKKKKKKKKTTTKKK..........",
"...KKKKKKKKKKKKKKKKKKKKKKKKTTTT.............",
".....KKKKKKKKKKKKKKKKKKKKKTTTT..............",
"....TTKKKKKKKKKKKKKKKKKKKTTTT...............",
".........TTTTT........TTTT..................",
"..........TTTTT......TTTT...................",
"...........TTTTT....TTTT....................",
"............TTTTT..TTTT.....................",
"............TTTTT..TTTT.....................",
"............TTTTTTTTTTTT...................."
]
// Standing: walkA's planted legs, walkB's tail. Flipping
// between this and walkA is the wag.
readonly property var wag: [
@ -1310,8 +1356,12 @@ in
readonly property real roamL: Theme.barWidth + 12
readonly property real roamR: Math.max(roamL,
archie.width - Theme.frameWidth - cols * cell - 12)
readonly property real bowlX: Math.max(roamL, roamR - 120)
readonly property real bedX: Math.max(roamL, Math.min(bowlX - 500, roamL + 300))
// Bed tucked into the bottom right corner, bowl beside it
// his corner of the room. The bowl derives from the bed so
// they cannot drift into each other.
readonly property real bedX: Math.max(roamL,
archie.width - Theme.frameWidth - 54 * cell - 8)
readonly property real bowlX: Math.max(roamL, bedX - 16 * cell - 26)
// Stand so his muzzle lands in the bowl, not his shoulder.
readonly property real bowlStandX: bowlX - 32 * cell
// Lying down, centred on the cushion.
@ -1481,15 +1531,21 @@ in
archie.arrive();
} else {
let dir = archie.targetX > archie.px ? 1 : -1;
let sp = archie.errand === "ball" ? 3.0 : 1.5;
let run = archie.errand === "ball";
let sp = run ? 3.0 : 1.5;
archie.facing = dir;
archie.px += dir * sp;
archie.stride += sp;
if (archie.stride >= 3 * archie.cell) {
// A gallop covers more ground per stride than
// a trot, so the frames hold longer even though
// he is moving faster.
if (archie.stride >= (run ? 6 : 3) * archie.cell) {
archie.stride = 0;
archie.stepped = !archie.stepped;
}
archie.frame = archie.stepped ? archie.walkB : archie.walkA;
archie.frame = run
? (archie.stepped ? archie.runB : archie.runA)
: (archie.stepped ? archie.walkB : archie.walkA);
}
} else {
archie.frame = archie.mode === "eat" ? archie.eat