Commit b2bfeb73 authored by chechunchi's avatar chechunchi

update pos change service

parent e11559a6
Pipeline #19649 passed with stages
in 7 minutes and 43 seconds
...@@ -251,3 +251,14 @@ export function clearIdleInteractivities<T extends DuelFieldState>( ...@@ -251,3 +251,14 @@ export function clearIdleInteractivities<T extends DuelFieldState>(
}); });
} }
} }
export function setPosition<T extends DuelFieldState>(
state: T | undefined,
sequence: number,
position: ygopro.CardPosition
) {
const target = state?.inner.find((_, idx) => idx == sequence);
if (target && target.occupant) {
target.location.position = position;
}
}
...@@ -17,6 +17,7 @@ import { ...@@ -17,6 +17,7 @@ import {
Interactivity, Interactivity,
extendIdleInteractivities, extendIdleInteractivities,
clearIdleInteractivities, clearIdleInteractivities,
setPosition,
} from "./generic"; } from "./generic";
export interface MagicState extends DuelFieldState {} export interface MagicState extends DuelFieldState {}
...@@ -172,6 +173,23 @@ export const removeMagicImpl: CaseReducer< ...@@ -172,6 +173,23 @@ export const removeMagicImpl: CaseReducer<
removeOccupant(magics, action.payload.sequence); removeOccupant(magics, action.payload.sequence);
}; };
// 改变魔法表示形式
export const setMagicPositionImpl: CaseReducer<
DuelState,
PayloadAction<{
controler: number;
sequence: number;
position: ygopro.CardPosition;
}>
> = (state, action) => {
const controler = action.payload.controler;
const sequence = action.payload.sequence;
const position = action.payload.position;
const magics = judgeSelf(controler, state) ? state.meMagics : state.opMagics;
setPosition(magics, sequence, position);
};
export const selectMeMagics = (state: RootState) => export const selectMeMagics = (state: RootState) =>
state.duel.meMagics || { inner: [] }; state.duel.meMagics || { inner: [] };
export const selectOpMagics = (state: RootState) => export const selectOpMagics = (state: RootState) =>
......
...@@ -66,6 +66,7 @@ import { ...@@ -66,6 +66,7 @@ import {
addMagicIdleInteractivitiesImpl, addMagicIdleInteractivitiesImpl,
clearMagicIdleInteractivitiesImpl, clearMagicIdleInteractivitiesImpl,
removeMagicImpl, removeMagicImpl,
setMagicPositionImpl,
magicCase, magicCase,
} from "./magicSlice"; } from "./magicSlice";
import { CemeteryState, initCemeteryImpl, cemeteryCase } from "./cemeretySlice"; import { CemeteryState, initCemeteryImpl, cemeteryCase } from "./cemeretySlice";
...@@ -166,6 +167,7 @@ const duelSlice = createSlice({ ...@@ -166,6 +167,7 @@ const duelSlice = createSlice({
clearMagicPlaceInteractivities: clearMagicPlaceInteractivitiesImpl, clearMagicPlaceInteractivities: clearMagicPlaceInteractivitiesImpl,
addMagicIdleInteractivities: addMagicIdleInteractivitiesImpl, addMagicIdleInteractivities: addMagicIdleInteractivitiesImpl,
clearMagicIdleInteractivities: clearMagicIdleInteractivitiesImpl, clearMagicIdleInteractivities: clearMagicIdleInteractivitiesImpl,
setMagicPosition: setMagicPositionImpl,
removeMagic: removeMagicImpl, removeMagic: removeMagicImpl,
// 墓地相关`Reducer` // 墓地相关`Reducer`
...@@ -250,6 +252,7 @@ export const { ...@@ -250,6 +252,7 @@ export const {
clearMagicPlaceInteractivities, clearMagicPlaceInteractivities,
addMagicIdleInteractivities, addMagicIdleInteractivities,
clearMagicIdleInteractivities, clearMagicIdleInteractivities,
setMagicPosition,
removeMagic, removeMagic,
removeHand, removeHand,
initCemetery, initCemetery,
......
...@@ -17,6 +17,7 @@ import { ...@@ -17,6 +17,7 @@ import {
removeOccupant, removeOccupant,
extendIdleInteractivities, extendIdleInteractivities,
clearIdleInteractivities, clearIdleInteractivities,
setPosition,
} from "./generic"; } from "./generic";
export interface MonsterState extends DuelFieldState {} export interface MonsterState extends DuelFieldState {}
...@@ -190,21 +191,17 @@ export const setMonsterPositionImpl: CaseReducer< ...@@ -190,21 +191,17 @@ export const setMonsterPositionImpl: CaseReducer<
PayloadAction<{ PayloadAction<{
controler: number; controler: number;
sequence: number; sequence: number;
currentPosition: ygopro.CardPosition; position: ygopro.CardPosition;
}> }>
> = (state, action) => { > = (state, action) => {
const controler = action.payload.controler; const controler = action.payload.controler;
const sequence = action.payload.sequence; const sequence = action.payload.sequence;
const currentPosition = action.payload.currentPosition; const position = action.payload.position;
const monsters = judgeSelf(controler, state) const monsters = judgeSelf(controler, state)
? state.meMonsters ? state.meMonsters
: state.opMonsters; : state.opMonsters;
const monster = monsters?.inner.find((_, idx) => idx == sequence); setPosition(monsters, sequence, position);
if (monster && monster.occupant) {
monster.location.position = currentPosition;
}
}; };
export const selectMeMonsters = (state: RootState) => export const selectMeMonsters = (state: RootState) =>
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore"; import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { setMonsterPosition } from "../../reducers/duel/mod"; import { setMagicPosition, setMonsterPosition } from "../../reducers/duel/mod";
import { AppDispatch } from "../../store"; import { AppDispatch } from "../../store";
import MsgPosChange = ygopro.StocGameMessage.MsgPosChange; import MsgPosChange = ygopro.StocGameMessage.MsgPosChange;
...@@ -12,7 +12,18 @@ export default (posChange: MsgPosChange, dispatch: AppDispatch) => { ...@@ -12,7 +12,18 @@ export default (posChange: MsgPosChange, dispatch: AppDispatch) => {
setMonsterPosition({ setMonsterPosition({
controler: cardInfo.controler, controler: cardInfo.controler,
sequence: cardInfo.sequence, sequence: cardInfo.sequence,
currentPosition: posChange.cur_position, position: posChange.cur_position,
})
);
break;
}
case ygopro.CardZone.SZONE: {
dispatch(
setMagicPosition({
controler: cardInfo.controler,
sequence: cardInfo.sequence,
position: posChange.cur_position,
}) })
); );
......
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