Sync MapZones when changing campaigns

This commit is contained in:
Raffson
2024-05-18 21:11:28 +02:00
parent 0f9781ff30
commit cbd90a5e36
6 changed files with 64 additions and 11 deletions

View File

@@ -466,6 +466,7 @@ export type Game = {
navmeshes: NavMeshes;
map_center?: LatLng;
unculled_zones: UnculledZone[];
map_zones: MapZones;
};
export type MapZones = {
inclusion: LatLng[][][];

View File

@@ -0,0 +1,35 @@
import { RootState } from "../app/store";
import { gameLoaded, gameUnloaded } from "./actions";
import { createSlice } from "@reduxjs/toolkit";
import { LatLngLiteral } from "leaflet";
import { MapZones } from "./_liberationApi";
interface MapZonesState {
mapZones: MapZones;
}
const initialState: MapZonesState = {
mapZones: { inclusion: [], exclusion: [], sea: [] },
};
const mapZonesSlice = createSlice({
name: "map",
initialState: initialState,
reducers: {},
extraReducers: (builder) => {
builder.addCase(gameLoaded, (state, action) => {
if (action.payload != null) {
state.mapZones.exclusion = action.payload.map_zones.exclusion;
state.mapZones.inclusion = action.payload.map_zones.inclusion;
state.mapZones.sea = action.payload.map_zones.sea;
}
});
builder.addCase(gameUnloaded, (state) => {
state.mapZones = initialState.mapZones;
});
},
});
export const selectMapZones = (state: RootState) => state.mapZones;
export default mapZonesSlice.reducer;