Commit 3405b9d2 authored by Chunchi Che's avatar Chunchi Che

fix ts check

parent 77840865
import { v4 as v4uuid } from "uuid";
import { fetchCard, ygopro } from "@/api";
import { playerStore, store, cardStore, CardType } from "@/stores";
import { flatten } from "lodash-es";
import { v4 as v4uuid } from "uuid";
import { proxy } from "valtio";
import { subscribeKey } from "valtio/utils";
import { fetchCard, ygopro } from "@/api";
import { cardStore, CardType, playerStore, store } from "@/stores";
const { matStore } = store;
const TOKEN_SIZE = 13; // 每人场上最多就只可能有13个token
export default (start: ygopro.StocGameMessage.MsgStart) => {
matStore.selfType = start.playerType;
......@@ -31,90 +31,8 @@ export default (start: ygopro.StocGameMessage.MsgStart) => {
extraSize: start.extraSize2,
});
matStore.monsters.of(0).forEach((x) => (x.location.controler = 0));
matStore.monsters.of(1).forEach((x) => (x.location.controler = 1));
matStore.magics.of(0).forEach((x) => (x.location.controler = 0));
matStore.magics.of(1).forEach((x) => (x.location.controler = 1));
for (let i = 0; i < start.deckSize1; i++) {
matStore.decks.of(0).push({
uuid: v4uuid(),
occupant: {
id: 0,
data: {},
text: {},
},
location: {
controler: 0,
zone: ygopro.CardZone.DECK,
},
focus: false,
chaining: false,
directAttack: false,
counters: {},
idleInteractivities: [],
});
}
for (let i = 0; i < start.deckSize2; i++) {
matStore.decks.of(1).push({
uuid: v4uuid(),
occupant: {
id: 0,
data: {},
text: {},
},
location: {
controler: 1,
zone: ygopro.CardZone.DECK,
},
focus: false,
chaining: false,
directAttack: false,
counters: {},
idleInteractivities: [],
});
}
// 初始化对手的额外卡组
for (let i = 0; i < start.extraSize2; i++) {
matStore.extraDecks.op.push({
uuid: v4uuid(),
occupant: {
id: 0,
data: {},
text: {},
},
location: {
controler: opponent,
zone: ygopro.CardZone.EXTRA,
},
focus: false,
chaining: false,
directAttack: false,
counters: {},
idleInteractivities: [],
});
}
// 在`WaitRoom`页面会设置自己的额外卡组,但那时候拿不到正确的`controller`值,因为不知道自己是先攻还是后手,因此这里需要重新为自己的额外卡组设置`controller`值
matStore
.in(ygopro.CardZone.EXTRA)
.me.forEach((state) => (state.location.controler = 1 - opponent));
// 下面是cardStore的初始化
/** 自动从code推断出occupant */
const genCard = (o: CardType) => {
const t = proxy(o);
subscribeKey(t, "code", async (code) => {
const { text, data } = await fetchCard(code ?? 0);
t.text = text;
t.data = data;
});
return t;
};
const TOKEN_SIZE = 13; // 每人场上最多就只可能有13个token
let uuid = 0;
const cards = flatten(
[
start.deckSize1,
......@@ -126,7 +44,7 @@ export default (start: ygopro.StocGameMessage.MsgStart) => {
].map((length, i) =>
Array.from({ length }).map((_, sequence) =>
genCard({
uuid: uuid++,
uuid: v4uuid(),
code: 0,
controller: i < 3 ? 1 - opponent : opponent, // 前3个是自己的卡组,后3个是对手的卡组
originController: i < 3 ? 1 - opponent : opponent,
......@@ -143,6 +61,9 @@ export default (start: ygopro.StocGameMessage.MsgStart) => {
isToken: !((i + 1) % 3),
overlayMaterials: [],
position: ygopro.CardPosition.FACEDOWN,
focus: false,
chaining: false,
directAttack: false,
})
)
)
......@@ -154,3 +75,14 @@ export default (start: ygopro.StocGameMessage.MsgStart) => {
.at(ygopro.CardZone.EXTRA, 1 - opponent)
.forEach((card) => (card.code = myExtraDeckCodes.shift()!));
};
// 自动从code推断出occupant
const genCard = (o: CardType) => {
const t = proxy(o);
subscribeKey(t, "code", async (code) => {
const { text, data } = await fetchCard(code ?? 0);
t.text = text;
t.data = data;
});
return t;
};
......@@ -8,7 +8,7 @@ import type { Interactivity } from "./matStore/types";
* 场上某位置的状态
*/
export interface CardType {
uuid: number; // 一张卡的唯一标识
uuid: string; // 一张卡的唯一标识
code: number; // 卡号
data: CardData;
text: CardText;
......
......@@ -22,17 +22,10 @@ import {
import React, { useEffect, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
import rustInit from "rust-src";
import { v4 as v4uuid } from "uuid";
import { useSnapshot } from "valtio";
import YGOProDeck from "ygopro-deck-encode";
import {
initStrings,
sendHsReady,
sendHsStart,
sendUpdateDeck,
ygopro,
} from "@/api";
import { initStrings, sendHsReady, sendHsStart, sendUpdateDeck } from "@/api";
import { DeckManager, fetchDeck, type IDeck } from "@/api/deck";
import { useConfig } from "@/config";
import socketMiddleWare, { socketCmd } from "@/middleware/socket";
......@@ -144,12 +137,6 @@ const WaitRoom = () => {
const onDeckReady = async (deck: IDeck) => {
sendUpdateDeck(deck);
store.matStore.extraDecks.me.add(
(deck.extra?.reverse() || []).map((id) => {
return { uuid: v4uuid(), id };
}),
ygopro.CardPosition.FACEDOWN_ATTACK
);
setChoseDeck(true);
window.myExtraDeckCodes = deck.extra;
......
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