From 06a9a925170c7702dd4ceb81033f4f11d6972981 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 26 May 2023 10:13:21 -0400 Subject: [PATCH] galaxies --- packages/core/data/index.ts | 2 +- packages/core/data/planets.ts | 17 +++++++++ packages/core/galaxy.ts | 66 +++++++++++++++++++++-------------- packages/core/types/galaxy.ts | 3 +- 4 files changed, 60 insertions(+), 28 deletions(-) diff --git a/packages/core/data/index.ts b/packages/core/data/index.ts index 4359f27..c9a4827 100644 --- a/packages/core/data/index.ts +++ b/packages/core/data/index.ts @@ -9,4 +9,4 @@ const DefaultSetupInfo: SetupInfo = { systems: SystemData, }; -export { FactionData, PlanetData, SystemData }; +export { FactionData, PlanetData, SystemData, DefaultSetupInfo }; diff --git a/packages/core/data/planets.ts b/packages/core/data/planets.ts index 86b3bd5..7455010 100644 --- a/packages/core/data/planets.ts +++ b/packages/core/data/planets.ts @@ -872,6 +872,23 @@ const PlanetData: Planet[] = [ planetType: PlanetType.Legendary, trait: Trait.Cultural, }, + { + systemId: -1, + planetId: 100, + name: "Mirage", + resources: 1, + influence: 2, + planetType: PlanetType.Legendary, + trait: Trait.Cultural, + }, + { + systemId: -1, + planetId: 101, + name: "Custodia Vigilia", + resources: 2, + influence: 3, + planetType: PlanetType.Legendary, + }, ]; export default PlanetData; diff --git a/packages/core/galaxy.ts b/packages/core/galaxy.ts index 835e534..2410576 100644 --- a/packages/core/galaxy.ts +++ b/packages/core/galaxy.ts @@ -1,3 +1,5 @@ +import { DefaultSetupInfo } from "./data"; +import { SystemType, UniqueTile } from "./types/const"; import { GalaxyCreationSimpleParameters, GalaxyCreationSimpleSixPlayerParameters, @@ -10,6 +12,7 @@ import { SecretGalaxy, UnitTechnologyI, } from "./types/galaxy"; +import { SetupInfo } from "./types/static"; const defaultReinforcements: Reinforcements = { tokens: 8, @@ -160,7 +163,6 @@ export function createSixPlayerGalaxy( }); let map = ttsStringtoTilePositions(creation.ttsString); if (players.some((x) => x.factionId === 7)) { - // TODO: make ghost placement nice. map = map.concat({ position: { x: 1, y: 1 }, systemId: 51, @@ -182,6 +184,8 @@ export function createGalaxy(creation: GalaxyCreationSimpleParameters): { publicGalaxy: PublicGalaxy; secretGalaxy: SecretGalaxy; } { + const setupInfo: SetupInfo = DefaultSetupInfo; + const secretGalaxy: SecretGalaxy = { actionCardDeckIds: [], agendaDeckIds: [], @@ -243,40 +247,50 @@ export function createGalaxy(creation: GalaxyCreationSimpleParameters): { .sort((a, b) => a.speakerOrder - b.speakerOrder) .map((x) => x.playerId); - // let systems = {}; - // creation.map.forEach((x) => { - // systems[x.systemId] = {}; - // }); - - let publicGalaxy: PublicGalaxy = { - activeLawIds: [], - forces: {}, - initiativeOrder: [], - planets: {}, - players: Object.fromEntries(players.map((x) => [x.playerId, x])), - speakerOrder: speakerOrder, - strategyCards: {}, - systems: Object.fromEntries( - creation.map.map((x) => [ + let systems = Object.fromEntries( + creation.map.map((x) => { + const system = setupInfo.systems.find((y) => y.systemId === x.systemId); + if (!system) return []; + const planets = setupInfo.planets.filter( + (y) => y.systemId === x.systemId + ); + return [ x.systemId, { systemId: x.systemId, position: x.position, adjacencies: [], neighbors: [], - adjacencyOverride: [], canOccupy: true, - wormholes: [], - homeSystem: false, - legendary: false, - mecatolRex: false, - emptySystem: false, - anomalies: [], - planetIds: [], + wormholes: system.wormholes, + homeSystem: + !system.emptySystem && system.systemType === SystemType.Green, + legendary: + system.unique === UniqueTile.MalliceFlippedSide || + system.unique === UniqueTile.MalliceStartingSide || + system.unique === UniqueTile.HopesEnd || + system.unique === UniqueTile.Mirage || + system.unique === UniqueTile.Primor, + mecatolRex: system.unique === UniqueTile.MecatolRex, + emptySystem: system.emptySystem, + anomalies: system.anomaly ? [system.anomaly] : [], + planetIds: planets.map((y) => y.planetId), tokens: [], + frontierToken: system.emptySystem, }, - ]) - ), + ]; + }) + ); + + let publicGalaxy: PublicGalaxy = { + activeLawIds: [], + forces: {}, + initiativeOrder: [], + planets: {}, + players: Object.fromEntries(players.map((x) => [x.playerId, x])), + speakerOrder: speakerOrder, + strategyCards: {}, + systems: systems, }; return { diff --git a/packages/core/types/galaxy.ts b/packages/core/types/galaxy.ts index 7461954..45bdc7f 100644 --- a/packages/core/types/galaxy.ts +++ b/packages/core/types/galaxy.ts @@ -34,10 +34,11 @@ export interface SystemI { /** Virtual adjacencies are not supportable for movement purposes but support neighbors. */ neighbors: number[]; /** Some factions may do weird things, cough cough GHOSTS! */ - adjacencyOverride: AdjacencyOverride[]; + // adjacencyOverride: AdjacencyOverride[]; /** Default should be true */ canOccupy: boolean; wormholes: Wormhole[]; + frontierToken: boolean; homeSystem: boolean; legendary: boolean; mecatolRex: boolean;