Commit e11559a6 authored by chechunchi's avatar chechunchi

update pos change service

parent 9580a6c2
Pipeline #19648 passed with stages
in 7 minutes and 11 seconds
......@@ -55,6 +55,7 @@ import {
addMonsterIdleInteractivitiesImpl,
clearMonsterIdleInteractivitiesImpl,
removeMonsterImpl,
setMonsterPositionImpl,
monsterCase,
} from "./monstersSlice";
import {
......@@ -156,6 +157,7 @@ const duelSlice = createSlice({
clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl,
addMonsterIdleInteractivities: addMonsterIdleInteractivitiesImpl,
clearMonsterIdleInteractivities: clearMonsterIdleInteractivitiesImpl,
setMonsterPosition: setMonsterPositionImpl,
removeMonster: removeMonsterImpl,
// 魔法陷阱区相关`Reducer`
......@@ -241,6 +243,7 @@ export const {
clearMonsterPlaceInteractivities,
addMonsterIdleInteractivities,
clearMonsterIdleInteractivities,
setMonsterPosition,
removeMonster,
initMagics,
addMagicPlaceInteractivities,
......
......@@ -184,6 +184,29 @@ export const removeMonsterImpl: CaseReducer<
removeOccupant(monsters, action.payload.sequence);
};
// 改变怪兽表示形式
export const setMonsterPositionImpl: CaseReducer<
DuelState,
PayloadAction<{
controler: number;
sequence: number;
currentPosition: ygopro.CardPosition;
}>
> = (state, action) => {
const controler = action.payload.controler;
const sequence = action.payload.sequence;
const currentPosition = action.payload.currentPosition;
const monsters = judgeSelf(controler, state)
? state.meMonsters
: state.opMonsters;
const monster = monsters?.inner.find((_, idx) => idx == sequence);
if (monster && monster.occupant) {
monster.location.position = currentPosition;
}
};
export const selectMeMonsters = (state: RootState) =>
state.duel.meMonsters || { inner: [] };
export const selectOpMonsters = (state: RootState) =>
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { setMonsterPosition } from "../../reducers/duel/mod";
import { AppDispatch } from "../../store";
import MsgPosChange = ygopro.StocGameMessage.MsgPosChange;
export default (posChange: MsgPosChange, dispatch: AppDispatch) => {
console.log(posChange);
const cardInfo = posChange.card_info;
switch (cardInfo.location) {
case ygopro.CardZone.MZONE: {
dispatch(
setMonsterPosition({
controler: cardInfo.controler,
sequence: cardInfo.sequence,
currentPosition: posChange.cur_position,
})
);
break;
}
default: {
console.log(`Unhandled zone ${cardInfo.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