Files
space-game/apps/viewer/src/ui/stores/gmStore.ts

60 lines
2.0 KiB
TypeScript

import { defineStore } from "pinia";
import type { ShipSnapshot } from "../../contractsShips";
import type { StationSnapshot } from "../../contractsInfrastructure";
import type { FactionSnapshot } from "../../contractsFactions";
import type { MarketOrderSnapshot } from "../../contractsEconomy";
import type { GeopoliticalStateSnapshot } from "../../contractsGeopolitics";
import type { SystemSnapshot } from "../../contractsCelestial";
export const useGmStore = defineStore("gm", {
state: () => ({
systems: [] as SystemSnapshot[],
ships: [] as ShipSnapshot[],
stations: [] as StationSnapshot[],
factions: [] as FactionSnapshot[],
marketOrders: [] as MarketOrderSnapshot[],
geopolitics: null as GeopoliticalStateSnapshot | null,
}),
actions: {
updateWorld(
systems: SystemSnapshot[],
ships: ShipSnapshot[],
stations: StationSnapshot[],
factions: FactionSnapshot[],
marketOrders: MarketOrderSnapshot[],
geopolitics: GeopoliticalStateSnapshot | null,
) {
this.systems = systems;
this.ships = ships;
this.stations = stations;
this.factions = factions;
this.marketOrders = marketOrders;
this.geopolitics = geopolitics;
},
upsertShip(ship: ShipSnapshot) {
const index = this.ships.findIndex((candidate) => candidate.id === ship.id);
if (index >= 0) {
this.ships.splice(index, 1, ship);
return;
}
this.ships.push(ship);
},
upsertFaction(faction: FactionSnapshot) {
const index = this.factions.findIndex((candidate) => candidate.id === faction.id);
if (index >= 0) {
this.factions.splice(index, 1, faction);
return;
}
this.factions.push(faction);
},
upsertStation(station: StationSnapshot) {
const index = this.stations.findIndex((candidate) => candidate.id === station.id);
if (index >= 0) {
this.stations.splice(index, 1, station);
return;
}
this.stations.push(station);
},
},
});