import { AvailableBuilding, Building, Building as BuildingEnum, Expansion, Faction, isShip, ShipAction, } from "@gaia-project/engine"; import { colorCodes } from "../logic/color-codes"; export const buildingData: { [key in Building]: { name: string; color: string } } = { [Building.Mine]: { name: "Mine", color: "--res-ore", }, [Building.TradingStation]: { name: "Trading Station", color: "--res-credit", }, [Building.ResearchLab]: { name: "Research Lab", color: "--res-knowledge", }, [Building.PlanetaryInstitute]: { name: "Planetary Institute", color: "--current-round", }, [Building.Academy1]: { name: "Knowledge Academy", color: "--rt-terra", }, [Building.Academy2]: { name: "Academy 2", color: "--res-qic", }, [Building.GaiaFormer]: { name: "Gaia Former", color: "--gaia", }, [Building.SpaceStation]: { name: "Space Station", color: "--current-round", }, [Building.Colony]: { name: "Colony", color: "--rt-nav", }, [Building.CustomsPost]: { name: "Customs Post", color: "--res-credit", }, [Building.ColonyShip]: { name: "Colony Ship", color: "--rt-gaia", }, [Building.ConstructionShip]: { name: "Construction Ship", color: "--current-round", }, [Building.ResearchShip]: { name: "Research Ship", color: "--current-round", }, [Building.TradeShip]: { name: "Trade Ship", color: colorCodes.tradeShip.color, }, [Building.Scout]: { name: "Scout", color: "--current-round", }, [Building.Frigate]: { name: "Frigate", color: "--current-round", }, [Building.BattleShip]: { name: "Battle Ship", color: "--current-round", }, }; export function allBuildings(expansion: Expansion, gaiaFormer: boolean) { return Building.values(expansion).filter( (bld) => (bld !== Building.GaiaFormer || gaiaFormer) && bld !== Building.SpaceStation ); } export function buildingName(building: Building, faction: Faction): string { if (building === Building.Academy2 && faction != null) { return faction == Faction.BalTaks ? "Credit Academy" : "QIC Academy"; } return buildingData[building].name; } export function shipLetter(building: BuildingEnum): string { switch (building) { case BuildingEnum.ColonyShip: return "L"; case BuildingEnum.TradeShip: return "T"; case BuildingEnum.ConstructionShip: return "C"; case BuildingEnum.ResearchShip: return "R"; case BuildingEnum.Scout: return "S"; case BuildingEnum.Frigate: return "F"; case BuildingEnum.BattleShip: return "B"; } } export function shipActionName(action: ShipAction): string { switch (action) { case ShipAction.Nothing: return "Decline"; case ShipAction.BuildColony: return "Build Colony"; case ShipAction.Trade: return "Trade"; } } export function buildingShortcut(building: Building, faction?: Faction): string { if (isShip(building)) { return shipLetter(building).toLowerCase(); } switch (building) { case Building.Mine: return "m"; case Building.Academy1: if (faction == null) { return "1"; } return "k"; case Building.Academy2: if (faction == null) { return "2"; } return faction == Faction.BalTaks ? "c" : "q"; case Building.TradingStation: return "t"; case Building.ResearchLab: return "l"; case Building.PlanetaryInstitute: return "i"; case Building.GaiaFormer: return "g"; case Building.SpaceStation: return colorCodes.spaceStation.shortcut; case Building.Colony: return "c"; case Building.CustomsPost: return "u"; } } export function availableBuildingShortcut(b: AvailableBuilding, faction: Faction): string { if (b.downgrade) { return "d"; } const building = b.building; if (b.upgrade && building == Building.Mine) { return "u"; } return buildingShortcut(building, faction); }