60 lines
2.0 KiB
TypeScript
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);
|
|
},
|
|
},
|
|
});
|