update:优化射箭窗口逻辑

This commit is contained in:
2026-11-09 17:23:37 +08:00
parent e57374d023
commit 8511bd7e13
+5 -31
View File
@@ -46,7 +46,6 @@ const ROUND_TIP_DELAY = 800;
const ROUND_TIP_WAIT_GRACE = 300;
const PROGRESS_START_DELAY = 100;
const PROGRESS_MIN_TICK_MS = 1;
const PROGRESS_ZERO_WAIT_GRACE = 120;
const AUDIO_TIMEOUT_BASE = 3500;
const AUDIO_TIMEOUT_PER_KEY = 2600;
const AUDIO_TIMEOUT_MAX = 12000;
@@ -335,26 +334,6 @@ function markProgressDeadline(countdown, delayMs = 0) {
progressDeadlineAt = Date.now() + delayMs + countdown.durationMs;
}
function waitForProgressZero() {
const waitMs = Math.ceil(progressDeadlineAt - Date.now());
if (waitMs <= 0) return Promise.resolve();
return new Promise((resolve) => {
let settled = false;
const waiter = {
done: () => {
if (settled) return;
settled = true;
clearTimeout(timer);
progressZeroWaiters.delete(waiter);
resolve();
},
};
const timer = setTimeout(waiter.done, waitMs + PROGRESS_ZERO_WAIT_GRACE);
progressZeroWaiters.add(waiter);
});
}
function onProgressZero() {
progressDeadlineAt = 0;
clearProgressZeroWaiters();
@@ -934,17 +913,12 @@ async function runBattleStartTask(task, runId) {
// 新射手任务:切换当前射手、播报提示,并启动这一箭的倒计时。
async function runToSomeoneShootTask(task, runId) {
// 新射手任务:先等上一轮倒计时归零,再更新展示、播轮次/射手语音、启动倒计时。
const battleInfo = task.message;
const shouldEnterImmediately = showRoundTip.value;
if (shouldEnterImmediately) {
cancelRoundTipDisplay();
progressDeadlineAt = 0;
clearProgressZeroWaiters();
} else {
await waitForProgressZero();
}
if (!isQueueAlive(runId)) return;
// 后端换人消息表示上一箭已结束,立即停止旧计时,不再等待本地倒计时归零。
const battleInfo = task.message;
progressDeadlineAt = 0;
clearProgressZeroWaiters();
uni.$emit("update-remain", { stop: true });
applyBattleBase(battleInfo);
start.value = true;