Fix combat updates in the front-end.

`setCombat` was never called, so old combats were never cleared on turn
end, game load, or unload.

https://github.com/dcs-liberation/dcs_liberation/issues/2253
This commit is contained in:
Raffson 2022-07-06 22:36:15 +02:00 committed by GitHub
parent 9823f7b96f
commit 7355162d80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 19 deletions

View File

@ -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<Combat[]>) => {
state.combat = {};
newCombats: (state, action: PayloadAction<Combat[]>) => {
for (const combat of action.payload) {
state.combat[combat.id] = combat;
}
},
newCombat: (state, action: PayloadAction<Combat>) => {
const combat = action.payload;
state.combat[combat.id] = combat;
updateCombats: (state, action: PayloadAction<Combat[]>) => {
for (const combat of action.payload) {
state.combat[combat.id] = combat;
}
},
updateCombat: (state, action: PayloadAction<Combat>) => {
const combat = action.payload;
state.combat[combat.id] = combat;
},
endCombat: (state, action: PayloadAction<string>) => {
delete state.combat[action.payload];
endCombats: (state, action: PayloadAction<string[]>) => {
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;

View File

@ -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) {