Commit e8698018 authored by chechunchi's avatar chechunchi

Revert "refactor: merge playStore to matStore"

This reverts commit 91b5fbdc.
parent 8d1d656b
Pipeline #22167 passed with stages
in 16 minutes and 25 seconds
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { matStore } from "@/stores"; import { playerStore } from "@/stores";
// FIXME: player0 不一定是当前玩家 // FIXME: player0 不一定是当前玩家
export default function handleDeckCount(pb: ygopro.YgoStocMsg) { export default function handleDeckCount(pb: ygopro.YgoStocMsg) {
const deckCount = pb.stoc_deck_count; const deckCount = pb.stoc_deck_count;
matStore.player[0].deckInfo = { playerStore.player0.deckInfo = {
mainCnt: deckCount.meMain, mainCnt: deckCount.meMain,
extraCnt: deckCount.meExtra, extraCnt: deckCount.meExtra,
sideCnt: deckCount.meSide, sideCnt: deckCount.meSide,
}; };
matStore.player[1].deckInfo = { playerStore.player1.deckInfo = {
mainCnt: deckCount.opMain, mainCnt: deckCount.opMain,
extraCnt: deckCount.opExtra, extraCnt: deckCount.opExtra,
sideCnt: deckCount.opSide, sideCnt: deckCount.opSide,
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { matStore } from "@/stores"; import { playerStore } from "@/stores";
const READY_STATE = "ready"; const READY_STATE = "ready";
const NO_READY_STATE = "not ready"; const NO_READY_STATE = "not ready";
...@@ -29,22 +29,24 @@ export default function handleHsPlayerChange(pb: ygopro.YgoStocMsg) { ...@@ -29,22 +29,24 @@ export default function handleHsPlayerChange(pb: ygopro.YgoStocMsg) {
break; break;
} }
case ygopro.StocHsPlayerChange.State.READY: { case ygopro.StocHsPlayerChange.State.READY: {
matStore.player[change.pos === 0 ? 0 : 1].state = READY_STATE; playerStore[change.pos == 0 ? "player0" : "player1"].state =
READY_STATE;
break; break;
} }
case ygopro.StocHsPlayerChange.State.NO_READY: { case ygopro.StocHsPlayerChange.State.NO_READY: {
matStore.player[change.pos === 0 ? 0 : 1].state = NO_READY_STATE; playerStore[change.pos == 0 ? "player0" : "player1"].state =
NO_READY_STATE;
break; break;
} }
case ygopro.StocHsPlayerChange.State.LEAVE: { case ygopro.StocHsPlayerChange.State.LEAVE: {
matStore.player[change.pos === 0 ? 0 : 1] = {}; playerStore[change.pos == 0 ? "player0" : "player1"] = {};
break; break;
} }
case ygopro.StocHsPlayerChange.State.TO_OBSERVER: { case ygopro.StocHsPlayerChange.State.TO_OBSERVER: {
matStore.player[change.pos === 0 ? 0 : 1] = {}; // todo: 有没有必要? playerStore[change.pos == 0 ? "player0" : "player1"] = {}; // todo: 有没有必要?
matStore.observerCount += 1; playerStore.observerCount += 1;
break; break;
} }
default: { default: {
......
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { matStore } from "@/stores"; import { playerStore } from "@/stores";
export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) { export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) {
const name = pb.stoc_hs_player_enter.name; const name = pb.stoc_hs_player_enter.name;
...@@ -8,6 +8,6 @@ export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) { ...@@ -8,6 +8,6 @@ export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) {
if (pos > 1) { if (pos > 1) {
console.log("Currently only supported 2v2 mode."); console.log("Currently only supported 2v2 mode.");
} else { } else {
matStore.player[pos === 0 ? 0 : 1].name = name; playerStore[pos == 0 ? "player0" : "player1"].name = name;
} }
} }
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { matStore } from "@/stores"; import { playerStore } from "@/stores";
export default function handleHsWatchChange(pb: ygopro.YgoStocMsg) { export default function handleHsWatchChange(pb: ygopro.YgoStocMsg) {
const count = pb.stoc_hs_watch_change.count; const count = pb.stoc_hs_watch_change.count;
matStore.observerCount = count; playerStore.observerCount = count;
} }
import { ygopro } from "@/api"; import { ygopro } from "@/api";
import { matStore } from "@/stores"; import { playerStore } from "@/stores";
const NO_READY_STATE = "not ready"; const NO_READY_STATE = "not ready";
...@@ -7,21 +7,21 @@ export default function handleTypeChange(pb: ygopro.YgoStocMsg) { ...@@ -7,21 +7,21 @@ export default function handleTypeChange(pb: ygopro.YgoStocMsg) {
const selfType = pb.stoc_type_change.self_type; const selfType = pb.stoc_type_change.self_type;
const assertHost = pb.stoc_type_change.is_host; const assertHost = pb.stoc_type_change.is_host;
matStore.isHost = assertHost; playerStore.isHost = assertHost;
matStore.selfType = selfType; playerStore.selfType = selfType;
if (assertHost) { if (assertHost) {
switch (selfType) { switch (selfType) {
case ygopro.StocTypeChange.SelfType.PLAYER1: { case ygopro.StocTypeChange.SelfType.PLAYER1: {
matStore.player[0].isHost = true; playerStore.player0.isHost = true;
matStore.player[1].isHost = false; playerStore.player1.isHost = false;
matStore.player[0].state = NO_READY_STATE; playerStore.player0.state = NO_READY_STATE;
break; break;
} }
case ygopro.StocTypeChange.SelfType.PLAYER2: { case ygopro.StocTypeChange.SelfType.PLAYER2: {
matStore.player[0].isHost = false; playerStore.player0.isHost = false;
matStore.player[1].isHost = true; playerStore.player1.isHost = true;
matStore.player[1].state = NO_READY_STATE; playerStore.player1.state = NO_READY_STATE;
break; break;
} }
default: { default: {
......
...@@ -6,6 +6,7 @@ export * from "./messageStore"; ...@@ -6,6 +6,7 @@ export * from "./messageStore";
export * from "./methods"; export * from "./methods";
export * from "./moraStore"; export * from "./moraStore";
export * from "./placeStore"; export * from "./placeStore";
export * from "./playerStore";
import { proxy } from "valtio"; import { proxy } from "valtio";
import { devtools } from "valtio/utils"; import { devtools } from "valtio/utils";
...@@ -17,8 +18,10 @@ import { matStore } from "./matStore"; ...@@ -17,8 +18,10 @@ import { matStore } from "./matStore";
import { messageStore } from "./messageStore"; import { messageStore } from "./messageStore";
import { moraStore } from "./moraStore"; import { moraStore } from "./moraStore";
import { placeStore } from "./placeStore"; import { placeStore } from "./placeStore";
import { playerStore } from "./playerStore";
export const store = proxy({ export const store = proxy({
playerStore,
chatStore, chatStore,
joinStore, joinStore,
moraStore, moraStore,
......
...@@ -5,8 +5,6 @@ import { ygopro } from "@/api"; ...@@ -5,8 +5,6 @@ import { ygopro } from "@/api";
import type { InitInfo, MatState } from "./types"; import type { InitInfo, MatState } from "./types";
import SelfType = ygopro.StocTypeChange.SelfType;
/** /**
* 根据controller判断是自己还是对方。 * 根据controller判断是自己还是对方。
* 这个无需export,尽量逻辑收拢在store内部。 * 这个无需export,尽量逻辑收拢在store内部。
...@@ -16,6 +14,7 @@ const getWhom = (controller: number): "me" | "op" => ...@@ -16,6 +14,7 @@ const getWhom = (controller: number): "me" | "op" =>
/** /**
* 根据自己的先后手判断是否是自己 * 根据自己的先后手判断是否是自己
* 原本名字叫judgeSelf
*/ */
export const isMe = (controller: number): boolean => { export const isMe = (controller: number): boolean => {
switch (matStore.selfType) { switch (matStore.selfType) {
...@@ -84,23 +83,6 @@ export const matStore: MatState = proxy<MatState>({ ...@@ -84,23 +83,6 @@ export const matStore: MatState = proxy<MatState>({
result: ygopro.StocGameMessage.MsgWin.ActionType.UNKNOWN, result: ygopro.StocGameMessage.MsgWin.ActionType.UNKNOWN,
waiting: false, waiting: false,
unimplemented: 0, unimplemented: 0,
// 从playerStore搬过来的
player: {
0: {},
1: {},
me: () =>
matStore.selfType === SelfType.PLAYER1
? matStore.player[0]
: matStore.player[1],
op: () =>
matStore.selfType === SelfType.PLAYER1
? matStore.player[1]
: matStore.player[0],
},
observerCount: 0,
isHost: false,
// methods // methods
isMe, isMe,
}); });
......
import type { ygopro } from "@/api"; import type { ygopro } from "@/api";
// >>> play mat state >>>
export interface BothSide<T> { export interface BothSide<T> {
me: T; me: T;
op: T; op: T;
...@@ -8,9 +10,7 @@ export interface BothSide<T> { ...@@ -8,9 +10,7 @@ export interface BothSide<T> {
} }
export interface MatState { export interface MatState {
selfType: selfType: number;
| ygopro.StocTypeChange.SelfType
| ygopro.StocGameMessage.MsgStart.PlayerType; // 为了适配`start.ts`的`PlayerType`
initInfo: BothSide<InitInfo> & { initInfo: BothSide<InitInfo> & {
set: (controller: number, obj: Partial<InitInfo>) => void; set: (controller: number, obj: Partial<InitInfo>) => void;
...@@ -34,16 +34,6 @@ export interface MatState { ...@@ -34,16 +34,6 @@ export interface MatState {
unimplemented: number; // 未处理的`Message` unimplemented: number; // 未处理的`Message`
player: {
0: Player;
1: Player;
me: () => Player;
op: () => Player;
};
observerCount: number;
isHost: boolean;
/** 根据自己的先后手判断是否是自己 */ /** 根据自己的先后手判断是否是自己 */
isMe: (player: number) => boolean; isMe: (player: number) => boolean;
} }
...@@ -101,16 +91,4 @@ export interface PhaseState { ...@@ -101,16 +91,4 @@ export interface PhaseState {
enableM2: boolean; // 允许进入M2阶段 enableM2: boolean; // 允许进入M2阶段
enableEp: boolean; // 允许回合结束 enableEp: boolean; // 允许回合结束
} }
// <<< play mat state <<<
export interface Player {
name?: string;
state?: string;
isHost?: boolean;
deckInfo?: deckInfo;
}
export interface deckInfo {
mainCnt: number;
extraCnt: number;
sideCnt: number;
}
/* eslint valtio/avoid-this-in-proxy: 0 */
import { proxy } from "valtio";
import { ygopro } from "@/api";
import SelfType = ygopro.StocTypeChange.SelfType;
export interface Player {
name?: string;
state?: string;
isHost?: boolean;
deckInfo?: deckInfo;
}
export interface deckInfo {
mainCnt: number;
extraCnt: number;
sideCnt: number;
}
export interface PlayerState {
player0: Player;
player1: Player;
observerCount: number;
isHost: boolean;
selfType: SelfType;
getMePlayer: () => Player;
getOpPlayer: () => Player;
}
export const playerStore = proxy<PlayerState>({
player0: {},
player1: {},
observerCount: 0,
isHost: false,
selfType: SelfType.UNKNOWN,
getMePlayer() {
if (this.selfType == SelfType.PLAYER1) return this.player0;
return this.player1;
},
getOpPlayer() {
if (this.selfType == SelfType.PLAYER1) return this.player1;
return this.player0;
},
});
...@@ -3,16 +3,20 @@ import "./index.scss"; ...@@ -3,16 +3,20 @@ import "./index.scss";
import React from "react"; import React from "react";
import { useSnapshot } from "valtio"; import { useSnapshot } from "valtio";
import { matStore } from "@/stores"; import { matStore, playerStore } from "@/stores";
export const LifeBar: React.FC = () => { export const LifeBar: React.FC = () => {
const snap = useSnapshot(matStore.initInfo); const snap = useSnapshot(matStore.initInfo);
const snapPlayer = useSnapshot(matStore.player); const snapPlayer = useSnapshot(playerStore);
return ( return (
<div id="life-bar-container"> <div id="life-bar-container">
<div id="life-bar">{`${snapPlayer.me().name}: ${snap.me.life}`}</div> <div id="life-bar">{`${snapPlayer.getMePlayer().name}: ${
<div id="life-bar">{`${snapPlayer.op().name}: ${snap.op.life}`}</div> snap.me.life
}`}</div>
<div id="life-bar">{`${snapPlayer.getOpPlayer().name}: ${
snap.op.life
}`}</div>
</div> </div>
); );
}; };
...@@ -91,9 +91,9 @@ const WaitRoom = () => { ...@@ -91,9 +91,9 @@ const WaitRoom = () => {
const joined = snap.joinStore.value; const joined = snap.joinStore.value;
const chat = snap.chatStore.message; const chat = snap.chatStore.message;
const isHost = snap.matStore.isHost; const isHost = snap.playerStore.isHost;
const player0 = snap.matStore.player[0]; const player0 = snap.playerStore.player0;
const player1 = snap.matStore.player[1]; const player1 = snap.playerStore.player1;
const duelStart = snap.moraStore.duelStart; const duelStart = snap.moraStore.duelStart;
// FIXME: 这些数据应该从`store`中获取 // FIXME: 这些数据应该从`store`中获取
......
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