Commit f8b621eb authored by Chunchi Che's avatar Chunchi Che

Merge branch 'fix/magic/place' into 'main'

fix FixedSlot.tsx

See merge request mycard/Neos!77
parents e6e7bab4 be7cdb4d
Pipeline #19536 passed with stages
in 5 minutes and 58 seconds
...@@ -38,5 +38,17 @@ export const initFieldImpl: CaseReducer<DuelState, PayloadAction<number>> = ( ...@@ -38,5 +38,17 @@ export const initFieldImpl: CaseReducer<DuelState, PayloadAction<number>> = (
} }
}; };
export const clearFieldPlaceInteractivitiesImpl: CaseReducer<
DuelState,
PayloadAction<number>
> = (state, action) => {
const player = action.payload;
const field = judgeSelf(player, state) ? state.meField : state.opField;
if (field && field.inner) {
field.inner.placeInteractivities = undefined;
}
};
export const selectMeField = (state: RootState) => state.duel.meField; export const selectMeField = (state: RootState) => state.duel.meField;
export const selectOpField = (state: RootState) => state.duel.opField; export const selectOpField = (state: RootState) => state.duel.opField;
...@@ -64,7 +64,11 @@ import { ...@@ -64,7 +64,11 @@ import {
exclusionCase, exclusionCase,
} from "./exclusionSlice"; } from "./exclusionSlice";
import { DeckState, initDeckImpl } from "./deckSlice"; import { DeckState, initDeckImpl } from "./deckSlice";
import { FieldState, initFieldImpl } from "./fieldSlice"; import {
FieldState,
initFieldImpl,
clearFieldPlaceInteractivitiesImpl,
} from "./fieldSlice";
export interface DuelState { export interface DuelState {
selfType?: number; selfType?: number;
...@@ -156,6 +160,7 @@ const duelSlice = createSlice({ ...@@ -156,6 +160,7 @@ const duelSlice = createSlice({
// 场地区相关`Reducer` // 场地区相关`Reducer`
initField: initFieldImpl, initField: initFieldImpl,
clearFieldPlaceInteractivities: clearFieldPlaceInteractivitiesImpl,
// UI相关`Reducer` // UI相关`Reducer`
setCardModalIsOpen: setCardModalIsOpenImpl, setCardModalIsOpen: setCardModalIsOpenImpl,
...@@ -229,6 +234,7 @@ export const { ...@@ -229,6 +234,7 @@ export const {
initDeck, initDeck,
initExclusion, initExclusion,
initField, initField,
clearFieldPlaceInteractivities,
} = duelSlice.actions; } = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => { export const selectDuelHsStart = (state: RootState) => {
return state.duel.meInitInfo != null; return state.duel.meInitInfo != null;
......
...@@ -2,6 +2,7 @@ import * as BABYLON from "@babylonjs/core"; ...@@ -2,6 +2,7 @@ import * as BABYLON from "@babylonjs/core";
import * as CONFIG from "../../config/ui"; import * as CONFIG from "../../config/ui";
import { useAppSelector } from "../../hook"; import { useAppSelector } from "../../hook";
import { selectMeField, selectOpField } from "../../reducers/duel/fieldSlice"; import { selectMeField, selectOpField } from "../../reducers/duel/fieldSlice";
import { clearFieldPlaceInteractivities } from "../../reducers/duel/mod";
import FixedSlot from "./fixedSlot"; import FixedSlot from "./fixedSlot";
import { Depth } from "./singleSlot"; import { Depth } from "./singleSlot";
...@@ -17,6 +18,7 @@ const Field = () => { ...@@ -17,6 +18,7 @@ const Field = () => {
sequence={0} sequence={0}
position={fieldPosition(0)} position={fieldPosition(0)}
rotation={CONFIG.CardSlotRotation(false)} rotation={CONFIG.CardSlotRotation(false)}
clearPlaceInteractivitiesAction={clearFieldPlaceInteractivities}
/> />
) : ( ) : (
<></> <></>
...@@ -27,6 +29,7 @@ const Field = () => { ...@@ -27,6 +29,7 @@ const Field = () => {
sequence={0} sequence={0}
position={fieldPosition(1)} position={fieldPosition(1)}
rotation={CONFIG.CardSlotRotation(true)} rotation={CONFIG.CardSlotRotation(true)}
clearPlaceInteractivitiesAction={clearFieldPlaceInteractivities}
/> />
) : ( ) : (
<></> <></>
......
...@@ -7,12 +7,12 @@ import { useClick } from "./hook"; ...@@ -7,12 +7,12 @@ import { useClick } from "./hook";
import { sendSelectPlaceResponse } from "../../api/ocgcore/ocgHelper"; import { sendSelectPlaceResponse } from "../../api/ocgcore/ocgHelper";
import { ygopro } from "../../api/ocgcore/idl/ocgcore"; import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { import {
clearMonsterPlaceInteractivities,
setCardModalImgUrl, setCardModalImgUrl,
setCardModalInteractivies, setCardModalInteractivies,
setCardModalIsOpen, setCardModalIsOpen,
setCardModalText, setCardModalText,
} from "../../reducers/duel/mod"; } from "../../reducers/duel/mod";
import { ActionCreatorWithPayload } from "@reduxjs/toolkit";
const shape = CONFIG.CardSlotShape(); const shape = CONFIG.CardSlotShape();
...@@ -22,6 +22,7 @@ const FixedSlot = (props: { ...@@ -22,6 +22,7 @@ const FixedSlot = (props: {
position: BABYLON.Vector3; position: BABYLON.Vector3;
rotation: BABYLON.Vector3; rotation: BABYLON.Vector3;
deffenseRotation?: BABYLON.Vector3; deffenseRotation?: BABYLON.Vector3;
clearPlaceInteractivitiesAction: ActionCreatorWithPayload<number, string>;
}) => { }) => {
const planeRef = useRef(null); const planeRef = useRef(null);
...@@ -44,8 +45,8 @@ const FixedSlot = (props: { ...@@ -44,8 +45,8 @@ const FixedSlot = (props: {
(_event) => { (_event) => {
if (props.state.placeInteractivities) { if (props.state.placeInteractivities) {
sendSelectPlaceResponse(props.state.placeInteractivities.response); sendSelectPlaceResponse(props.state.placeInteractivities.response);
dispatch(clearMonsterPlaceInteractivities(0)); dispatch(props.clearPlaceInteractivitiesAction(0));
dispatch(clearMonsterPlaceInteractivities(1)); dispatch(props.clearPlaceInteractivitiesAction(1));
} else if (props.state.occupant) { } else if (props.state.occupant) {
dispatch( dispatch(
setCardModalText([ setCardModalText([
......
...@@ -5,6 +5,7 @@ import { CardState } from "../../reducers/duel/generic"; ...@@ -5,6 +5,7 @@ import { CardState } from "../../reducers/duel/generic";
import { useAppSelector } from "../../hook"; import { useAppSelector } from "../../hook";
import { zip } from "./util"; import { zip } from "./util";
import FixedSlot from "./fixedSlot"; import FixedSlot from "./fixedSlot";
import { clearMagicPlaceInteractivities } from "../../reducers/duel/mod";
// TODO: use config // TODO: use config
const left = -2.15; const left = -2.15;
...@@ -27,6 +28,7 @@ const Magics = () => { ...@@ -27,6 +28,7 @@ const Magics = () => {
sequence={sequence} sequence={sequence}
position={position} position={position}
rotation={CONFIG.CardSlotRotation(false)} rotation={CONFIG.CardSlotRotation(false)}
clearPlaceInteractivitiesAction={clearMagicPlaceInteractivities}
/> />
); );
})} })}
...@@ -38,6 +40,7 @@ const Magics = () => { ...@@ -38,6 +40,7 @@ const Magics = () => {
sequence={sequence} sequence={sequence}
position={position} position={position}
rotation={CONFIG.CardSlotRotation(true)} rotation={CONFIG.CardSlotRotation(true)}
clearPlaceInteractivitiesAction={clearMagicPlaceInteractivities}
/> />
); );
})} })}
......
...@@ -9,6 +9,7 @@ import { ...@@ -9,6 +9,7 @@ import {
} from "../../reducers/duel/monstersSlice"; } from "../../reducers/duel/monstersSlice";
import { zip } from "./util"; import { zip } from "./util";
import FixedSlot from "./fixedSlot"; import FixedSlot from "./fixedSlot";
import { clearMonsterPlaceInteractivities } from "../../reducers/duel/mod";
const shape = CONFIG.CardSlotShape(); const shape = CONFIG.CardSlotShape();
const left = -2.15; // TODO: config const left = -2.15; // TODO: config
...@@ -32,6 +33,7 @@ const Monsters = () => { ...@@ -32,6 +33,7 @@ const Monsters = () => {
position={position} position={position}
rotation={CONFIG.CardSlotRotation(false)} rotation={CONFIG.CardSlotRotation(false)}
deffenseRotation={CONFIG.CardSlotDefenceRotation()} deffenseRotation={CONFIG.CardSlotDefenceRotation()}
clearPlaceInteractivitiesAction={clearMonsterPlaceInteractivities}
/> />
); );
} }
...@@ -46,6 +48,7 @@ const Monsters = () => { ...@@ -46,6 +48,7 @@ const Monsters = () => {
position={position} position={position}
rotation={CONFIG.CardSlotRotation(true)} rotation={CONFIG.CardSlotRotation(true)}
deffenseRotation={CONFIG.CardSlotDefenceRotation()} deffenseRotation={CONFIG.CardSlotDefenceRotation()}
clearPlaceInteractivitiesAction={clearMonsterPlaceInteractivities}
/> />
); );
} }
......
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