新建项目
This commit is contained in:
116
pages/create/create.js
Normal file
116
pages/create/create.js
Normal file
@@ -0,0 +1,116 @@
|
||||
const service = require("../../services/game-service");
|
||||
const { GAME_MODES, DEFAULT_SETTINGS } = require("../../utils/constants");
|
||||
|
||||
Page({
|
||||
data: {
|
||||
name: "周末藏猫猫",
|
||||
mode: DEFAULT_SETTINGS.mode,
|
||||
modes: Object.values(GAME_MODES),
|
||||
durationOptions: [15, 20, 30, 45, 60],
|
||||
durationIndex: 2,
|
||||
prepareOptions: [1, 3, 5, 8],
|
||||
prepareIndex: 1,
|
||||
maxPlayerOptions: [4, 6, 8, 10, 12, 20],
|
||||
maxPlayerIndex: 2,
|
||||
seekerOptions: [1, 2, 3, 4],
|
||||
seekerIndex: 1,
|
||||
clueOptions: [3, 5, 8, 10],
|
||||
clueIndex: 1,
|
||||
radiusOptions: [200, 300, 500, 800, 1000],
|
||||
radiusIndex: 2,
|
||||
skillsEnabled: true,
|
||||
safetyAccepted: false,
|
||||
submitting: false
|
||||
},
|
||||
|
||||
updateName(event) {
|
||||
this.setData({ name: event.detail.value });
|
||||
},
|
||||
|
||||
chooseMode(event) {
|
||||
this.setData({ mode: event.currentTarget.dataset.mode });
|
||||
},
|
||||
|
||||
onDurationChange(event) {
|
||||
this.setData({ durationIndex: Number(event.detail.value) });
|
||||
},
|
||||
|
||||
onPrepareChange(event) {
|
||||
this.setData({ prepareIndex: Number(event.detail.value) });
|
||||
},
|
||||
|
||||
onMaxPlayerChange(event) {
|
||||
const maxPlayerIndex = Number(event.detail.value);
|
||||
const maxPlayers = this.data.maxPlayerOptions[maxPlayerIndex];
|
||||
let seekerIndex = this.data.seekerIndex;
|
||||
while (
|
||||
seekerIndex > 0 &&
|
||||
this.data.seekerOptions[seekerIndex] >= maxPlayers
|
||||
) {
|
||||
seekerIndex -= 1;
|
||||
}
|
||||
this.setData({ maxPlayerIndex, seekerIndex });
|
||||
},
|
||||
|
||||
onSeekerChange(event) {
|
||||
const seekerIndex = Number(event.detail.value);
|
||||
const seekers = this.data.seekerOptions[seekerIndex];
|
||||
const maxPlayers = this.data.maxPlayerOptions[this.data.maxPlayerIndex];
|
||||
if (seekers >= maxPlayers) {
|
||||
wx.showToast({ title: "寻找者必须少于人数上限", icon: "none" });
|
||||
return;
|
||||
}
|
||||
this.setData({ seekerIndex });
|
||||
},
|
||||
|
||||
onClueChange(event) {
|
||||
this.setData({ clueIndex: Number(event.detail.value) });
|
||||
},
|
||||
|
||||
onRadiusChange(event) {
|
||||
this.setData({ radiusIndex: Number(event.detail.value) });
|
||||
},
|
||||
|
||||
onSkillsChange(event) {
|
||||
this.setData({ skillsEnabled: event.detail.value });
|
||||
},
|
||||
|
||||
onSafetyChange(event) {
|
||||
this.setData({ safetyAccepted: event.detail.value.length > 0 });
|
||||
},
|
||||
|
||||
openRules() {
|
||||
wx.navigateTo({ url: "/pages/rules/rules" });
|
||||
},
|
||||
|
||||
submit() {
|
||||
if (!this.data.name.trim()) {
|
||||
wx.showToast({ title: "请填写房间名称", icon: "none" });
|
||||
return;
|
||||
}
|
||||
if (!this.data.safetyAccepted) {
|
||||
wx.showToast({ title: "请先确认安全规则", icon: "none" });
|
||||
return;
|
||||
}
|
||||
|
||||
this.setData({ submitting: true });
|
||||
const data = this.data;
|
||||
try {
|
||||
const room = service.createRoom({
|
||||
name: data.name.trim(),
|
||||
mode: data.mode,
|
||||
durationMinutes: data.durationOptions[data.durationIndex],
|
||||
prepareMinutes: data.prepareOptions[data.prepareIndex],
|
||||
maxPlayers: data.maxPlayerOptions[data.maxPlayerIndex],
|
||||
seekerCount: data.seekerOptions[data.seekerIndex],
|
||||
clueIntervalMinutes: data.clueOptions[data.clueIndex],
|
||||
radiusMeters: data.radiusOptions[data.radiusIndex],
|
||||
skillsEnabled: data.skillsEnabled
|
||||
});
|
||||
wx.redirectTo({ url: `/pages/lobby/lobby?code=${room.code}` });
|
||||
} catch (error) {
|
||||
this.setData({ submitting: false });
|
||||
wx.showToast({ title: error.message, icon: "none" });
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user