update:优化射箭窗口逻辑
This commit is contained in:
@@ -46,7 +46,6 @@ const ROUND_TIP_DELAY = 800;
|
|||||||
const ROUND_TIP_WAIT_GRACE = 300;
|
const ROUND_TIP_WAIT_GRACE = 300;
|
||||||
const PROGRESS_START_DELAY = 100;
|
const PROGRESS_START_DELAY = 100;
|
||||||
const PROGRESS_MIN_TICK_MS = 1;
|
const PROGRESS_MIN_TICK_MS = 1;
|
||||||
const PROGRESS_ZERO_WAIT_GRACE = 120;
|
|
||||||
const AUDIO_TIMEOUT_BASE = 3500;
|
const AUDIO_TIMEOUT_BASE = 3500;
|
||||||
const AUDIO_TIMEOUT_PER_KEY = 2600;
|
const AUDIO_TIMEOUT_PER_KEY = 2600;
|
||||||
const AUDIO_TIMEOUT_MAX = 12000;
|
const AUDIO_TIMEOUT_MAX = 12000;
|
||||||
@@ -335,26 +334,6 @@ function markProgressDeadline(countdown, delayMs = 0) {
|
|||||||
progressDeadlineAt = Date.now() + delayMs + countdown.durationMs;
|
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() {
|
function onProgressZero() {
|
||||||
progressDeadlineAt = 0;
|
progressDeadlineAt = 0;
|
||||||
clearProgressZeroWaiters();
|
clearProgressZeroWaiters();
|
||||||
@@ -934,17 +913,12 @@ async function runBattleStartTask(task, runId) {
|
|||||||
|
|
||||||
// 新射手任务:切换当前射手、播报提示,并启动这一箭的倒计时。
|
// 新射手任务:切换当前射手、播报提示,并启动这一箭的倒计时。
|
||||||
async function runToSomeoneShootTask(task, runId) {
|
async function runToSomeoneShootTask(task, runId) {
|
||||||
// 新射手任务:先等上一轮倒计时归零,再更新展示、播轮次/射手语音、启动倒计时。
|
if (!isQueueAlive(runId)) return;
|
||||||
|
// 后端换人消息表示上一箭已结束,立即停止旧计时,不再等待本地倒计时归零。
|
||||||
const battleInfo = task.message;
|
const battleInfo = task.message;
|
||||||
const shouldEnterImmediately = showRoundTip.value;
|
|
||||||
if (shouldEnterImmediately) {
|
|
||||||
cancelRoundTipDisplay();
|
|
||||||
progressDeadlineAt = 0;
|
progressDeadlineAt = 0;
|
||||||
clearProgressZeroWaiters();
|
clearProgressZeroWaiters();
|
||||||
} else {
|
uni.$emit("update-remain", { stop: true });
|
||||||
await waitForProgressZero();
|
|
||||||
}
|
|
||||||
if (!isQueueAlive(runId)) return;
|
|
||||||
|
|
||||||
applyBattleBase(battleInfo);
|
applyBattleBase(battleInfo);
|
||||||
start.value = true;
|
start.value = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user