Commit d0a0a652 authored by Chunchi Che's avatar Chunchi Che

增加优雅退出机制

parent addbb292
neos-protobuf @ 702feb50
Subproject commit a02a8caa38767bb06e1a9d5be97773af5a0fc4b2 Subproject commit 702feb507a3e5cd31fdc8ee7d9e4b80e68f89923
...@@ -978,7 +978,7 @@ export namespace ygopro { ...@@ -978,7 +978,7 @@ export namespace ygopro {
} }
} }
export class YgoStocMsg extends pb_1.Message { export class YgoStocMsg extends pb_1.Message {
#one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]; #one_of_decls: number[][] = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]];
constructor(data?: any[] | ({} & (({ constructor(data?: any[] | ({} & (({
stoc_join_game?: StocJoinGame; stoc_join_game?: StocJoinGame;
stoc_chat?: never; stoc_chat?: never;
...@@ -996,6 +996,7 @@ export namespace ygopro { ...@@ -996,6 +996,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: StocChat; stoc_chat?: StocChat;
...@@ -1013,6 +1014,7 @@ export namespace ygopro { ...@@ -1013,6 +1014,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1030,6 +1032,7 @@ export namespace ygopro { ...@@ -1030,6 +1032,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1047,6 +1050,7 @@ export namespace ygopro { ...@@ -1047,6 +1050,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1064,6 +1068,7 @@ export namespace ygopro { ...@@ -1064,6 +1068,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1081,6 +1086,7 @@ export namespace ygopro { ...@@ -1081,6 +1086,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1098,6 +1104,7 @@ export namespace ygopro { ...@@ -1098,6 +1104,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1115,6 +1122,7 @@ export namespace ygopro { ...@@ -1115,6 +1122,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1132,6 +1140,7 @@ export namespace ygopro { ...@@ -1132,6 +1140,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1149,6 +1158,7 @@ export namespace ygopro { ...@@ -1149,6 +1158,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1166,6 +1176,7 @@ export namespace ygopro { ...@@ -1166,6 +1176,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1183,6 +1194,7 @@ export namespace ygopro { ...@@ -1183,6 +1194,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1200,6 +1212,7 @@ export namespace ygopro { ...@@ -1200,6 +1212,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1217,6 +1230,7 @@ export namespace ygopro { ...@@ -1217,6 +1230,7 @@ export namespace ygopro {
stoc_error_msg?: StocErrorMsg; stoc_error_msg?: StocErrorMsg;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1234,6 +1248,7 @@ export namespace ygopro { ...@@ -1234,6 +1248,7 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: StocChangeSide; stoc_change_side?: StocChangeSide;
stoc_waiting_side?: never; stoc_waiting_side?: never;
stoc_duel_end?: never;
} | { } | {
stoc_join_game?: never; stoc_join_game?: never;
stoc_chat?: never; stoc_chat?: never;
...@@ -1251,6 +1266,25 @@ export namespace ygopro { ...@@ -1251,6 +1266,25 @@ export namespace ygopro {
stoc_error_msg?: never; stoc_error_msg?: never;
stoc_change_side?: never; stoc_change_side?: never;
stoc_waiting_side?: StocWaitingSide; stoc_waiting_side?: StocWaitingSide;
stoc_duel_end?: never;
} | {
stoc_join_game?: never;
stoc_chat?: never;
stoc_hs_player_enter?: never;
stoc_type_change?: never;
stoc_hs_player_change?: never;
stoc_hs_watch_change?: never;
stoc_select_hand?: never;
stoc_hand_result?: never;
stoc_select_tp?: never;
stoc_deck_count?: never;
stoc_duel_start?: never;
stoc_game_msg?: never;
stoc_time_limit?: never;
stoc_error_msg?: never;
stoc_change_side?: never;
stoc_waiting_side?: never;
stoc_duel_end?: StocDuelEnd;
})))) { })))) {
super(); super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls); pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
...@@ -1303,6 +1337,9 @@ export namespace ygopro { ...@@ -1303,6 +1337,9 @@ export namespace ygopro {
if ("stoc_waiting_side" in data && data.stoc_waiting_side != undefined) { if ("stoc_waiting_side" in data && data.stoc_waiting_side != undefined) {
this.stoc_waiting_side = data.stoc_waiting_side; this.stoc_waiting_side = data.stoc_waiting_side;
} }
if ("stoc_duel_end" in data && data.stoc_duel_end != undefined) {
this.stoc_duel_end = data.stoc_duel_end;
}
} }
} }
get stoc_join_game() { get stoc_join_game() {
...@@ -1449,9 +1486,18 @@ export namespace ygopro { ...@@ -1449,9 +1486,18 @@ export namespace ygopro {
get has_stoc_waiting_side() { get has_stoc_waiting_side() {
return pb_1.Message.getField(this, 16) != null; return pb_1.Message.getField(this, 16) != null;
} }
get stoc_duel_end() {
return pb_1.Message.getWrapperField(this, StocDuelEnd, 17) as StocDuelEnd;
}
set stoc_duel_end(value: StocDuelEnd) {
pb_1.Message.setOneofWrapperField(this, 17, this.#one_of_decls[0], value);
}
get has_stoc_duel_end() {
return pb_1.Message.getField(this, 17) != null;
}
get msg() { get msg() {
const cases: { const cases: {
[index: number]: "none" | "stoc_join_game" | "stoc_chat" | "stoc_hs_player_enter" | "stoc_type_change" | "stoc_hs_player_change" | "stoc_hs_watch_change" | "stoc_select_hand" | "stoc_hand_result" | "stoc_select_tp" | "stoc_deck_count" | "stoc_duel_start" | "stoc_game_msg" | "stoc_time_limit" | "stoc_error_msg" | "stoc_change_side" | "stoc_waiting_side"; [index: number]: "none" | "stoc_join_game" | "stoc_chat" | "stoc_hs_player_enter" | "stoc_type_change" | "stoc_hs_player_change" | "stoc_hs_watch_change" | "stoc_select_hand" | "stoc_hand_result" | "stoc_select_tp" | "stoc_deck_count" | "stoc_duel_start" | "stoc_game_msg" | "stoc_time_limit" | "stoc_error_msg" | "stoc_change_side" | "stoc_waiting_side" | "stoc_duel_end";
} = { } = {
0: "none", 0: "none",
1: "stoc_join_game", 1: "stoc_join_game",
...@@ -1469,9 +1515,10 @@ export namespace ygopro { ...@@ -1469,9 +1515,10 @@ export namespace ygopro {
13: "stoc_time_limit", 13: "stoc_time_limit",
14: "stoc_error_msg", 14: "stoc_error_msg",
15: "stoc_change_side", 15: "stoc_change_side",
16: "stoc_waiting_side" 16: "stoc_waiting_side",
17: "stoc_duel_end"
}; };
return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])]; return cases[pb_1.Message.computeOneofCase(this, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])];
} }
static fromObject(data: { static fromObject(data: {
stoc_join_game?: ReturnType<typeof StocJoinGame.prototype.toObject>; stoc_join_game?: ReturnType<typeof StocJoinGame.prototype.toObject>;
...@@ -1490,6 +1537,7 @@ export namespace ygopro { ...@@ -1490,6 +1537,7 @@ export namespace ygopro {
stoc_error_msg?: ReturnType<typeof StocErrorMsg.prototype.toObject>; stoc_error_msg?: ReturnType<typeof StocErrorMsg.prototype.toObject>;
stoc_change_side?: ReturnType<typeof StocChangeSide.prototype.toObject>; stoc_change_side?: ReturnType<typeof StocChangeSide.prototype.toObject>;
stoc_waiting_side?: ReturnType<typeof StocWaitingSide.prototype.toObject>; stoc_waiting_side?: ReturnType<typeof StocWaitingSide.prototype.toObject>;
stoc_duel_end?: ReturnType<typeof StocDuelEnd.prototype.toObject>;
}): YgoStocMsg { }): YgoStocMsg {
const message = new YgoStocMsg({}); const message = new YgoStocMsg({});
if (data.stoc_join_game != null) { if (data.stoc_join_game != null) {
...@@ -1540,6 +1588,9 @@ export namespace ygopro { ...@@ -1540,6 +1588,9 @@ export namespace ygopro {
if (data.stoc_waiting_side != null) { if (data.stoc_waiting_side != null) {
message.stoc_waiting_side = StocWaitingSide.fromObject(data.stoc_waiting_side); message.stoc_waiting_side = StocWaitingSide.fromObject(data.stoc_waiting_side);
} }
if (data.stoc_duel_end != null) {
message.stoc_duel_end = StocDuelEnd.fromObject(data.stoc_duel_end);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -1560,6 +1611,7 @@ export namespace ygopro { ...@@ -1560,6 +1611,7 @@ export namespace ygopro {
stoc_error_msg?: ReturnType<typeof StocErrorMsg.prototype.toObject>; stoc_error_msg?: ReturnType<typeof StocErrorMsg.prototype.toObject>;
stoc_change_side?: ReturnType<typeof StocChangeSide.prototype.toObject>; stoc_change_side?: ReturnType<typeof StocChangeSide.prototype.toObject>;
stoc_waiting_side?: ReturnType<typeof StocWaitingSide.prototype.toObject>; stoc_waiting_side?: ReturnType<typeof StocWaitingSide.prototype.toObject>;
stoc_duel_end?: ReturnType<typeof StocDuelEnd.prototype.toObject>;
} = {}; } = {};
if (this.stoc_join_game != null) { if (this.stoc_join_game != null) {
data.stoc_join_game = this.stoc_join_game.toObject(); data.stoc_join_game = this.stoc_join_game.toObject();
...@@ -1609,6 +1661,9 @@ export namespace ygopro { ...@@ -1609,6 +1661,9 @@ export namespace ygopro {
if (this.stoc_waiting_side != null) { if (this.stoc_waiting_side != null) {
data.stoc_waiting_side = this.stoc_waiting_side.toObject(); data.stoc_waiting_side = this.stoc_waiting_side.toObject();
} }
if (this.stoc_duel_end != null) {
data.stoc_duel_end = this.stoc_duel_end.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -1647,6 +1702,8 @@ export namespace ygopro { ...@@ -1647,6 +1702,8 @@ export namespace ygopro {
writer.writeMessage(15, this.stoc_change_side, () => this.stoc_change_side.serialize(writer)); writer.writeMessage(15, this.stoc_change_side, () => this.stoc_change_side.serialize(writer));
if (this.has_stoc_waiting_side) if (this.has_stoc_waiting_side)
writer.writeMessage(16, this.stoc_waiting_side, () => this.stoc_waiting_side.serialize(writer)); writer.writeMessage(16, this.stoc_waiting_side, () => this.stoc_waiting_side.serialize(writer));
if (this.has_stoc_duel_end)
writer.writeMessage(17, this.stoc_duel_end, () => this.stoc_duel_end.serialize(writer));
if (!w) if (!w)
return writer.getResultBuffer(); return writer.getResultBuffer();
} }
...@@ -1704,6 +1761,9 @@ export namespace ygopro { ...@@ -1704,6 +1761,9 @@ export namespace ygopro {
case 16: case 16:
reader.readMessage(message.stoc_waiting_side, () => message.stoc_waiting_side = StocWaitingSide.deserialize(reader)); reader.readMessage(message.stoc_waiting_side, () => message.stoc_waiting_side = StocWaitingSide.deserialize(reader));
break; break;
case 17:
reader.readMessage(message.stoc_duel_end, () => message.stoc_duel_end = StocDuelEnd.deserialize(reader));
break;
default: reader.skipField(); default: reader.skipField();
} }
} }
...@@ -4953,6 +5013,46 @@ export namespace ygopro { ...@@ -4953,6 +5013,46 @@ export namespace ygopro {
return StocDuelStart.deserialize(bytes); return StocDuelStart.deserialize(bytes);
} }
} }
export class StocDuelEnd extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(data?: any[] | {}) {
super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
if (!Array.isArray(data) && typeof data == "object") { }
}
static fromObject(data: {}): StocDuelEnd {
const message = new StocDuelEnd({});
return message;
}
toObject() {
const data: {} = {};
return data;
}
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
const writer = w || new pb_1.BinaryWriter();
if (!w)
return writer.getResultBuffer();
}
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StocDuelEnd {
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new StocDuelEnd();
while (reader.nextField()) {
if (reader.isEndGroup())
break;
switch (reader.getFieldNumber()) {
default: reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): StocDuelEnd {
return StocDuelEnd.deserialize(bytes);
}
}
export class StocTimeLimit extends pb_1.Message { export class StocTimeLimit extends pb_1.Message {
#one_of_decls: number[][] = []; #one_of_decls: number[][] = [];
constructor(data?: any[] | { constructor(data?: any[] | {
......
...@@ -4,6 +4,7 @@ import { ...@@ -4,6 +4,7 @@ import {
STOC_CHANGE_SIDE, STOC_CHANGE_SIDE,
STOC_CHAT, STOC_CHAT,
STOC_DECK_COUNT, STOC_DECK_COUNT,
STOC_DUEL_END,
STOC_DUEL_START, STOC_DUEL_START,
STOC_ERROR_MSG, STOC_ERROR_MSG,
STOC_GAME_MSG, STOC_GAME_MSG,
...@@ -21,6 +22,7 @@ import { ...@@ -21,6 +22,7 @@ import {
import StocChangeSide from "./stoc/stocChangeSide"; import StocChangeSide from "./stoc/stocChangeSide";
import StocChat from "./stoc/stocChat"; import StocChat from "./stoc/stocChat";
import StocDeckCount from "./stoc/stocDeckCount"; import StocDeckCount from "./stoc/stocDeckCount";
import StocDuelEnd from "./stoc/stocDuelEnd";
import StocDuelStart from "./stoc/stocDuelStart"; import StocDuelStart from "./stoc/stocDuelStart";
import StocErrorMsg from "./stoc/stocErrorMsg"; import StocErrorMsg from "./stoc/stocErrorMsg";
import StocGameMsg from "./stoc/stocGameMsg/mod"; import StocGameMsg from "./stoc/stocGameMsg/mod";
...@@ -89,6 +91,10 @@ export function adaptStoc(packet: YgoProPacket): ygopro.YgoStocMsg { ...@@ -89,6 +91,10 @@ export function adaptStoc(packet: YgoProPacket): ygopro.YgoStocMsg {
pb = new StocDuelStart(packet).upcast(); pb = new StocDuelStart(packet).upcast();
break; break;
} }
case STOC_DUEL_END: {
pb = new StocDuelEnd(packet).upcast();
break;
}
case STOC_GAME_MSG: { case STOC_GAME_MSG: {
pb = new StocGameMsg(packet).upcast(); pb = new StocGameMsg(packet).upcast();
break; break;
......
...@@ -28,6 +28,7 @@ export const STOC_SELECT_TP = 4; ...@@ -28,6 +28,7 @@ export const STOC_SELECT_TP = 4;
export const STOC_HAND_RESULT = 5; export const STOC_HAND_RESULT = 5;
export const STOC_DECK_COUNT = 9; export const STOC_DECK_COUNT = 9;
export const STOC_DUEL_START = 21; export const STOC_DUEL_START = 21;
export const STOC_DUEL_END = 22;
export const STOC_GAME_MSG = 1; export const STOC_GAME_MSG = 1;
export const STOC_TIME_LIMIT = 24; export const STOC_TIME_LIMIT = 24;
export const STOC_ERROR_MSG = 2; export const STOC_ERROR_MSG = 2;
......
import { ygopro } from "../../idl/ocgcore";
import { StocAdapter, YgoProPacket } from "../packet";
/*
* STOC DuelEnd
*
* @usage - 通知客户端决斗结束
* */
export default class DuelEnd implements StocAdapter {
packet: YgoProPacket;
constructor(packet: YgoProPacket) {
this.packet = packet;
}
upcast(): ygopro.YgoStocMsg {
return new ygopro.YgoStocMsg({
stoc_duel_end: new ygopro.StocDuelEnd({}),
});
}
}
...@@ -12,6 +12,7 @@ import handleDeckCount from "./mora/deckCount"; ...@@ -12,6 +12,7 @@ import handleDeckCount from "./mora/deckCount";
import handleSelectHand from "./mora/selectHand"; import handleSelectHand from "./mora/selectHand";
import handleSelectTp from "./mora/selectTp"; import handleSelectTp from "./mora/selectTp";
import handleChat from "./room/chat"; import handleChat from "./room/chat";
import handleDuelEnd from "./room/duelEnd";
import handleDuelStart from "./room/duelStart"; import handleDuelStart from "./room/duelStart";
import handleErrorMsg from "./room/errorMsg"; import handleErrorMsg from "./room/errorMsg";
import handleHandResult from "./room/handResult"; import handleHandResult from "./room/handResult";
...@@ -85,6 +86,10 @@ async function _handle(e: MessageEvent) { ...@@ -85,6 +86,10 @@ async function _handle(e: MessageEvent) {
handleDuelStart(pb); handleDuelStart(pb);
break; break;
} }
case "stoc_duel_end": {
handleDuelEnd(pb);
break;
}
case "stoc_game_msg": { case "stoc_game_msg": {
await handleGameMsg(pb); await handleGameMsg(pb);
......
import { ygopro } from "@/api";
import { matStore } from "@/stores";
export default function handleDuelEnd(_pb: ygopro.YgoStocMsg) {
matStore.duelEnd = true;
}
...@@ -85,6 +85,7 @@ const initialState: Omit<MatState, "reset"> = { ...@@ -85,6 +85,7 @@ const initialState: Omit<MatState, "reset"> = {
}, },
tossResult: undefined, tossResult: undefined,
chainSetting: ChainSetting.CHAIN_SMART, chainSetting: ChainSetting.CHAIN_SMART,
duelEnd: false,
// methods // methods
isMe, isMe,
}; };
...@@ -102,6 +103,7 @@ class MatStore implements MatState, NeosStore { ...@@ -102,6 +103,7 @@ class MatStore implements MatState, NeosStore {
unimplemented = initialState.unimplemented; unimplemented = initialState.unimplemented;
handResults = initialState.handResults; handResults = initialState.handResults;
tossResult = initialState.tossResult; tossResult = initialState.tossResult;
duelEnd = initialState.duelEnd;
// methods // methods
isMe = initialState.isMe; isMe = initialState.isMe;
reset(): void { reset(): void {
...@@ -123,6 +125,7 @@ class MatStore implements MatState, NeosStore { ...@@ -123,6 +125,7 @@ class MatStore implements MatState, NeosStore {
this.unimplemented = 0; this.unimplemented = 0;
this.handResults.me = 0; this.handResults.me = 0;
this.handResults.op = 0; this.handResults.op = 0;
this.duelEnd = false;
} }
} }
......
...@@ -40,6 +40,8 @@ export interface MatState { ...@@ -40,6 +40,8 @@ export interface MatState {
set: (controller: number, result: HandResult) => void; set: (controller: number, result: HandResult) => void;
}; // 猜拳结果 }; // 猜拳结果
duelEnd: boolean; // 决斗是否结束,包括单局模式和匹配模式
/** 根据自己的先后手判断是否是自己 */ /** 根据自己的先后手判断是否是自己 */
isMe: (player: number) => boolean; isMe: (player: number) => boolean;
} }
......
...@@ -2,7 +2,7 @@ import React, { useEffect } from "react"; ...@@ -2,7 +2,7 @@ import React, { useEffect } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { useSnapshot } from "valtio"; import { useSnapshot } from "valtio";
import { SideStage, sideStore } from "@/stores"; import { matStore, SideStage, sideStore } from "@/stores";
import { import {
Alert, Alert,
...@@ -22,6 +22,7 @@ import { LifeBar, Mat, Menu, Underlying } from "./PlayMat"; ...@@ -22,6 +22,7 @@ import { LifeBar, Mat, Menu, Underlying } from "./PlayMat";
export const Component: React.FC = () => { export const Component: React.FC = () => {
const { stage } = useSnapshot(sideStore); const { stage } = useSnapshot(sideStore);
const { duelEnd } = useSnapshot(matStore);
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
...@@ -31,6 +32,13 @@ export const Component: React.FC = () => { ...@@ -31,6 +32,13 @@ export const Component: React.FC = () => {
} }
}, [stage]); }, [stage]);
useEffect(() => {
if (duelEnd) {
// 决斗结束,返回匹配页
navigate("/match");
}
}, [duelEnd]);
return ( return (
<> <>
<Underlying /> <Underlying />
......
...@@ -27,7 +27,6 @@ export const EndModal: React.FC = () => { ...@@ -27,7 +27,6 @@ export const EndModal: React.FC = () => {
const onReturn = () => { const onReturn = () => {
resetDuel(); resetDuel();
rs(); rs();
// TODO: 这里暂时不自动跳转,决斗结束后让玩家自己手动选择回到主页
}; };
return ( return (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment