Files
OpenFrontIO/src/core/configuration/Config.ts
T
2024-09-22 19:54:12 -07:00

62 lines
1.7 KiB
TypeScript

import {Player, PlayerID, PlayerInfo, TerraNullius, Tick, Tile} 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
numFakeHumans(gameID: GameID): number
numSpawnPhaseTurns(): number
startTroops(playerInfo: PlayerInfo): number
troopAdditionRate(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
maxTroops(player: Player): number
boatAttackAmount(attacker: Player, defender: Player | TerraNullius): number
boatMaxDistance(): number
boatMaxNumber(): number
allianceDuration(): Tick
}
export interface Theme {
playerInfoColor(id: PlayerID): Colord;
territoryColor(playerInfo: PlayerInfo): Colord;
borderColor(playerInfo: PlayerInfo): Colord;
terrainColor(tile: Tile): Colord;
backgroundColor(): Colord;
font(): string;
}