Files
OpenFrontIO/src/core/configuration/Config.ts
T
2024-12-03 07:53:18 -08:00

77 lines
2.3 KiB
TypeScript

import { Gold, Player, PlayerID, PlayerInfo, TerraNullius, Tick, Tile, Unit, UnitInfo, UnitType } from "../game/Game";
import { Colord, colord } from "colord";
import { devConfig } from "./DevConfig";
import { defaultConfig } from "./DefaultConfig";
import { GameID } from "../Schemas";
export enum GameEnv {
Dev,
Prod
}
export function getConfig(): Config {
// TODO: 'prod' not found in prod env
if (process.env.GAME_ENV == 'dev') {
console.log('Using dev config')
return devConfig
} else {
console.log('Using prod config')
return defaultConfig
}
}
export function getGameEnv(): GameEnv {
return GameEnv.Prod
}
export interface Config {
theme(): Theme;
percentageTilesOwnedToWin(): number
turnIntervalMs(): number
gameCreationRate(): number
lobbyLifetime(): number
numBots(): number
spawnNPCs(): boolean
numSpawnPhaseTurns(): number
startManpower(playerInfo: PlayerInfo): number
populationIncreaseRate(player: Player): number
goldAdditionRate(player: Player): number
troopAdjustmentRate(player: Player): number
attackTilesPerTick(attacker: Player, defender: Player | TerraNullius, numAdjacentTilesWithEnemy: number): number
attackLogic(attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: Tile): {
attackerTroopLoss: number,
defenderTroopLoss: number,
tilesPerTickUsed: number
}
attackAmount(attacker: Player, defender: Player | TerraNullius): number
maxPopulation(player: Player): number
boatAttackAmount(attacker: Player, defender: Player | TerraNullius): number
boatMaxDistance(): number
boatMaxNumber(): number
allianceDuration(): Tick
allianceRequestCooldown(): Tick
targetDuration(): Tick
targetCooldown(): Tick
emojiMessageCooldown(): Tick
emojiMessageDuration(): Tick
donateCooldown(): Tick
defaultDonationAmount(sender: Player): number
unitInfo(type: UnitType): UnitInfo
tradeShipGold(src: Unit, dst: Unit): Gold
tradeShipSpawnRate(): number
defensePostRange(): number
defensePostDefenseBonus(): number
}
export interface Theme {
playerInfoColor(id: PlayerID): Colord;
territoryColor(playerInfo: PlayerInfo): Colord;
borderColor(playerInfo: PlayerInfo): Colord;
defendedBorderColor(playerInfo: PlayerInfo): Colord;
terrainColor(tile: Tile): Colord;
backgroundColor(): Colord;
font(): string;
}