重回比赛逻辑优化

This commit is contained in:
kron
2025-07-18 11:21:19 +08:00
parent db4ec13bac
commit ccfd09bb01
4 changed files with 92 additions and 85 deletions

View File

@@ -39,11 +39,11 @@ const toRankListPage = () => {
watch(
() => [config.value, user.value],
([n_config, n_user]) => {
const rankInfos = n_config.randInfos || [];
if (n_user.id && rankInfos.length) {
rankInfos.some((r, index) => {
if (r.upgrade_scores && r.upgrade_scores > n_user.scores) {
nextLvlPoints.value = r.upgrade_scores;
const list = n_config.levelInfo || [];
if (n_user.id && list.length) {
list.some((r, index) => {
if (r.exp_required && r.exp_required > n_user.lvlPoints) {
nextLvlPoints.value = r.exp_required;
return true;
}
return false;
@@ -75,17 +75,17 @@ watch(
/>
</view>
<view class="user-stats">
<text class="level-tag level-tag-first">{{ user.lvlName }}</text>
<text class="level-tag level-tag-second">L{{ user.lvl }}</text>
<!-- <text class="level-tag level-tag-first">{{ user.lvlName }}</text> -->
<text class="level-tag level-tag-second">LV{{ user.lvl }}</text>
<view class="rank-tag">
<view
class="rank-tag-progress"
:style="{
width: `${(Math.max(user.scores, 0) / nextLvlPoints) * 100}%`,
width: `${(user.lvlPoints / nextLvlPoints) * 100}%`,
}"
/>
<text class="rank-tag-text">
{{ Math.max(user.scores, 0) }}/{{ nextLvlPoints }}
{{ user.lvlPoints }}{{ nextLvlPoints ? `/${nextLvlPoints}` : "" }}
</text>
</view>
</view>
@@ -175,7 +175,7 @@ watch(
}
.level-tag-second {
width: 25px;
width: 60rpx;
background: #09c504;
}
@@ -188,7 +188,7 @@ watch(
.rank-tag {
position: relative;
background-color: #00000038;
width: 100rpx;
width: 150rpx;
overflow: hidden;
}
@@ -233,6 +233,7 @@ watch(
align-items: center;
}
.signin > image {
border-radius: 50%;
width: 40px;
height: 40px;
}

View File

@@ -79,12 +79,15 @@ onLoad(async (options) => {
if (battleInfo) {
battleId.value = battleInfo.id;
battleType.value = battleInfo.config.mode;
start.value = true;
step.value = 3;
step.value = 2;
if (battleInfo.config.mode === 1) {
redTeam.value = battleInfo.redTeam;
blueTeam.value = battleInfo.blueTeam;
currentRound.value = battleInfo.currentRound;
totalRounds.value = battleInfo.maxRound;
if (battleInfo.startTime < 0) return;
start.value = true;
step.value = 3;
battleInfo.roundResults.forEach((round) => {
if (round.blueTotal && round.redTotal) {
if (round.blueTotal === round.redTotal) {
@@ -97,19 +100,16 @@ onLoad(async (options) => {
}
}
});
totalRounds.value = battleInfo.maxRound;
roundResults.value = battleInfo.roundResults;
currentShooterId.value = battleInfo.firePlayerIndex;
setTimeout(() => {
if (battleInfo.roundResults[battleInfo.roundResults.length - 1]) {
scores.value =
battleInfo.roundResults[
battleInfo.roundResults.length - 1
].redArrows;
blueScores.value =
battleInfo.roundResults[
battleInfo.roundResults.length - 1
].blueArrows;
scores.value = battleInfo.roundResults[
battleInfo.roundResults.length - 1
].redArrows.filter((item) => !!item.playerId);
blueScores.value = battleInfo.roundResults[
battleInfo.roundResults.length - 1
].blueArrows.filter((item) => !!item.playerId);
}
}, 300);
if (
@@ -117,10 +117,12 @@ onLoad(async (options) => {
battleInfo.blueTeam[0].shotHistory[battleInfo.currentRound]
) {
roundResults.value.push({
redArrows:
battleInfo.redTeam[0].shotHistory[battleInfo.currentRound],
blueArrows:
battleInfo.blueTeam[0].shotHistory[battleInfo.currentRound],
redArrows: battleInfo.redTeam[0].shotHistory[
battleInfo.currentRound
].filter((item) => !!item.playerId),
blueArrows: battleInfo.blueTeam[0].shotHistory[
battleInfo.currentRound
].filter((item) => !!item.playerId),
});
} else if (battleInfo.currentRound < 5) {
roundResults.value.push({
@@ -146,32 +148,36 @@ onLoad(async (options) => {
}
}
} else if (battleInfo.config.mode === 2) {
tips.value = "请连续射出6支箭";
players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam];
players.value.forEach((p) => {
playersScores.value[p.id] = [];
});
if (battleInfo.startTime < 0) return;
start.value = true;
step.value = 3;
tips.value = "请连续射出6支箭";
players.value.forEach((p) => {
playersScores.value[p.id] = p.arrows;
if (p.id === user.value.id) {
scores.value = p.arrows;
}
});
if (battleInfo.startTime > 0) {
const remain = Date.now() / 1000 - battleInfo.startTime;
if (remain <= 90) {
setTimeout(() => {
uni.$emit("update-ramain", remain);
}, 300);
} else if (remain > 90 && remain <= 110) {
halfTimeTip.value = true;
total.value = 20;
tips.value = "准备下半场";
setTimeout(() => {
uni.$emit("update-ramain", 110 - remain);
}, 300);
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
}
const remain = Date.now() / 1000 - battleInfo.startTime;
if (remain <= 90) {
setTimeout(() => {
uni.$emit("update-ramain", remain);
}, 300);
} else if (remain > 90 && remain <= 110) {
halfTimeTip.value = true;
total.value = 20;
tips.value = "准备下半场";
setTimeout(() => {
uni.$emit("update-ramain", 110 - remain);
}, 300);
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
}
}
}
@@ -328,11 +334,10 @@ async function onReceiveMessage(messages = []) {
scores.value = [];
totalRounds.value = msg.groupUserStatus.config.maxRounds;
step.value = 3;
if (!roundResults.value.length)
roundResults.value.push({
redArrows: [],
blueArrows: [],
});
roundResults.value.push({
redArrows: [],
blueArrows: [],
});
total.value = 15;
}
if (msg.constructor === MESSAGETYPES.MeleeAllReady) {

View File

@@ -57,30 +57,31 @@ onLoad(async (options) => {
console.log("----battleInfo", battleInfo);
if (battleInfo) {
battleId.value = battleInfo.id;
start.value = true;
startCount.value = true;
tips.value = "请连续射出6支箭";
players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam];
players.value.forEach((p) => {
playersScores.value[p.id] = [];
});
if (battleInfo.startTime <= 0) return;
start.value = true;
tips.value = "请连续射出6支箭";
players.value.forEach((p) => {
playersScores.value[p.id] = p.arrows;
if (p.id === user.value.id) {
scores.value = p.arrows;
}
});
if (battleInfo.startTime > 0) {
const remain = Date.now() / 1000 - battleInfo.startTime;
if (remain <= 90) {
setTimeout(() => {
uni.$emit("update-ramain", remain);
}, 300);
} else if (remain > 90 && remain <= 110) {
startCount.value = false;
tips.value = "准备下半场";
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
}
const remain = Date.now() / 1000 - battleInfo.startTime;
if (remain <= 90) {
setTimeout(() => {
uni.$emit("update-ramain", remain);
}, 300);
} else if (remain > 90 && remain <= 110) {
startCount.value = false;
tips.value = "准备下半场";
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
}
}
} else {

View File

@@ -50,9 +50,10 @@ onLoad(async (options) => {
console.log("----battleInfo", battleInfo);
if (battleInfo) {
battleId.value = battleInfo.id;
start.value = true;
redTeam.value = battleInfo.redTeam;
blueTeam.value = battleInfo.blueTeam;
if (battleInfo.startTime < 0) return;
start.value = true;
currentRound.value = battleInfo.currentRound;
battleInfo.roundResults.forEach((round) => {
if (round.blueTotal && round.redTotal) {
@@ -70,14 +71,12 @@ onLoad(async (options) => {
roundResults.value = battleInfo.roundResults;
setTimeout(() => {
if (battleInfo.roundResults[battleInfo.roundResults.length - 1]) {
scores.value =
battleInfo.roundResults[
battleInfo.roundResults.length - 1
].redArrows;
blueScores.value =
battleInfo.roundResults[
battleInfo.roundResults.length - 1
].blueArrows;
scores.value = battleInfo.roundResults[
battleInfo.roundResults.length - 1
].redArrows.filter((item) => !!item.playerId);
blueScores.value = battleInfo.roundResults[
battleInfo.roundResults.length - 1
].blueArrows.filter((item) => !!item.playerId);
}
}, 300);
if (
@@ -85,9 +84,12 @@ onLoad(async (options) => {
battleInfo.blueTeam[0].shotHistory[battleInfo.currentRound]
) {
roundResults.value.push({
redArrows: battleInfo.redTeam[0].shotHistory[battleInfo.currentRound],
blueArrows:
battleInfo.blueTeam[0].shotHistory[battleInfo.currentRound],
redArrows: battleInfo.redTeam[0].shotHistory[
battleInfo.currentRound
].filter((item) => !!item.playerId),
blueArrows: battleInfo.blueTeam[0].shotHistory[
battleInfo.currentRound
].filter((item) => !!item.playerId),
});
} else if (battleInfo.currentRound < 5) {
roundResults.value.push({
@@ -157,12 +159,10 @@ async function onReceiveMessage(messages = []) {
timerSeq.value = 0;
scores.value = [];
totalRounds.value = msg.groupUserStatus.config.maxRounds;
// 返回游戏时候会加上,加了就不用再加了
if (!roundResults.value.length)
roundResults.value.push({
redArrows: [],
blueArrows: [],
});
roundResults.value.push({
redArrows: [],
blueArrows: [],
});
}
if (msg.constructor === MESSAGETYPES.ToSomeoneShoot) {
if (currentShooterId.value !== msg.userId) {