Commit 8e8baec0 authored by Chunchi Che's avatar Chunchi Che

add updateHp service

parent 723f6bfa
Pipeline #20538 passed with stages
in 6 minutes and 23 seconds
import { PayloadAction, CaseReducer } from "@reduxjs/toolkit"; import { PayloadAction, CaseReducer } from "@reduxjs/toolkit";
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { RootState } from "../../store"; import { RootState } from "../../store";
import { DuelState } from "./mod"; import { DuelState } from "./mod";
import { judgeSelf } from "./util"; import { judgeSelf } from "./util";
import MsgUpdateHp = ygopro.StocGameMessage.MsgUpdateHp;
export interface InitInfo { export interface InitInfo {
masterRule?: string; masterRule?: string;
...@@ -25,5 +27,32 @@ export const infoInitImpl: CaseReducer< ...@@ -25,5 +27,32 @@ export const infoInitImpl: CaseReducer<
} }
}; };
export const updateHpImpl: CaseReducer<
DuelState,
PayloadAction<ygopro.StocGameMessage.MsgUpdateHp>
> = (state, action) => {
const player = action.payload.player;
const actionType = action.payload.type_;
const value = action.payload.value;
const info = judgeSelf(player, state) ? state.meInitInfo : state.opInitInfo;
if (info) {
switch (actionType) {
case MsgUpdateHp.ActionType.DAMAGE: {
info.life = info.life - value;
break;
}
case MsgUpdateHp.ActionType.RECOVER: {
info.life = info.life + value;
break;
}
default: {
break;
}
}
}
};
export const selectMeInitInfo = (state: RootState) => state.duel.meInitInfo; export const selectMeInitInfo = (state: RootState) => state.duel.meInitInfo;
export const selectOpInitInfo = (state: RootState) => state.duel.opInitInfo; export const selectOpInitInfo = (state: RootState) => state.duel.opInitInfo;
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* */ * */
import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { InitInfo, infoInitImpl } from "./initInfoSlice"; import { InitInfo, infoInitImpl, updateHpImpl } from "./initInfoSlice";
import { TimeLimit, updateTimeLimitImpl } from "./timeLimit"; import { TimeLimit, updateTimeLimitImpl } from "./timeLimit";
import { import {
HandState, HandState,
...@@ -170,6 +170,7 @@ const duelSlice = createSlice({ ...@@ -170,6 +170,7 @@ const duelSlice = createSlice({
state.selfType = action.payload; state.selfType = action.payload;
}, },
infoInit: infoInitImpl, infoInit: infoInitImpl,
updateHp: updateHpImpl,
updateTurn: newTurnImpl, updateTurn: newTurnImpl,
updateTimeLimit: updateTimeLimitImpl, updateTimeLimit: updateTimeLimitImpl,
...@@ -268,6 +269,7 @@ const duelSlice = createSlice({ ...@@ -268,6 +269,7 @@ const duelSlice = createSlice({
export const { export const {
setSelfType, setSelfType,
infoInit, infoInit,
updateHp,
updateTurn, updateTurn,
updatePhase, updatePhase,
setEnableBp, setEnableBp,
......
...@@ -18,6 +18,7 @@ import onMsgSelectBattleCmd from "./selectBattleCmd"; ...@@ -18,6 +18,7 @@ import onMsgSelectBattleCmd from "./selectBattleCmd";
import onMsgPosChange from "./posChange"; import onMsgPosChange from "./posChange";
import onMsgSelectUnselectCard from "./selectUnselectCard"; import onMsgSelectUnselectCard from "./selectUnselectCard";
import onMsgSelectYesNo from "./selectYesNo"; import onMsgSelectYesNo from "./selectYesNo";
import onMsgUpdateHp from "./updateHp";
export default function handleGameMsg(pb: ygopro.YgoStocMsg) { export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch; const dispatch = store.dispatch;
...@@ -114,6 +115,11 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -114,6 +115,11 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "update_hp": {
onMsgUpdateHp(msg.update_hp, dispatch);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { updateHp } from "../../reducers/duel/mod";
import { AppDispatch } from "../../store";
import MsgUpdateHp = ygopro.StocGameMessage.MsgUpdateHp;
export default (msgUpdateHp: MsgUpdateHp, dispatch: AppDispatch) => {
dispatch(updateHp(msgUpdateHp));
};
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