fix: refine heaven readings and heart breathing
This commit is contained in:
+11
-10
@@ -10,6 +10,9 @@ const {
|
||||
todayString,
|
||||
} = window.XiaobaiUI;
|
||||
|
||||
const HEART_BREATH_TOTAL_MS = 40_000;
|
||||
const HEART_BREATH_PHASE_MS = 4_000;
|
||||
|
||||
const state = {
|
||||
user: null,
|
||||
csrfToken: "",
|
||||
@@ -81,7 +84,7 @@ const state = {
|
||||
heavenReadingError: "",
|
||||
heartStage: "intro",
|
||||
heartTimer: null,
|
||||
heartSeconds: 30,
|
||||
heartSeconds: HEART_BREATH_TOTAL_MS / 1000,
|
||||
heartBreathingEndsAt: 0,
|
||||
heartLines: [],
|
||||
heartThrows: [],
|
||||
@@ -3791,11 +3794,11 @@ function waitForHeartMotion(duration, token = state.heartStageToken) {
|
||||
|
||||
async function startHeartBreathing() {
|
||||
if (state.heartTimer) clearInterval(state.heartTimer);
|
||||
state.heartSeconds = 30;
|
||||
state.heartSeconds = HEART_BREATH_TOTAL_MS / 1000;
|
||||
state.heartBreathingEndsAt = 0;
|
||||
document.querySelector("#beginCastingButton")?.classList.remove("is-ready");
|
||||
if (!await transitionHeartStage("breathing")) return;
|
||||
state.heartBreathingEndsAt = Date.now() + 30_000;
|
||||
state.heartBreathingEndsAt = Date.now() + HEART_BREATH_TOTAL_MS;
|
||||
const ember = document.querySelector("#heartIncenseEmber");
|
||||
ember?.classList.remove("is-burning");
|
||||
if (ember) void ember.offsetWidth;
|
||||
@@ -3821,22 +3824,20 @@ function finishHeartBreathing() {
|
||||
}
|
||||
|
||||
function updateBreathingDisplay() {
|
||||
setText("breathingSeconds", Math.max(0, state.heartSeconds));
|
||||
const remainingMs = state.heartBreathingEndsAt
|
||||
? Math.max(0, state.heartBreathingEndsAt - Date.now())
|
||||
: Math.max(0, state.heartSeconds * 1000);
|
||||
const elapsedMs = 30_000 - remainingMs;
|
||||
const inhaling = Math.floor(elapsedMs / 4000) % 2 === 0;
|
||||
const elapsedMs = HEART_BREATH_TOTAL_MS - remainingMs;
|
||||
const inhaling = Math.floor(elapsedMs / HEART_BREATH_PHASE_MS) % 2 === 0;
|
||||
const phase = state.heartSeconds <= 0 ? "settled" : inhaling ? "inhale" : "exhale";
|
||||
const scene = document.querySelector("#breathingScene");
|
||||
scene.dataset.phase = phase;
|
||||
setText("breathingPhase", phase === "settled" ? "已静" : inhaling ? "吸气" : "呼气");
|
||||
document.querySelector("#breathingProgress").style.width = `${clamp(elapsedMs / 300, 0, 100)}%`;
|
||||
const prompt = state.heartSeconds <= 0
|
||||
? "静心已成,可以起卦"
|
||||
: state.heartSeconds > 20
|
||||
: elapsedMs < 16_000
|
||||
? inhaling ? "缓慢吸气,放下对答案的预设" : "缓慢呼气,让预设随之松开"
|
||||
: state.heartSeconds > 10
|
||||
: elapsedMs < 32_000
|
||||
? inhaling ? "吸气,只留下真正想问的事" : "呼气,不急着寻找答案"
|
||||
: inhaling ? "吸气,让心停在此刻" : "呼气,不追逐经过的念头";
|
||||
setText("breathingPrompt", prompt);
|
||||
@@ -4185,7 +4186,7 @@ function resetHeartCoins() {
|
||||
async function resetHeartRitual() {
|
||||
if (state.heartTimer) clearInterval(state.heartTimer);
|
||||
state.heartTimer = null;
|
||||
state.heartSeconds = 30;
|
||||
state.heartSeconds = HEART_BREATH_TOTAL_MS / 1000;
|
||||
state.heartBreathingEndsAt = 0;
|
||||
state.heartLines = [];
|
||||
state.heartThrows = [];
|
||||
|
||||
Reference in New Issue
Block a user