fix:射箭报环的时候进度条暂停
This commit is contained in:
@@ -47,6 +47,10 @@ const battleWay = ref(0);
|
||||
const lastToSomeoneShootKey = ref("");
|
||||
/** 控制设备离线提示弹窗的显示状态 */
|
||||
const showOfflineModal = ref(false);
|
||||
/** 待延迟发出的进度条重置队伍(ShootResult 报环期间暂缓切换,报环音频结束后再发 reset) */
|
||||
const pendingProgressTeam = ref(null);
|
||||
/** 报环序列的最后一个音频类型('hasAdjust' = 最后 key 为方向调整,'noAdjust' = 最后 key 为环数/未上靶) */
|
||||
const pendingTriggerKey = ref(null);
|
||||
|
||||
/**
|
||||
* 监听设备在线状态,比赛进行中设备离线时弹窗提示用户
|
||||
@@ -144,7 +148,8 @@ const recoverData = (battleInfo, {force = false, arrowOnly = false} = {}) => {
|
||||
}, 100);
|
||||
});
|
||||
} else {
|
||||
uni.$emit("update-remain", {reset: true, value: 15, team: targetTeam});
|
||||
// 报环语音播放期间暂缓切换进度条:存储目标队伍,待报环音频结束后由 onAudioEnded 发出 reset
|
||||
pendingProgressTeam.value = targetTeam;
|
||||
updateRemainSecond.value = battleInfo.readyTime;
|
||||
}
|
||||
} else {
|
||||
@@ -165,6 +170,20 @@ const recoverData = (battleInfo, {force = false, arrowOnly = false} = {}) => {
|
||||
};
|
||||
|
||||
function onAudioEnded(s) {
|
||||
// 报环序列最后一个音频结束后,切换进度条到下一玩家满值
|
||||
// pendingTriggerKey 标记最后一个 key 类型:hasAdjust 则等"调整"音频结束,noAdjust 则等"环"/"靶"音频结束
|
||||
if (
|
||||
pendingProgressTeam.value !== null &&
|
||||
pendingTriggerKey.value !== null &&
|
||||
(
|
||||
(pendingTriggerKey.value === 'hasAdjust' && s.includes('调整')) ||
|
||||
(pendingTriggerKey.value === 'noAdjust' && (s.includes('环') || s.includes('靶')))
|
||||
)
|
||||
) {
|
||||
uni.$emit("update-remain", {reset: true, value: 15, team: pendingProgressTeam.value});
|
||||
pendingProgressTeam.value = null;
|
||||
pendingTriggerKey.value = null;
|
||||
}
|
||||
// "请红方射箭"/"请蓝方射箭":队友或对手轮次;"轮到你了":用户本人轮次(HeaderProgress特殊分支)
|
||||
// 三者音频结束后均需启动倒计时进度条
|
||||
if (s.indexOf('请红方射箭') >= 0 || s.indexOf('请蓝方射箭') >= 0 || s.indexOf('轮到你了') >= 0) {
|
||||
@@ -172,6 +191,12 @@ function onAudioEnded(s) {
|
||||
if (s.indexOf('请红方射箭') >= 0) team = 'red';
|
||||
else if (s.indexOf('请蓝方射箭') >= 0) team = 'blue';
|
||||
else team = tips.value.includes('红队') ? 'red' : 'blue'; // 轮到你了:从当前tips判断用户所在队伍
|
||||
// 兜底:无报环音频时(如首次 ToSomeoneShoot 无前置 ShootResult),在此清空 pending 并发出 reset
|
||||
if (pendingProgressTeam.value !== null) {
|
||||
uni.$emit("update-remain", {reset: true, value: 15, team: pendingProgressTeam.value});
|
||||
pendingProgressTeam.value = null;
|
||||
pendingTriggerKey.value = null;
|
||||
}
|
||||
uni.$emit("update-remain", {stop: false, value: updateRemainSecond.value, team: team});
|
||||
}
|
||||
if (s.indexOf("比赛结束") >= 0) {
|
||||
@@ -229,6 +254,11 @@ async function onReceiveMessage(msg) {
|
||||
uni.$emit("update-remain", {stop: true})
|
||||
showRoundTip.value = false;
|
||||
recoverData(msg, {arrowOnly: true});
|
||||
// 根据 shootData.angle 预判报环序列最后一个 key:
|
||||
// 有 angle 则最后 key 为"向X调整"(hasAdjust),否则为"环"/"未上靶"(noAdjust)
|
||||
if (msg.shootData) {
|
||||
pendingTriggerKey.value = (msg.shootData.angle !== null) ? 'hasAdjust' : 'noAdjust';
|
||||
}
|
||||
} else if (msg.type === MESSAGETYPESV2.NewRound) {
|
||||
// 在进入延迟前先捕获当前轮次,供 onNewRound 使用,防止 800ms 内 ToSomeoneShoot 提前更新 currentRound 造成 Tip 展示错轮
|
||||
const prevRound = currentRound.value;
|
||||
|
||||
Reference in New Issue
Block a user