diff --git a/src/apis.js b/src/apis.js index 9b16a5b..d9b0d1c 100644 --- a/src/apis.js +++ b/src/apis.js @@ -296,6 +296,7 @@ export const isGamingAPI = async () => { }; export const getCurrentGameAPI = async () => { + uni.$emit("update-header-loading", true); const result = await request("GET", "/user/join/battle"); return result.currentGame || {}; }; diff --git a/src/components/Header.vue b/src/components/Header.vue index d3375d5..aa6a380 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -1,5 +1,5 @@ @@ -58,6 +77,12 @@ onMounted(() => { + @@ -100,4 +125,12 @@ onMounted(() => { font-size: 16px; color: #fff; } +.loading { + width: 20px; + height: 20px; + margin-left: 10px; + transition: all 0.3s ease; + background-blend-mode: darken; + animation: rotate 2s linear infinite; +} diff --git a/src/components/ShootProgress.vue b/src/components/ShootProgress.vue index bf9c654..6fee8a0 100644 --- a/src/components/ShootProgress.vue +++ b/src/components/ShootProgress.vue @@ -117,7 +117,7 @@ watch( const updateRemain = (value) => { if (timer.value) clearInterval(timer.value); - remain.value = Math.floor(value); + remain.value = Math.round(value); if (remain.value > 0) { timer.value = setInterval(() => { if (remain.value > 0) remain.value--; diff --git a/src/components/Timer.vue b/src/components/Timer.vue index 24fc6e2..39c7e9c 100644 --- a/src/components/Timer.vue +++ b/src/components/Timer.vue @@ -70,7 +70,7 @@ onUnmounted(() => { .container > view:last-child > text:nth-child(2) { color: #fed847; font-size: 16px; - width: 16px; + width: 18px; text-align: center; } diff --git a/src/pages/battle-result.vue b/src/pages/battle-result.vue index f1695de..429fc10 100644 --- a/src/pages/battle-result.vue +++ b/src/pages/battle-result.vue @@ -39,7 +39,7 @@ onMounted(async () => { ifWin.value = battleInfo.mode === 1 && mine.team === battleInfo.winner; } timer.value = setTimeout(() => { - const lastLvl = uni.getStorageSync("lastest-lvl"); + const lastLvl = uni.getStorageSync("latest-lvl"); if (parseInt(lastLvl) > user.value.lvl) { latestLvl.value = parseInt(lastLvl); } diff --git a/src/pages/battle-room.vue b/src/pages/battle-room.vue index 253abab..e3d8fc6 100644 --- a/src/pages/battle-room.vue +++ b/src/pages/battle-room.vue @@ -80,6 +80,7 @@ watch( ); function recoverData(battleInfo) { + uni.removeStorageSync("last-awake-time"); battleId.value = battleInfo.id; battleType.value = battleInfo.config.mode; step.value = 2; @@ -144,7 +145,8 @@ function recoverData(battleInfo) { }); } } - if (battleInfo.status !== 11) return; + // 这个状态不准 + // if (battleInfo.status !== 11) return; if (battleInfo.firePlayerIndex) { currentShooterId.value = battleInfo.firePlayerIndex; if (redTeam.value[0].id === currentShooterId.value) { @@ -193,10 +195,8 @@ function recoverData(battleInfo) { onLoad(async (options) => { if (options.battleId) { const battleInfo = uni.getStorageSync("current-battle"); - if (battleInfo) { - recoverData(battleInfo); - uni.removeStorageSync("last-awake-time"); - } + if (battleInfo) recoverData(battleInfo); + setTimeout(getCurrentGameAPI, 2000); } if (options.roomNumber) { roomNumber.value = options.roomNumber; @@ -383,6 +383,8 @@ async function onReceiveMessage(messages = []) { } if (msg.constructor === MESSAGETYPES.ShootResult) { if (battleType.value === 1) { + // 会有蓝队射箭时间,红队射箭也有结果返回的情况 + if (currentShooterId.value !== msg.userId) return; const isRed = redTeam.value.find((item) => item.id === msg.userId); if (isRed) scores.value.push(msg.target); else blueScores.value.push(msg.target); @@ -472,9 +474,8 @@ async function onReceiveMessage(messages = []) { } } if (msg.constructor === MESSAGETYPES.BackToGame) { - if (msg.battleInfo && uni.getStorageSync("last-awake-time")) { - recoverData(msg.battleInfo); - } + uni.$emit("update-header-loading", false); + if (msg.battleInfo) recoverData(msg.battleInfo); } } }); @@ -521,14 +522,24 @@ onUnmounted(() => { exitRoomAPI(roomNumber.value); } }); +const refreshTimer = ref(null); onShow(async () => { if (battleId.value) { if (!isEnded.value && (await isGameEnded())) return; - const lastAwakeTime = uni.getStorageSync("last-awake-time"); - if (lastAwakeTime) await getCurrentGameAPI(); + getCurrentGameAPI(); + const refreshData = () => { + const lastAwakeTime = uni.getStorageSync("last-awake-time"); + if (lastAwakeTime) { + getCurrentGameAPI(); + } else { + clearInterval(refreshTimer.value); + } + }; + refreshTimer.value = setInterval(refreshData, 2000); } }); onHide(() => { + if (refreshTimer.value) clearInterval(refreshTimer.value); uni.setStorageSync("last-awake-time", Date.now()); }); @@ -608,7 +619,7 @@ onHide(() => { { @@ -91,10 +92,7 @@ function recoverData(battleInfo) { onLoad(async (options) => { if (options.battleId) { const battleInfo = uni.getStorageSync("current-battle"); - if (battleInfo) { - recoverData(battleInfo); - uni.removeStorageSync("last-awake-time"); - } + if (battleInfo) recoverData(battleInfo); } else { gameType.value = options.gameType; teamSize.value = options.teamSize; @@ -177,9 +175,8 @@ async function onReceiveMessage(messages = []) { } } if (msg.constructor === MESSAGETYPES.BackToGame) { - if (msg.battleInfo && uni.getStorageSync("last-awake-time")) { - recoverData(msg.battleInfo); - } + uni.$emit("update-header-loading", false); + if (msg.battleInfo) recoverData(msg.battleInfo); } }); } @@ -205,14 +202,24 @@ onUnmounted(() => { matchGameAPI(false, gameType.value, teamSize.value); } }); +const refreshTimer = ref(null); onShow(async () => { if (battleId.value) { if (!isEnded.value && (await isGameEnded())) return; - const lastAwakeTime = uni.getStorageSync("last-awake-time"); - if (lastAwakeTime) getCurrentGameAPI(); + getCurrentGameAPI(); + const refreshData = () => { + const lastAwakeTime = uni.getStorageSync("last-awake-time"); + if (lastAwakeTime) { + getCurrentGameAPI(); + } else { + clearInterval(refreshTimer.value); + } + }; + refreshTimer.value = setInterval(refreshData, 2000); } }); onHide(() => { + if (refreshTimer.value) clearInterval(refreshTimer.value); uni.setStorageSync("last-awake-time", Date.now()); }); diff --git a/src/pages/team-match.vue b/src/pages/team-match.vue index 18e88c7..d15fdc9 100644 --- a/src/pages/team-match.vue +++ b/src/pages/team-match.vue @@ -46,6 +46,7 @@ const isFinalShoot = ref(false); const isEnded = ref(false); function recoverData(battleInfo) { + uni.removeStorageSync("last-awake-time"); battleId.value = battleInfo.id; redTeam.value = battleInfo.redTeam; blueTeam.value = battleInfo.blueTeam; @@ -103,7 +104,7 @@ function recoverData(battleInfo) { }); } } - if (battleInfo.status !== 11) return; + // if (battleInfo.status !== 11) return; if (battleInfo.firePlayerIndex) { currentShooterId.value = battleInfo.firePlayerIndex; if (redTeam.value[0].id === currentShooterId.value) { @@ -128,7 +129,7 @@ onLoad(async (options) => { if (options.battleId) { const battleInfo = uni.getStorageSync("current-battle"); if (battleInfo) recoverData(battleInfo); - uni.removeStorageSync("last-awake-time"); + setTimeout(getCurrentGameAPI, 2000); } else { gameType.value = options.gameType; teamSize.value = options.teamSize; @@ -185,6 +186,7 @@ async function onReceiveMessage(messages = []) { } } if (msg.constructor === MESSAGETYPES.ShootResult) { + if (currentShooterId.value !== msg.userId) return; const isRed = redTeam.value.find((item) => item.id === msg.userId); if (isRed) scores.value.push(msg.target); else blueScores.value.push(msg.target); @@ -246,9 +248,8 @@ async function onReceiveMessage(messages = []) { } } if (msg.constructor === MESSAGETYPES.BackToGame) { - if (msg.battleInfo && uni.getStorageSync("last-awake-time")) { - recoverData(msg.battleInfo); - } + uni.$emit("update-header-loading", false); + if (msg.battleInfo) recoverData(msg.battleInfo); } }); } @@ -274,14 +275,24 @@ onUnmounted(() => { matchGameAPI(false, gameType.value, teamSize.value); } }); +const refreshTimer = ref(null); onShow(async () => { if (battleId.value) { if (!isEnded.value && (await isGameEnded())) return; - const lastAwakeTime = uni.getStorageSync("last-awake-time"); - if (lastAwakeTime) await getCurrentGameAPI(); + getCurrentGameAPI(); + const refreshData = () => { + const lastAwakeTime = uni.getStorageSync("last-awake-time"); + if (lastAwakeTime) { + getCurrentGameAPI(); + } else { + clearInterval(refreshTimer.value); + } + }; + refreshTimer.value = setInterval(refreshData, 2000); } }); onHide(() => { + if (refreshTimer.value) clearInterval(refreshTimer.value); uni.setStorageSync("last-awake-time", Date.now()); });