Commit 390c9585 authored by Chunchi Che's avatar Chunchi Che

update extraDeck slice

parent ae30741c
Pipeline #19771 passed with stages
in 5 minutes and 41 seconds
......@@ -18,6 +18,7 @@ export const clearAllIdleInteractivitiesImpl: DuelReducer<number> = (
state.meMagics,
state.meCemetery,
state.meExclusion,
state.meExtraDeck,
]
: [
state.opHands,
......@@ -25,6 +26,7 @@ export const clearAllIdleInteractivitiesImpl: DuelReducer<number> = (
state.opMagics,
state.opCemetery,
state.opExclusion,
state.opExtraDeck,
];
states.forEach((item) => clearIdleInteractivities(item));
......
import { ActionReducerMapBuilder } from "@reduxjs/toolkit";
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { RootState } from "../../store";
import { createAsyncRepeatedMetaThunk, DuelFieldState } from "./generic";
import {
createAsyncMetaThunk,
createAsyncRepeatedMetaThunk,
DuelFieldState,
DuelReducer,
extendIdleInteractivities,
extendMeta,
extendState,
Interactivity,
removeCard,
updateCardMeta,
} from "./generic";
import { DuelState } from "./mod";
import { judgeSelf } from "./util";
......@@ -12,6 +23,11 @@ export const initExtraDeckMeta = createAsyncRepeatedMetaThunk(
"duel/initExtraDeckMeta"
);
// 增加额外卡组
export const fetchExtraDeckMeta = createAsyncMetaThunk(
"duel/fetchExtraDeckMeta"
);
export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => {
builder.addCase(initExtraDeckMeta.pending, (state, action) => {
const player = action.meta.arg.controler;
......@@ -33,6 +49,71 @@ export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => {
state.opExtraDeck = { inner: cards };
}
});
builder.addCase(initExtraDeckMeta.fulfilled, (state, action) => {
const player = action.payload.controler;
const metas = action.payload.metas;
const extraDeck = judgeSelf(player, state)
? state.meExtraDeck
: state.opExtraDeck;
updateCardMeta(extraDeck, metas);
});
builder.addCase(fetchExtraDeckMeta.pending, (state, action) => {
const controler = action.meta.arg.controler;
const sequence = action.meta.arg.sequence;
const code = action.meta.arg.code;
const newExtraDeck = {
occupant: { id: code, data: {}, text: {} },
location: {
controler,
location: ygopro.CardZone.EXTRA,
sequence,
},
idleInteractivities: [],
};
const extraDeck = judgeSelf(controler, state)
? state.meExtraDeck
: state.opExtraDeck;
extendState(extraDeck, newExtraDeck);
});
builder.addCase(fetchExtraDeckMeta.fulfilled, (state, action) => {
const controler = action.payload.controler;
const sequence = action.payload.sequence;
const meta = action.payload.meta;
const extraDeck = judgeSelf(controler, state)
? state.meExtraDeck
: state.opExtraDeck;
extendMeta(extraDeck, meta, sequence);
});
};
// 删除额外卡组
export const removeExtraDeckImpl: DuelReducer<{
controler: number;
sequence: number;
}> = (state, action) => {
const extraDeck = judgeSelf(action.payload.controler, state)
? state.meExtraDeck
: state.opExtraDeck;
removeCard(extraDeck, action.payload.sequence);
};
export const addExtraDeckIdleInteractivitiesImpl: DuelReducer<{
player: number;
sequence: number;
interactivy: Interactivity<number>;
}> = (state, action) => {
const extraDeck = judgeSelf(action.payload.player, state)
? state.meExtraDeck
: state.opExtraDeck;
extendIdleInteractivities(
extraDeck,
action.payload.sequence,
action.payload.interactivy
);
};
export const selectMeExtraDeck = (state: RootState) =>
......
......@@ -95,7 +95,12 @@ import {
clearAllIdleInteractivitiesImpl,
clearAllPlaceInteractivitiesImpl,
} from "./commonSlice";
import { ExtraDeckState, extraDeckCase } from "./extraDeckSlice";
import {
ExtraDeckState,
extraDeckCase,
removeExtraDeckImpl,
addExtraDeckIdleInteractivitiesImpl,
} from "./extraDeckSlice";
export interface DuelState {
selfType?: number;
......@@ -203,6 +208,10 @@ const duelSlice = createSlice({
// 卡组相关`Reducer`
initDeck: initDeckImpl,
// 额外卡组相关`Reducer`
removeExtraDeck: removeExtraDeckImpl,
addExtraDeckIdleInteractivities: addExtraDeckIdleInteractivitiesImpl,
// 阶段相关
updatePhase: newPhaseImpl,
setEnableBp: setEnableBpImpl,
......@@ -302,6 +311,8 @@ export const {
setOptionModalIsOpen,
resetOptionModal,
initDeck,
removeExtraDeck,
addExtraDeckIdleInteractivities,
initExclusion,
removeExclusion,
addExclusionIdleInteractivities,
......
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