From fafe114bbd7f9033ebfe655adeccbd66a91675a1 Mon Sep 17 00:00:00 2001 From: Jenyyk Date: Mon, 10 Feb 2025 10:29:17 +0100 Subject: [PATCH 1/5] feat: Oneko sleeps on closest position on bar --- oneko.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/oneko.js b/oneko.js index a363a7f..fb3ff3d 100644 --- a/oneko.js +++ b/oneko.js @@ -120,11 +120,13 @@ // Get the far right and top of the progress bar const progressBar = document.querySelector(".main-nowPlayingBar-center .playback-progressbar"); const progressBarRight = progressBar.getBoundingClientRect().right; + const progressBarLeft = progressBar.getBoundingClientRect().left; const progressBarTop = progressBar.getBoundingClientRect().top; const progressBarBottom = progressBar.getBoundingClientRect().bottom; // Make the cat sleep on the progress bar - mousePosX = progressBarRight - 16; + // Clamps position to closest point from mouse to bar + mousePosX = Math.min(Math.max(progressBarLeft + 16, mousePosX), progressBarRight - 16); mousePosY = progressBarTop - 8; // Get the position of the remaining time From 3cba1df574c88010661d788c7212f7d1840a1235 Mon Sep 17 00:00:00 2001 From: Jenyyk Date: Mon, 10 Feb 2025 14:16:27 +0100 Subject: [PATCH 2/5] feat: save Onekos sleeping location --- oneko.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/oneko.js b/oneko.js index fb3ff3d..7fd2b43 100644 --- a/oneko.js +++ b/oneko.js @@ -11,6 +11,7 @@ idleAnimation = null, idleAnimationFrame = 0, forceSleep = false, + sleepSaved = true, grabbing = false, grabStop = true, nudge = false, @@ -124,11 +125,23 @@ const progressBarTop = progressBar.getBoundingClientRect().top; const progressBarBottom = progressBar.getBoundingClientRect().bottom; - // Make the cat sleep on the progress bar + const progressBarWidth = progressBarRight - progressBarLeft; // Clamps position to closest point from mouse to bar - mousePosX = Math.min(Math.max(progressBarLeft + 16, mousePosX), progressBarRight - 16); + const normalizedSleepLocation = Math.min(Math.max(progressBarLeft + 16, mousePosX), progressBarRight - 16); + const percentSleepLocation = (normalizedSleepLocation - progressBarLeft) / progressBarWidth; + // Make the cat sleep on the progress bar + // if there is a saved location, go there + mousePosX = sleepSaved ? + progressBarLeft + (parseLocalStorage("sleepPos", 0) * progressBarWidth) : + normalizedSleepLocation; mousePosY = progressBarTop - 8; + //save sleeping location + if (!sleepSaved) { + localStorage.setItem("oneko:sleepPos", percentSleepLocation); + sleepSaved = true; + } + // Get the position of the remaining time const remainingTime = document.querySelector(".main-playbackBarRemainingTime-container"); const remainingTimeLeft = remainingTime.getBoundingClientRect().left; @@ -255,7 +268,11 @@ nekoEl.style.filter = kuroNeko ? "invert(100%)" : "none"; }); - nekoEl.addEventListener("dblclick", sleep); + // on new sleep, reset saved position + nekoEl.addEventListener("dblclick", () => { + sleepSaved = false; + sleep() + }); window.onekoInterval = setInterval(frame, 100); } From a268875bf9e5fd44b897ac5e49aab8142e6d4577 Mon Sep 17 00:00:00 2001 From: Jenyyk Date: Mon, 10 Feb 2025 14:34:22 +0100 Subject: [PATCH 3/5] feat: change onekos sleeping position by dragging --- oneko.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/oneko.js b/oneko.js index 7fd2b43..96bd2ef 100644 --- a/oneko.js +++ b/oneko.js @@ -249,12 +249,17 @@ nekoEl.style.top = `${nekoPosY - 16}px`; }; - const mouseup = () => { + const mouseup = (e) => { grabbing = false; nudge = true; resetIdleAnimation(); window.removeEventListener("mousemove", mousemove); window.removeEventListener("mouseup", mouseup); + // Refresh sleeping position when dragged away + mousePosX = e.clientX; + sleepSaved = false; + forceSleep = false; + sleep(); }; window.addEventListener("mousemove", mousemove); From bf2e02ae82aea27db328e598fc6dc9a436365321 Mon Sep 17 00:00:00 2001 From: Jenyyk Date: Mon, 10 Feb 2025 20:58:29 +0100 Subject: [PATCH 4/5] fix: remove redundant special cases --- oneko.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/oneko.js b/oneko.js index 96bd2ef..604f985 100644 --- a/oneko.js +++ b/oneko.js @@ -153,20 +153,9 @@ const elapsedTimeRight = elapsedTime.getBoundingClientRect().right; const elapsedTimeLeft = elapsedTime.getBoundingClientRect().left; - // If the remaining time is on top right of the progress bar, make the cat sleep to the a little bit to the left of the remaining time - // Theme compatibility - if (remainingTimeLeft < progressBarRight && remainingTimeTop < progressBarBottom && progressBarTop - remainingTimeBottom < 32) { - mousePosX = remainingTimeLeft - 16; - - // Comfy special case - if (Spicetify.Config.current_theme === "Comfy") { - mousePosY = progressBarTop - 14; - } - - // Move the cat to the left of elapsed time if it is too close to the remaining time (Nord theme) - if (remainingTimeLeft - elapsedTimeRight < 32) { - mousePosX = elapsedTimeLeft - 16; - } + // Comfy special case + if (Spicetify.Config.current_theme === "Comfy") { + mousePosY = progressBarTop - 14; } } From f207781724eb6e34ced902af922b0ac193317de0 Mon Sep 17 00:00:00 2001 From: Jenyyk Date: Tue, 11 Feb 2025 12:20:49 +0100 Subject: [PATCH 5/5] fix: dragging no longer sends oneko to sleep --- oneko.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/oneko.js b/oneko.js index 604f985..a830dd1 100644 --- a/oneko.js +++ b/oneko.js @@ -245,10 +245,12 @@ window.removeEventListener("mousemove", mousemove); window.removeEventListener("mouseup", mouseup); // Refresh sleeping position when dragged away - mousePosX = e.clientX; - sleepSaved = false; - forceSleep = false; - sleep(); + if (forceSleep) { + mousePosX = e.clientX; + sleepSaved = false; + forceSleep = false; + sleep(); + } }; window.addEventListener("mousemove", mousemove);