diff --git a/client/src/api/combatSlice.ts b/client/src/api/combatSlice.ts index 2e1f4c90..66d0ed70 100644 --- a/client/src/api/combatSlice.ts +++ b/client/src/api/combatSlice.ts @@ -1,4 +1,5 @@ import { RootState } from "../app/store"; +import { gameLoaded, gameUnloaded } from "./actions"; import Combat from "./combat"; import { PayloadAction, createSlice } from "@reduxjs/toolkit"; @@ -14,27 +15,33 @@ export const combatSlice = createSlice({ name: "combat", initialState, reducers: { - setCombat: (state, action: PayloadAction) => { - state.combat = {}; + newCombats: (state, action: PayloadAction) => { for (const combat of action.payload) { state.combat[combat.id] = combat; } }, - newCombat: (state, action: PayloadAction) => { - const combat = action.payload; - state.combat[combat.id] = combat; + updateCombats: (state, action: PayloadAction) => { + for (const combat of action.payload) { + state.combat[combat.id] = combat; + } }, - updateCombat: (state, action: PayloadAction) => { - const combat = action.payload; - state.combat[combat.id] = combat; - }, - endCombat: (state, action: PayloadAction) => { - delete state.combat[action.payload]; + endCombats: (state, action: PayloadAction) => { + for (const cID of action.payload) { + delete state.combat[cID]; + } }, }, + extraReducers: (builder) => { + builder.addCase(gameLoaded, (state, action) => { + state.combat = {}; + }); + builder.addCase(gameUnloaded, (state) => { + state.combat = {}; + }); + }, }); -export const { setCombat, newCombat, updateCombat, endCombat } = +export const { newCombats, updateCombats, endCombats } = combatSlice.actions; export const selectCombat = (state: RootState) => state.combat; diff --git a/client/src/api/eventstream.tsx b/client/src/api/eventstream.tsx index 4dfb1a5e..b67e78e7 100644 --- a/client/src/api/eventstream.tsx +++ b/client/src/api/eventstream.tsx @@ -1,7 +1,7 @@ import { AppDispatch } from "../app/store"; import { gameUnloaded } from "./actions"; import Combat from "./combat"; -import { endCombat, newCombat, updateCombat } from "./combatSlice"; +import { endCombats, newCombats, updateCombats } from "./combatSlice"; import { updateControlPoint } from "./controlPointsSlice"; import { deselectFlight, @@ -67,16 +67,16 @@ export const handleStreamedEvents = ( ); } - for (const combat of events.new_combats) { - dispatch(newCombat(combat)); + if (events.new_combats.length > 0) { + dispatch(newCombats(events.new_combats)); } - for (const combat of events.updated_combats) { - dispatch(updateCombat(combat)); + if (events.updated_combats.length > 0) { + dispatch(updateCombats(events.updated_combats)); } - for (const id of events.ended_combats) { - dispatch(endCombat(id)); + if (events.ended_combats.length > 0) { + dispatch(endCombats(events.ended_combats)); } if (Object.keys(events.navmesh_updates).length > 0) {