Commit 7f2fe284 authored by Chunchi Che's avatar Chunchi Che

Merge branch 'fix/move/exclusion' into 'main'

Fix/move/exclusion

See merge request mycard/Neos!84
parents 0896be2d 6359fec3
Pipeline #19653 passed with stages
in 5 minutes and 19 seconds
...@@ -12,6 +12,7 @@ import { ...@@ -12,6 +12,7 @@ import {
DuelFieldState, DuelFieldState,
extendState, extendState,
extendMeta, extendMeta,
removeCard,
} from "./generic"; } from "./generic";
export interface CemeteryState extends DuelFieldState {} export interface CemeteryState extends DuelFieldState {}
...@@ -67,6 +68,17 @@ export const cemeteryCase = (builder: ActionReducerMapBuilder<DuelState>) => { ...@@ -67,6 +68,17 @@ export const cemeteryCase = (builder: ActionReducerMapBuilder<DuelState>) => {
}); });
}; };
// 删除墓地
export const removeCemeteryImpl: CaseReducer<
DuelState,
PayloadAction<{ controler: number; sequence: number }>
> = (state, action) => {
const cemetery = judgeSelf(action.payload.controler, state)
? state.meCemetery
: state.opCemetery;
removeCard(cemetery, action.payload.sequence);
};
export const selectMeCemetery = (state: RootState) => export const selectMeCemetery = (state: RootState) =>
state.duel.meCemetery || { inner: [] }; state.duel.meCemetery || { inner: [] };
export const selectOpCemetery = (state: RootState) => export const selectOpCemetery = (state: RootState) =>
......
...@@ -12,6 +12,7 @@ import { ...@@ -12,6 +12,7 @@ import {
DuelFieldState, DuelFieldState,
extendState, extendState,
extendMeta, extendMeta,
removeCard,
} from "./generic"; } from "./generic";
export interface ExclusionState extends DuelFieldState {} export interface ExclusionState extends DuelFieldState {}
...@@ -69,6 +70,17 @@ export const exclusionCase = (builder: ActionReducerMapBuilder<DuelState>) => { ...@@ -69,6 +70,17 @@ export const exclusionCase = (builder: ActionReducerMapBuilder<DuelState>) => {
}); });
}; };
// 删除除外区
export const removeExclusionImpl: CaseReducer<
DuelState,
PayloadAction<{ controler: number; sequence: number }>
> = (state, action) => {
const exclusion = judgeSelf(action.payload.controler, state)
? state.meExclusion
: state.opExclusion;
removeCard(exclusion, action.payload.sequence);
};
export const selectMeExclusion = (state: RootState) => export const selectMeExclusion = (state: RootState) =>
state.duel.meExclusion || { inner: [] }; state.duel.meExclusion || { inner: [] };
export const selectopExclusion = (state: RootState) => export const selectopExclusion = (state: RootState) =>
......
...@@ -69,10 +69,16 @@ import { ...@@ -69,10 +69,16 @@ import {
setMagicPositionImpl, setMagicPositionImpl,
magicCase, magicCase,
} from "./magicSlice"; } from "./magicSlice";
import { CemeteryState, initCemeteryImpl, cemeteryCase } from "./cemeretySlice"; import {
CemeteryState,
initCemeteryImpl,
removeCemeteryImpl,
cemeteryCase,
} from "./cemeretySlice";
import { import {
ExclusionState, ExclusionState,
initExclusionImpl, initExclusionImpl,
removeExclusionImpl,
exclusionCase, exclusionCase,
} from "./exclusionSlice"; } from "./exclusionSlice";
import { DeckState, initDeckImpl } from "./deckSlice"; import { DeckState, initDeckImpl } from "./deckSlice";
...@@ -172,9 +178,11 @@ const duelSlice = createSlice({ ...@@ -172,9 +178,11 @@ const duelSlice = createSlice({
// 墓地相关`Reducer` // 墓地相关`Reducer`
initCemetery: initCemeteryImpl, initCemetery: initCemeteryImpl,
removeCemetery: removeCemeteryImpl,
// 除外区相关`Reducer` // 除外区相关`Reducer`
initExclusion: initExclusionImpl, initExclusion: initExclusionImpl,
removeExclusion: removeExclusionImpl,
// 卡组相关`Reducer` // 卡组相关`Reducer`
initDeck: initDeckImpl, initDeck: initDeckImpl,
...@@ -256,6 +264,7 @@ export const { ...@@ -256,6 +264,7 @@ export const {
removeMagic, removeMagic,
removeHand, removeHand,
initCemetery, initCemetery,
removeCemetery,
setCardListModalIsOpen, setCardListModalIsOpen,
setCardListModalInfo, setCardListModalInfo,
setCheckCardModalIsOpen, setCheckCardModalIsOpen,
...@@ -272,6 +281,7 @@ export const { ...@@ -272,6 +281,7 @@ export const {
resetOptionModal, resetOptionModal,
initDeck, initDeck,
initExclusion, initExclusion,
removeExclusion,
initField, initField,
clearFieldPlaceInteractivities, clearFieldPlaceInteractivities,
addFieldPlaceInteractivities, addFieldPlaceInteractivities,
......
...@@ -3,6 +3,8 @@ import MsgMove = ygopro.StocGameMessage.MsgMove; ...@@ -3,6 +3,8 @@ import MsgMove = ygopro.StocGameMessage.MsgMove;
import { AppDispatch } from "../../store"; import { AppDispatch } from "../../store";
import { fetchMonsterMeta } from "../../reducers/duel/monstersSlice"; import { fetchMonsterMeta } from "../../reducers/duel/monstersSlice";
import { import {
removeCemetery,
removeExclusion,
removeHand, removeHand,
removeMagic, removeMagic,
removeMonster, removeMonster,
...@@ -10,6 +12,7 @@ import { ...@@ -10,6 +12,7 @@ import {
import { fetchMagicMeta } from "../../reducers/duel/magicSlice"; import { fetchMagicMeta } from "../../reducers/duel/magicSlice";
import { fetchCemeteryMeta } from "../../reducers/duel/cemeretySlice"; import { fetchCemeteryMeta } from "../../reducers/duel/cemeretySlice";
import { insertHandMeta } from "../../reducers/duel/handsSlice"; import { insertHandMeta } from "../../reducers/duel/handsSlice";
import { fetchExclusionMeta } from "../../reducers/duel/exclusionSlice";
export default (move: MsgMove, dispatch: AppDispatch) => { export default (move: MsgMove, dispatch: AppDispatch) => {
const code = move.code; const code = move.code;
...@@ -37,6 +40,20 @@ export default (move: MsgMove, dispatch: AppDispatch) => { ...@@ -37,6 +40,20 @@ export default (move: MsgMove, dispatch: AppDispatch) => {
break; break;
} }
case ygopro.CardZone.GRAVE: {
dispatch(
removeCemetery({ controler: from.controler, sequence: from.sequence })
);
break;
}
case ygopro.CardZone.REMOVED: {
dispatch(
removeExclusion({ controler: from.controler, sequence: from.sequence })
);
break;
}
default: { default: {
console.log(`Unhandled zone type ${from.location}`); console.log(`Unhandled zone type ${from.location}`);
break; break;
...@@ -86,6 +103,17 @@ export default (move: MsgMove, dispatch: AppDispatch) => { ...@@ -86,6 +103,17 @@ export default (move: MsgMove, dispatch: AppDispatch) => {
break; break;
} }
case ygopro.CardZone.REMOVED: {
dispatch(
fetchExclusionMeta({
controler: to.controler,
sequence: to.sequence,
code,
})
);
break;
}
default: { default: {
console.log(`Unhandled zone type ${to.location}`); console.log(`Unhandled zone type ${to.location}`);
......
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