diff --git a/src/apis.js b/src/apis.js
index 5ce8a20..d3ae0af 100644
--- a/src/apis.js
+++ b/src/apis.js
@@ -6,7 +6,7 @@ try {
switch (envVersion) {
case "develop": // 开发版
- BASE_URL = "https://apitest.shelingxingqiu.com/api/shoot";
+ BASE_URL = "http://192.168.1.242:8000/api/shoot";
break;
case "trial": // 体验版
BASE_URL = "https://apitest.shelingxingqiu.com/api/shoot";
@@ -444,3 +444,7 @@ export const getPractiseDataAPI = async () => {
export const getBattleDataAPI = async () => {
return request("GET", "/user/fight/statistics");
};
+
+export const chooseTeamAPI = async (number, group) => {
+ return request("POST", "/user/room/group", { number, group });
+};
diff --git a/src/components/CreateRoom.vue b/src/components/CreateRoom.vue
index 96cc25a..ed7f821 100644
--- a/src/components/CreateRoom.vue
+++ b/src/components/CreateRoom.vue
@@ -23,10 +23,11 @@ const createRoom = async () => {
}
if (loading.value === true) return;
loading.value = true;
- const result = await createRoomAPI(
- battleMode.value,
- battleMode.value === 1 ? 2 : 10
- );
+ let size = 2;
+ if (battleMode.value === 2) size = 10;
+ if (battleMode.value === 3) size = 4;
+ if (battleMode.value === 4) size = 6;
+ const result = await createRoomAPI(battleMode.value === 2 ? 2 : 1, size);
if (result.number) roomNumber.value = result.number;
step.value = 2;
loading.value = false;
diff --git a/src/components/ShootProgress2.vue b/src/components/ShootProgress2.vue
index e118202..205689c 100644
--- a/src/components/ShootProgress2.vue
+++ b/src/components/ShootProgress2.vue
@@ -17,7 +17,7 @@ const props = defineProps({
});
const barColor = ref("linear-gradient( 180deg, #FFA0A0 0%, #FF6060 100%)");
-const remain = ref(10);
+const remain = ref(15);
const timer = ref(null);
watch(
diff --git a/src/components/TeamAvatars.vue b/src/components/TeamAvatars.vue
index ffd7edd..66fb7c5 100644
--- a/src/components/TeamAvatars.vue
+++ b/src/components/TeamAvatars.vue
@@ -9,17 +9,24 @@ const props = defineProps({
type: Array,
default: () => [],
},
+ currentShooterId: {
+ type: Number,
+ default: "",
+ },
youTurn: {
type: Boolean,
default: false,
},
});
const players = ref(props.team);
+const youTurn = ref(false);
watch(
- () => props.youTurn,
+ () => props.currentShooterId,
(newVal) => {
- players.value = props.team;
- }
+ const exit = props.team.some((p) => p.id === newVal);
+ youTurn.value = !!exit;
+ },
+ { immediate: true }
);
diff --git a/src/constants.js b/src/constants.js
index 23705de..fd10836 100644
--- a/src/constants.js
+++ b/src/constants.js
@@ -22,6 +22,7 @@ export const MESSAGETYPES = {
PaySuccess: 3793388244,
RankUpdate: 1121669910,
LvlUpdate: 3958625354,
+ TeamUpdate: 4168086616,
};
export const topThreeColors = ["#FFD947", "#D2D2D2", "#FFA515"];
diff --git a/src/pages/battle-room.vue b/src/pages/battle-room.vue
index 8bc65c3..1e27832 100644
--- a/src/pages/battle-room.vue
+++ b/src/pages/battle-room.vue
@@ -7,7 +7,13 @@ import Guide from "@/components/Guide.vue";
import SButton from "@/components/SButton.vue";
import SModal from "@/components/SModal.vue";
import Avatar from "@/components/Avatar.vue";
-import { getRoomAPI, destroyRoomAPI, exitRoomAPI, startRoomAPI } from "@/apis";
+import {
+ getRoomAPI,
+ destroyRoomAPI,
+ exitRoomAPI,
+ startRoomAPI,
+ chooseTeamAPI,
+} from "@/apis";
import { MESSAGETYPES } from "@/constants";
import useStore from "@/store";
import { storeToRefs } from "pinia";
@@ -17,12 +23,9 @@ const room = ref({});
const roomNumber = ref("");
const owner = ref({});
const opponent = ref({});
-const players = ref([
- { name: "player1", team: 1 },
- { name: "player2", team: 0 },
- { name: "player3", team: 2 },
- { name: "player4", team: 1 },
-]);
+const players = ref([]);
+const blueTeam = ref([]);
+const redTeam = ref([]);
const showModal = ref(false);
const battleType = ref(0);
@@ -44,7 +47,7 @@ async function refreshRoomData() {
}
return false;
});
- if (result.battleType === 1) {
+ if (result.battleType === 1 && result.count === 1) {
if (user.value.id !== owner.value.id) {
opponent.value = {
id: user.value.id,
@@ -77,6 +80,9 @@ async function refreshRoomData() {
result.members.forEach((m, index) => {
if (ownerIndex !== index) players.value.push(m.userInfo);
});
+ } else {
+ players.value = new Array(result.count).fill({});
+ refreshMembers(result.members);
}
}
@@ -84,6 +90,23 @@ const startGame = async () => {
const result = await startRoomAPI(room.value.number);
};
+const refreshMembers = (members) => {
+ blueTeam.value = [];
+ redTeam.value = [];
+ members.forEach((m, index) => {
+ players.value[index] = { ...m.userInfo, groupType: m.groupType };
+ if (m.groupType === 1) {
+ blueTeam.value.push({ ...m.userInfo, groupType: 1 });
+ } else if (m.groupType === 0) {
+ redTeam.value.push({ ...m.userInfo, groupType: 0 });
+ }
+ });
+ for (let i = 0; i < room.value.count / 2; i++) {
+ if (!blueTeam.value[i]) blueTeam.value[i] = {};
+ if (!redTeam.value[i]) redTeam.value[i] = {};
+ }
+};
+
async function onReceiveMessage(messages = []) {
messages.forEach((msg) => {
if (msg.roomNumber === roomNumber.value) {
@@ -134,6 +157,14 @@ async function onReceiveMessage(messages = []) {
if (battleType.value === 2) {
players.value = players.value.filter((p) => p.id !== msg.userId);
}
+ if (msg.room && msg.room.members) {
+ refreshMembers(msg.room.members);
+ }
+ }
+ if (msg.constructor === MESSAGETYPES.TeamUpdate) {
+ if (msg.room && msg.room.members) {
+ refreshMembers(msg.room.members);
+ }
}
if (msg.constructor === MESSAGETYPES.RoomDestroy) {
uni.showToast({
@@ -169,6 +200,17 @@ async function onReceiveMessage(messages = []) {
});
}
+const chooseTeam = async (team) => {
+ if (team !== 2) {
+ const notInTeam = room.value.members.some(
+ (m) => m.userInfo.id === user.value.id && m.groupType === 2
+ );
+ if (!notInTeam) return;
+ }
+ const result = await chooseTeamAPI(roomNumber.value, team);
+ refreshMembers(result.members);
+};
+
const destroyRoom = async () => {
if (roomNumber.value) await destroyRoomAPI(roomNumber.value);
};
@@ -237,7 +279,7 @@ onHide(() => {});
复制房间号
-
+
{});
:total="room.count || 10"
:players="players"
/>
-
-
-
-
-
-
- 创建者
+
+
+
+
+
+
+
+ 创建者
+
-
-
-
-
-
- 23232323232
-
+
+
+
+
+ {{ item.name || "我要加入" }}
+
+
+
+
+
+
+
+
+ {{ item.name || "我要加入" }}
+
+
-
-
-
- 22222
-
-
-
-
+
进入对战 {});
:onClick="startGame"
>进入大乱斗
+ 开启对局
等待房主开启对战
创建者点击下一步,所有人即可进入游戏。
@@ -559,6 +631,7 @@ onHide(() => {});
.choose-side-right-item > text {
margin: 10px;
max-width: 100px;
+ font-size: 14px;
}
.choose-side-left-item > button:first-child,
.choose-side-right-item > button:last-child {
diff --git a/src/pages/team-battle.vue b/src/pages/team-battle.vue
index 60f88a2..b6d7bbe 100644
--- a/src/pages/team-battle.vue
+++ b/src/pages/team-battle.vue
@@ -315,14 +315,9 @@ onHide(() => {
:team="blueTeam"
:isRed="false"
:currentShooterId="currentShooterId"
- :youTurn="true"
/>
-
+