Commit a78d6b50 authored by chechunchi's avatar chechunchi

update selectChain service and ui

parent d1060dbd
...@@ -27,6 +27,7 @@ import { ...@@ -27,6 +27,7 @@ import {
setCardListModalInfoImpl, setCardListModalInfoImpl,
setCheckCardModalIsOpenImpl, setCheckCardModalIsOpenImpl,
setCheckCardModalMinMaxImpl, setCheckCardModalMinMaxImpl,
setCheckCardModalOnSubmitImpl,
resetCheckCardModalImpl, resetCheckCardModalImpl,
checkCardModalCase, checkCardModalCase,
} from "./modalSlice"; } from "./modalSlice";
...@@ -123,6 +124,7 @@ const duelSlice = createSlice({ ...@@ -123,6 +124,7 @@ const duelSlice = createSlice({
setCardListModalInfo: setCardListModalInfoImpl, setCardListModalInfo: setCardListModalInfoImpl,
setCheckCardModalIsOpen: setCheckCardModalIsOpenImpl, setCheckCardModalIsOpen: setCheckCardModalIsOpenImpl,
setCheckCardModalMinMax: setCheckCardModalMinMaxImpl, setCheckCardModalMinMax: setCheckCardModalMinMaxImpl,
setCheckCardModalOnSubmit: setCheckCardModalOnSubmitImpl,
resetCheckCardModal: resetCheckCardModalImpl, resetCheckCardModal: resetCheckCardModalImpl,
}, },
extraReducers(builder) { extraReducers(builder) {
...@@ -159,6 +161,7 @@ export const { ...@@ -159,6 +161,7 @@ export const {
setCardListModalInfo, setCardListModalInfo,
setCheckCardModalIsOpen, setCheckCardModalIsOpen,
setCheckCardModalMinMax, setCheckCardModalMinMax,
setCheckCardModalOnSubmit,
resetCheckCardModal, resetCheckCardModal,
} = duelSlice.actions; } = duelSlice.actions;
export const selectDuelHsStart = (state: RootState) => { export const selectDuelHsStart = (state: RootState) => {
......
...@@ -30,6 +30,7 @@ export interface ModalState { ...@@ -30,6 +30,7 @@ export interface ModalState {
// 卡牌选择弹窗 // 卡牌选择弹窗
checkCardModal: { checkCardModal: {
isOpen: boolean; isOpen: boolean;
onSubmit?: string;
selectMin?: number; selectMin?: number;
selectMax?: number; selectMax?: number;
tags: { tags: {
...@@ -116,6 +117,14 @@ export const setCheckCardModalMinMaxImpl: CaseReducer< ...@@ -116,6 +117,14 @@ export const setCheckCardModalMinMaxImpl: CaseReducer<
state.modalState.checkCardModal.selectMax = action.payload.max; state.modalState.checkCardModal.selectMax = action.payload.max;
}; };
// 更新卡牌选择弹窗的提交回调
export const setCheckCardModalOnSubmitImpl: CaseReducer<
DuelState,
PayloadAction<string>
> = (state, action) => {
state.modalState.checkCardModal.onSubmit = action.payload;
};
// 增加卡牌选择选项 // 增加卡牌选择选项
export const fetchCheckCardMeta = createAsyncThunk( export const fetchCheckCardMeta = createAsyncThunk(
"duel/fetchCheckCardMeta", "duel/fetchCheckCardMeta",
...@@ -222,3 +231,5 @@ export const selectCheckCardModalMinMax = (state: RootState) => { ...@@ -222,3 +231,5 @@ export const selectCheckCardModalMinMax = (state: RootState) => {
}; };
export const selectCheckCardModalTags = (state: RootState) => export const selectCheckCardModalTags = (state: RootState) =>
state.duel.modalState.checkCardModal.tags; state.duel.modalState.checkCardModal.tags;
export const selectCheckCardModalOnSubmit = (state: RootState) =>
state.duel.modalState.checkCardModal.onSubmit;
...@@ -3,6 +3,7 @@ import { AppDispatch } from "../../store"; ...@@ -3,6 +3,7 @@ import { AppDispatch } from "../../store";
import { import {
setCheckCardModalIsOpen, setCheckCardModalIsOpen,
setCheckCardModalMinMax, setCheckCardModalMinMax,
setCheckCardModalOnSubmit,
} from "../../reducers/duel/mod"; } from "../../reducers/duel/mod";
import { fetchCheckCardMeta } from "../../reducers/duel/modalSlice"; import { fetchCheckCardMeta } from "../../reducers/duel/modalSlice";
import MsgSelectCard = ygopro.StocGameMessage.MsgSelectCard; import MsgSelectCard = ygopro.StocGameMessage.MsgSelectCard;
...@@ -16,6 +17,7 @@ export default (selectCard: MsgSelectCard, dispatch: AppDispatch) => { ...@@ -16,6 +17,7 @@ export default (selectCard: MsgSelectCard, dispatch: AppDispatch) => {
const cards = selectCard.cards; const cards = selectCard.cards;
dispatch(setCheckCardModalMinMax({ min, max })); dispatch(setCheckCardModalMinMax({ min, max }));
dispatch(setCheckCardModalOnSubmit("sendSelectCardResponse"));
for (const card of cards) { for (const card of cards) {
const tagName = CardZoneToChinese(card.location.location); const tagName = CardZoneToChinese(card.location.location);
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore"; import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { sendSelectChainResponse } from "../../api/ocgcore/ocgHelper";
import {
setCheckCardModalIsOpen,
setCheckCardModalMinMax,
setCheckCardModalOnSubmit,
} from "../../reducers/duel/mod";
import { fetchCheckCardMeta } from "../../reducers/duel/modalSlice";
import { AppDispatch } from "../../store"; import { AppDispatch } from "../../store";
import { CardZoneToChinese } from "./util";
import MsgSelectChain = ygopro.StocGameMessage.MsgSelectChain; import MsgSelectChain = ygopro.StocGameMessage.MsgSelectChain;
export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => { export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => {
...@@ -9,4 +17,81 @@ export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => { ...@@ -9,4 +17,81 @@ export default (selectChain: MsgSelectChain, dispatch: AppDispatch) => {
const hint0 = selectChain.hint0; const hint0 = selectChain.hint0;
const hint1 = selectChain.hint1; const hint1 = selectChain.hint1;
const chains = selectChain.chains; const chains = selectChain.chains;
let handle_flag = 0;
if (!forced) {
// 无强制发动的卡
if (spCount == 0) {
// 无关键卡
if (chains.length == 0) {
// 直接回答
handle_flag = 0;
} else {
// 处理多张
handle_flag = 2;
}
} else {
// 有关键卡
if (chains.length == 0) {
// 根本没卡,直接回答
handle_flag = 0;
} else {
// 处理多张
handle_flag = 2;
}
}
} else {
// 有强制发动的卡
if (chains.length == 1) {
// 只有一个强制发动的连锁项,直接回应
handle_flag = 4;
} else {
// 处理强制发动的卡
handle_flag = 3;
}
}
switch (handle_flag) {
case 0: {
// 直接回答
sendSelectChainResponse(-1);
break;
}
case 2: // 处理多张
case 3: {
// 处理强制发动的卡
// TODO:非强制发动的场景需要支持取消
dispatch(setCheckCardModalMinMax({ min: 1, max: 1 }));
dispatch(setCheckCardModalOnSubmit("sendSelectChainResponse"));
for (const chain of chains) {
const tagName = CardZoneToChinese(chain.location.location);
dispatch(
fetchCheckCardMeta({
controler: chain.location.controler,
tagName,
option: {
code: chain.code,
response: chain.response,
effectDescCode: chain.effect_description,
},
})
);
}
dispatch(setCheckCardModalIsOpen(true));
break;
}
case 4: {
// 有一张强制发动的卡,直接回应
sendSelectChainResponse(chains[0].response);
break;
}
default: {
console.log(`Unhandled flag: ${handle_flag}`);
}
}
}; };
...@@ -4,6 +4,7 @@ import { store } from "../../store"; ...@@ -4,6 +4,7 @@ import { store } from "../../store";
import { import {
selectCheckCardModalIsOpen, selectCheckCardModalIsOpen,
selectCheckCardModalMinMax, selectCheckCardModalMinMax,
selectCheckCardModalOnSubmit,
selectCheckCardModalTags, selectCheckCardModalTags,
} from "../../reducers/duel/modalSlice"; } from "../../reducers/duel/modalSlice";
import { import {
...@@ -12,13 +13,17 @@ import { ...@@ -12,13 +13,17 @@ import {
} from "../../reducers/duel/mod"; } from "../../reducers/duel/mod";
import { Modal, Button, Row, Col, Popover } from "antd"; import { Modal, Button, Row, Col, Popover } from "antd";
import { CheckCard } from "@ant-design/pro-components"; import { CheckCard } from "@ant-design/pro-components";
import { sendSelectCardResponse } from "../../api/ocgcore/ocgHelper"; import {
sendSelectCardResponse,
sendSelectChainResponse,
} from "../../api/ocgcore/ocgHelper";
const CheckCardModal = () => { const CheckCardModal = () => {
const dispatch = store.dispatch; const dispatch = store.dispatch;
const isOpen = useAppSelector(selectCheckCardModalIsOpen); const isOpen = useAppSelector(selectCheckCardModalIsOpen);
const { min, max } = useAppSelector(selectCheckCardModalMinMax); const { min, max } = useAppSelector(selectCheckCardModalMinMax);
const tabs = useAppSelector(selectCheckCardModalTags); const tabs = useAppSelector(selectCheckCardModalTags);
const onSubmit = useAppSelector(selectCheckCardModalOnSubmit);
const [response, setResponse] = useState<number[]>([]); const [response, setResponse] = useState<number[]>([]);
const defaultValue: number[] = []; const defaultValue: number[] = [];
...@@ -31,12 +36,25 @@ const CheckCardModal = () => { ...@@ -31,12 +36,25 @@ const CheckCardModal = () => {
<Button <Button
disabled={response.length < min || response.length > max} disabled={response.length < min || response.length > max}
onClick={() => { onClick={() => {
sendSelectCardResponse(response); switch (onSubmit) {
case "sendSelectChainResponse": {
sendSelectChainResponse(response[0]);
break;
}
case "sendSelectCardResponse": {
sendSelectCardResponse(response);
break;
}
default: {
}
}
dispatch(setCheckCardModalIsOpen(false)); dispatch(setCheckCardModalIsOpen(false));
dispatch(resetCheckCardModal()); dispatch(resetCheckCardModal());
}} }}
> >
summit submit
</Button> </Button>
} }
width={800} width={800}
......
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