Commit 75a1a49e authored by chechunchi's avatar chechunchi

add removeOccupant

parent 5e1e0834
Pipeline #19510 passed with stages
in 4 minutes and 4 seconds
......@@ -149,3 +149,24 @@ export function clearPlaceInteractivities<T extends DuelFieldState>(
}
}
}
export function removeCard<T extends DuelFieldState>(
state: T | undefined,
sequence: number
) {
if (state) {
state.inner = state.inner.filter((_, idx) => idx != sequence);
}
}
export function removeOccupant<T extends DuelFieldState>(
state: T | undefined,
sequence: number
) {
if (state) {
const target = state.inner.find((_, idx) => idx == sequence);
if (target) {
target.occupant = undefined;
}
}
}
......@@ -46,6 +46,7 @@ import {
initMonstersImpl,
addMonsterPlaceInteractivitiesImpl,
clearMonsterPlaceInteractivitiesImpl,
removeMonsterImpl,
monsterCase,
} from "./monstersSlice";
import {
......@@ -135,6 +136,7 @@ const duelSlice = createSlice({
initMonsters: initMonstersImpl,
addMonsterPlaceInteractivities: addMonsterPlaceInteractivitiesImpl,
clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl,
removeMonster: removeMonsterImpl,
// 魔法陷阱区相关`Reducer`
initMagics: initMagicsImpl,
......@@ -201,6 +203,7 @@ export const {
initMonsters,
addMonsterPlaceInteractivities,
clearMonsterPlaceInteractivities,
removeMonster,
initMagics,
addMagicPlaceInteractivities,
clearMagicPlaceInteractivities,
......
......@@ -13,6 +13,7 @@ import {
extendOccupant,
extendPlaceInteractivity,
clearPlaceInteractivities,
removeOccupant,
} from "./generic";
export interface MonsterState extends DuelFieldState {}
......@@ -137,6 +138,19 @@ export const monsterCase = (builder: ActionReducerMapBuilder<DuelState>) => {
});
};
export const removeMonsterImpl: CaseReducer<
DuelState,
PayloadAction<{ controler: number; sequence: number }>
> = (state, action) => {
const controler = action.payload.controler;
const monsters = judgeSelf(controler, state)
? state.meMonsters
: state.opMonsters;
removeOccupant(monsters, action.payload.sequence);
};
export const selectMeMonsters = (state: RootState) =>
state.duel.meMonsters || { inner: [] };
export const selectOpMonsters = (state: RootState) =>
......
......@@ -2,7 +2,7 @@ import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import MsgMove = ygopro.StocGameMessage.MsgMove;
import { AppDispatch } from "../../store";
import { fetchMonsterMeta } from "../../reducers/duel/monstersSlice";
import { removeHand } from "../../reducers/duel/mod";
import { removeHand, removeMonster } from "../../reducers/duel/mod";
import { fetchMagicMeta } from "../../reducers/duel/magicSlice";
import { fetchCemeteryMeta } from "../../reducers/duel/cemeretySlice";
......@@ -18,6 +18,13 @@ export default (move: MsgMove, dispatch: AppDispatch) => {
break;
}
case ygopro.CardZone.MZONE: {
dispatch(
removeMonster({ controler: from.controler, sequence: from.sequence })
);
break;
}
default: {
console.log(`Unhandled zone type ${from.location}`);
break;
......
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