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> = ( ...@@ -18,6 +18,7 @@ export const clearAllIdleInteractivitiesImpl: DuelReducer<number> = (
state.meMagics, state.meMagics,
state.meCemetery, state.meCemetery,
state.meExclusion, state.meExclusion,
state.meExtraDeck,
] ]
: [ : [
state.opHands, state.opHands,
...@@ -25,6 +26,7 @@ export const clearAllIdleInteractivitiesImpl: DuelReducer<number> = ( ...@@ -25,6 +26,7 @@ export const clearAllIdleInteractivitiesImpl: DuelReducer<number> = (
state.opMagics, state.opMagics,
state.opCemetery, state.opCemetery,
state.opExclusion, state.opExclusion,
state.opExtraDeck,
]; ];
states.forEach((item) => clearIdleInteractivities(item)); states.forEach((item) => clearIdleInteractivities(item));
......
import { ActionReducerMapBuilder } from "@reduxjs/toolkit"; import { ActionReducerMapBuilder } from "@reduxjs/toolkit";
import { ygopro } from "../../api/ocgcore/idl/ocgcore"; import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { RootState } from "../../store"; 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 { DuelState } from "./mod";
import { judgeSelf } from "./util"; import { judgeSelf } from "./util";
...@@ -12,6 +23,11 @@ export const initExtraDeckMeta = createAsyncRepeatedMetaThunk( ...@@ -12,6 +23,11 @@ export const initExtraDeckMeta = createAsyncRepeatedMetaThunk(
"duel/initExtraDeckMeta" "duel/initExtraDeckMeta"
); );
// 增加额外卡组
export const fetchExtraDeckMeta = createAsyncMetaThunk(
"duel/fetchExtraDeckMeta"
);
export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => { export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => {
builder.addCase(initExtraDeckMeta.pending, (state, action) => { builder.addCase(initExtraDeckMeta.pending, (state, action) => {
const player = action.meta.arg.controler; const player = action.meta.arg.controler;
...@@ -33,6 +49,71 @@ export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => { ...@@ -33,6 +49,71 @@ export const extraDeckCase = (builder: ActionReducerMapBuilder<DuelState>) => {
state.opExtraDeck = { inner: cards }; 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) => export const selectMeExtraDeck = (state: RootState) =>
......
...@@ -95,7 +95,12 @@ import { ...@@ -95,7 +95,12 @@ import {
clearAllIdleInteractivitiesImpl, clearAllIdleInteractivitiesImpl,
clearAllPlaceInteractivitiesImpl, clearAllPlaceInteractivitiesImpl,
} from "./commonSlice"; } from "./commonSlice";
import { ExtraDeckState, extraDeckCase } from "./extraDeckSlice"; import {
ExtraDeckState,
extraDeckCase,
removeExtraDeckImpl,
addExtraDeckIdleInteractivitiesImpl,
} from "./extraDeckSlice";
export interface DuelState { export interface DuelState {
selfType?: number; selfType?: number;
...@@ -203,6 +208,10 @@ const duelSlice = createSlice({ ...@@ -203,6 +208,10 @@ const duelSlice = createSlice({
// 卡组相关`Reducer` // 卡组相关`Reducer`
initDeck: initDeckImpl, initDeck: initDeckImpl,
// 额外卡组相关`Reducer`
removeExtraDeck: removeExtraDeckImpl,
addExtraDeckIdleInteractivities: addExtraDeckIdleInteractivitiesImpl,
// 阶段相关 // 阶段相关
updatePhase: newPhaseImpl, updatePhase: newPhaseImpl,
setEnableBp: setEnableBpImpl, setEnableBp: setEnableBpImpl,
...@@ -302,6 +311,8 @@ export const { ...@@ -302,6 +311,8 @@ export const {
setOptionModalIsOpen, setOptionModalIsOpen,
resetOptionModal, resetOptionModal,
initDeck, initDeck,
removeExtraDeck,
addExtraDeckIdleInteractivities,
initExclusion, initExclusion,
removeExclusion, removeExclusion,
addExclusionIdleInteractivities, 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