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>( ...@@ -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 { ...@@ -46,6 +46,7 @@ import {
initMonstersImpl, initMonstersImpl,
addMonsterPlaceInteractivitiesImpl, addMonsterPlaceInteractivitiesImpl,
clearMonsterPlaceInteractivitiesImpl, clearMonsterPlaceInteractivitiesImpl,
removeMonsterImpl,
monsterCase, monsterCase,
} from "./monstersSlice"; } from "./monstersSlice";
import { import {
...@@ -135,6 +136,7 @@ const duelSlice = createSlice({ ...@@ -135,6 +136,7 @@ const duelSlice = createSlice({
initMonsters: initMonstersImpl, initMonsters: initMonstersImpl,
addMonsterPlaceInteractivities: addMonsterPlaceInteractivitiesImpl, addMonsterPlaceInteractivities: addMonsterPlaceInteractivitiesImpl,
clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl, clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl,
removeMonster: removeMonsterImpl,
// 魔法陷阱区相关`Reducer` // 魔法陷阱区相关`Reducer`
initMagics: initMagicsImpl, initMagics: initMagicsImpl,
...@@ -201,6 +203,7 @@ export const { ...@@ -201,6 +203,7 @@ export const {
initMonsters, initMonsters,
addMonsterPlaceInteractivities, addMonsterPlaceInteractivities,
clearMonsterPlaceInteractivities, clearMonsterPlaceInteractivities,
removeMonster,
initMagics, initMagics,
addMagicPlaceInteractivities, addMagicPlaceInteractivities,
clearMagicPlaceInteractivities, clearMagicPlaceInteractivities,
......
...@@ -13,6 +13,7 @@ import { ...@@ -13,6 +13,7 @@ import {
extendOccupant, extendOccupant,
extendPlaceInteractivity, extendPlaceInteractivity,
clearPlaceInteractivities, clearPlaceInteractivities,
removeOccupant,
} from "./generic"; } from "./generic";
export interface MonsterState extends DuelFieldState {} export interface MonsterState extends DuelFieldState {}
...@@ -137,6 +138,19 @@ export const monsterCase = (builder: ActionReducerMapBuilder<DuelState>) => { ...@@ -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) => export const selectMeMonsters = (state: RootState) =>
state.duel.meMonsters || { inner: [] }; state.duel.meMonsters || { inner: [] };
export const selectOpMonsters = (state: RootState) => export const selectOpMonsters = (state: RootState) =>
......
...@@ -2,7 +2,7 @@ import { ygopro } from "../../api/ocgcore/idl/ocgcore"; ...@@ -2,7 +2,7 @@ import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import MsgMove = ygopro.StocGameMessage.MsgMove; 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 { removeHand } from "../../reducers/duel/mod"; import { removeHand, removeMonster } from "../../reducers/duel/mod";
import { fetchMagicMeta } from "../../reducers/duel/magicSlice"; import { fetchMagicMeta } from "../../reducers/duel/magicSlice";
import { fetchCemeteryMeta } from "../../reducers/duel/cemeretySlice"; import { fetchCemeteryMeta } from "../../reducers/duel/cemeretySlice";
...@@ -18,6 +18,13 @@ export default (move: MsgMove, dispatch: AppDispatch) => { ...@@ -18,6 +18,13 @@ export default (move: MsgMove, dispatch: AppDispatch) => {
break; break;
} }
case ygopro.CardZone.MZONE: {
dispatch(
removeMonster({ 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;
......
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