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());
});