Push full flight information in the event stream.

https://github.com/dcs-liberation/dcs_liberation/issues/2263
This commit is contained in:
Raffson 2022-06-25 23:09:51 +02:00 committed by GitHub
parent 289545e777
commit d578e763c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 32 deletions

View File

@ -6,10 +6,10 @@ import { endCombat, newCombat, updateCombat } from "./combatSlice";
import { updateControlPoint } from "./controlPointsSlice"; import { updateControlPoint } from "./controlPointsSlice";
import { import {
deselectFlight, deselectFlight,
registerFlight, registerFlights,
selectFlight, selectFlight,
unregisterFlight, unregisterFlights,
updateFlight, updateFlights,
updateFlightPositions, updateFlightPositions,
} from "./flightsSlice"; } from "./flightsSlice";
import { import {
@ -43,7 +43,7 @@ interface GameUpdateEvents {
updated_unculled_zones: UnculledZone[]; updated_unculled_zones: UnculledZone[];
threat_zones_updated: boolean; threat_zones_updated: boolean;
new_flights: Flight[]; new_flights: Flight[];
updated_flights: string[]; updated_flights: Flight[];
deleted_flights: string[]; deleted_flights: string[];
selected_flight: string | null; selected_flight: string | null;
deselected_flight: boolean; deselected_flight: boolean;
@ -103,19 +103,16 @@ export const handleStreamedEvents = (
); );
} }
for (const flight of events.new_flights) { if (events.new_flights.length > 0) {
dispatch(registerFlight(flight)); dispatch(registerFlights(events.new_flights));
} }
for (const id of events.updated_flights) { if (events.updated_flights.length > 0) {
backend.get(`/flights/${id}?with_waypoints=true`).then((response) => { dispatch(updateFlights(events.updated_flights));
const flight = response.data as Flight;
dispatch(updateFlight(flight));
});
} }
for (const id of events.deleted_flights) { if (events.deleted_flights.length > 0) {
dispatch(unregisterFlight(id)); dispatch(unregisterFlights(events.deleted_flights));
} }
if (events.deselected_flight) { if (events.deselected_flight) {

View File

@ -18,20 +18,23 @@ export const flightsSlice = createSlice({
name: "flights", name: "flights",
initialState, initialState,
reducers: { reducers: {
registerFlight: (state, action: PayloadAction<Flight>) => { registerFlights: (state, action: PayloadAction<Flight[]>) => {
const flight = action.payload; for (const flight of action.payload) {
if (flight.id in state.flights) { if (flight.id in state.flights) {
console.log(`Overriding flight with ID: ${flight.id}`); console.log(`Overriding flight with ID: ${flight.id}`);
}
state.flights[flight.id] = flight;
} }
state.flights[flight.id] = flight;
}, },
unregisterFlight: (state, action: PayloadAction<string>) => { unregisterFlights: (state, action: PayloadAction<string[]>) => {
const id = action.payload; for (const id of action.payload) {
delete state.flights[id]; delete state.flights[id];
}
}, },
updateFlight: (state, action: PayloadAction<Flight>) => { updateFlights: (state, action: PayloadAction<Flight[]>) => {
const flight = action.payload; for (const flight of action.payload) {
state.flights[flight.id] = flight; state.flights[flight.id] = flight;
}
}, },
deselectFlight: (state) => { deselectFlight: (state) => {
state.selected = null; state.selected = null;
@ -67,9 +70,9 @@ export const flightsSlice = createSlice({
}); });
export const { export const {
registerFlight, registerFlights,
unregisterFlight, unregisterFlights,
updateFlight, updateFlights,
deselectFlight, deselectFlight,
selectFlight, selectFlight,
updateFlightPositions, updateFlightPositions,

View File

@ -25,7 +25,7 @@ class GameUpdateEventsJs(BaseModel):
updated_unculled_zones: list[UnculledZoneJs] updated_unculled_zones: list[UnculledZoneJs]
threat_zones_updated: bool threat_zones_updated: bool
new_flights: list[FlightJs] new_flights: list[FlightJs]
updated_flights: set[UUID] updated_flights: list[FlightJs]
deleted_flights: set[UUID] deleted_flights: set[UUID]
selected_flight: UUID | None selected_flight: UUID | None
deselected_flight: bool deselected_flight: bool
@ -71,7 +71,10 @@ class GameUpdateEventsJs(BaseModel):
new_flights=[ new_flights=[
FlightJs.for_flight(f, with_waypoints=True) for f in events.new_flights FlightJs.for_flight(f, with_waypoints=True) for f in events.new_flights
], ],
updated_flights=events.updated_flights, updated_flights=[
FlightJs.for_flight(f, with_waypoints=True)
for f in events.updated_flights
],
deleted_flights=events.deleted_flights, deleted_flights=events.deleted_flights,
selected_flight=events.selected_flight, selected_flight=events.selected_flight,
deselected_flight=events.deselected_flight, deselected_flight=events.deselected_flight,

View File

@ -25,7 +25,7 @@ class GameUpdateEvents:
unculled_zones_updated: list[Point] = field(default_factory=list) unculled_zones_updated: list[Point] = field(default_factory=list)
threat_zones_updated: bool = False threat_zones_updated: bool = False
new_flights: set[Flight] = field(default_factory=set) new_flights: set[Flight] = field(default_factory=set)
updated_flights: set[UUID] = field(default_factory=set) updated_flights: set[Flight] = field(default_factory=set)
deleted_flights: set[UUID] = field(default_factory=set) deleted_flights: set[UUID] = field(default_factory=set)
selected_flight: UUID | None = None selected_flight: UUID | None = None
deselected_flight: bool = False deselected_flight: bool = False
@ -81,11 +81,11 @@ class GameUpdateEvents:
return self return self
def update_flight(self, flight: Flight) -> GameUpdateEvents: def update_flight(self, flight: Flight) -> GameUpdateEvents:
self.updated_flights.add(flight.id) self.updated_flights.add(flight)
return self return self
def update_flights_in_package(self, package: Package) -> GameUpdateEvents: def update_flights_in_package(self, package: Package) -> GameUpdateEvents:
self.updated_flights.update({f.id for f in package.flights}) self.updated_flights.update({f for f in package.flights})
return self return self
def delete_flight(self, flight: Flight) -> GameUpdateEvents: def delete_flight(self, flight: Flight) -> GameUpdateEvents: