Commit 2f9bcd60 authored by Chunchi Che's avatar Chunchi Che

finish reloadFieldImpl

parent 212b9fc9
Pipeline #20823 passed with stages
in 17 minutes and 8 seconds
......@@ -54,6 +54,7 @@ export default (data: Uint8Array) => {
new MsgReloadField.ZoneAction({
zone: ygopro.CardZone.DECK,
sequence,
position: ygopro.CardPosition.FACEDOWN_ATTACK,
})
);
}
......@@ -94,6 +95,7 @@ export default (data: Uint8Array) => {
new MsgReloadField.ZoneAction({
zone: ygopro.CardZone.EXTRA,
sequence,
position: ygopro.CardPosition.FACEDOWN_ATTACK,
})
);
}
......
......@@ -4,6 +4,7 @@ import {
clearIdleInteractivities,
clearPlaceInteractivities,
DuelReducer,
reloadFieldMeta,
updateCardData,
} from "./generic";
import { judgeSelf } from "./util";
......@@ -129,9 +130,84 @@ export const updateFieldDataImpl: DuelReducer<MsgUpdateData> = (
export const reloadFieldImpl: DuelReducer<MsgReloadField> = (state, action) => {
const _duel_rule = action.payload.duel_rule;
// 初始化`DuelState`
state.meDeck = { inner: [] };
state.opDeck = { inner: [] };
state.meExtraDeck = { inner: [] };
state.opExtraDeck = { inner: [] };
state.meMonsters = { inner: [] };
state.opMonsters = { inner: [] };
state.meMagics = { inner: [] };
state.opMagics = { inner: [] };
state.meCemetery = { inner: [] };
state.opCemetery = { inner: [] };
state.meExclusion = { inner: [] };
state.opExclusion = { inner: [] };
state.meHands = { inner: [] };
state.opHands = { inner: [] };
for (const reload of action.payload.actions) {
const player = reload.player;
// DECK
const deck = judgeSelf(player, state) ? state.meDeck : state.opDeck;
reloadFieldMeta(
deck,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.DECK),
player
);
// EXTRA_DECK
const extraDeck = judgeSelf(player, state)
? state.meExtraDeck
: state.opExtraDeck;
reloadFieldMeta(
extraDeck,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.EXTRA),
player
);
// MZONE
const monster = judgeSelf(player, state)
? state.meMonsters
: state.opMonsters;
reloadFieldMeta(
monster,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.MZONE),
player
);
// SZONE
const magics = judgeSelf(player, state) ? state.meMagics : state.opMagics;
reloadFieldMeta(
magics,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.SZONE),
player
);
// GRAVE
const cemetery = judgeSelf(player, state)
? state.meCemetery
: state.opCemetery;
reloadFieldMeta(
cemetery,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.GRAVE),
player
);
// REMOVED
const exclusion = judgeSelf(player, state)
? state.meExclusion
: state.opExclusion;
reloadFieldMeta(
exclusion,
reload.zone_actions.filter(
(item) => item.zone == ygopro.CardZone.REMOVED
),
player
);
// HANDS
const hands = judgeSelf(player, state) ? state.meHands : state.opHands;
reloadFieldMeta(
hands,
reload.zone_actions.filter((item) => item.zone == ygopro.CardZone.HAND),
player
);
}
};
......@@ -96,6 +96,7 @@ import {
clearAllIdleInteractivitiesImpl,
clearAllPlaceInteractivitiesImpl,
updateFieldDataImpl,
reloadFieldImpl,
} from "./commonSlice";
import {
ExtraDeckState,
......@@ -258,6 +259,7 @@ const duelSlice = createSlice({
clearAllIdleInteractivities: clearAllIdleInteractivitiesImpl,
clearAllPlaceInteractivities: clearAllPlaceInteractivitiesImpl,
updateFieldData: updateFieldDataImpl,
reloadField: reloadFieldImpl,
// 对局结果`Reducer`
setResult: (state, action: PayloadAction<MsgWin.ActionType>) => {
......@@ -355,6 +357,7 @@ export const {
setWaiting,
setUnimplemented,
updateFieldData,
reloadField,
} = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => {
return state.duel.meInitInfo != null;
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { reloadField } from "../../reducers/duel/mod";
import { AppDispatch } from "../../store";
import MsgReloadField = ygopro.StocGameMessage.MsgReloadField;
export default (reloadField: MsgReloadField, dispatch: AppDispatch) => {
console.log(reloadField);
export default (field: MsgReloadField, dispatch: AppDispatch) => {
dispatch(reloadField(field));
};
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