mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 19:06:48 +00:00
275fd0dccc
## Description: This is a refactor to simplify config handling. Replaces the per-environment DevConfig/PreprodConfig/ProdConfig class hierarchy with two static classes: ClientEnv (browser main thread, reads from window.BOOTSTRAP_CONFIG) and ServerEnv (Node server, reads from process.env). The four config classes are deleted, the abstract DefaultServerConfig is gone, and DefaultConfig is renamed to Config. The values that flow server → client (gameEnv, numWorkers, turnstileSiteKey, jwtAudience, instanceId) used to be baked into the hardcoded per-env classes. They're now real env vars on the server, embedded into a single window.BOOTSTRAP_CONFIG object in index.html at request time (alongside the existing gitCommit/assetManifest/cdnBase globals, which moved into the same object), and read back by ClientEnv on the client. The dev defaults previously hidden inside DevServerConfig are now explicit in start:server-dev (NUM_WORKERS=2, TURNSTILE_SITE_KEY=1x..., JWT_AUDIENCE=localhost, etc.) and in vite.config.ts's html plugin inject.data. Production deploys plumb NUM_WORKERS and TURNSTILE_SITE_KEY through deploy.yml (GitHub vars) into the remote env file; JWT_AUDIENCE is derived from DOMAIN in deploy.sh. The dynamic /api/instance endpoint is gone — INSTANCE_ID rides along in BOOTSTRAP_CONFIG now. ServerEnv is the only thing server code touches; ClientEnv is browser-only. The two classes have intentional overlap (env, numWorkers, jwtIssuer, gameCreationRate, workerIndex, etc.) since they derive identical logic from different sources — there's a TODO in each to consolidate via a shared helper later. The game-logic Config no longer stores a ServerConfig/ClientEnv reference and its serverConfig() getter is gone; the one caller (MultiTabModal) now reads ClientEnv.env() directly. Worker init no longer carries server-config values since nothing in the worker actually reads them. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: evan
123 lines
2.6 KiB
TypeScript
123 lines
2.6 KiB
TypeScript
import { Config, NukeMagnitude } from "../../src/core/configuration/Config";
|
|
import {
|
|
Game,
|
|
Player,
|
|
TerraNullius,
|
|
Tick,
|
|
UnitType,
|
|
} from "../../src/core/game/Game";
|
|
import { TileRef } from "../../src/core/game/GameMap";
|
|
|
|
export class TestConfig extends Config {
|
|
private _proximityBonusPortsNb: number = 0;
|
|
private _defaultNukeSpeed: number = 4;
|
|
private _spawnImmunityDuration: number = 0;
|
|
private _nationSpawnImmunityDuration: number = 0;
|
|
|
|
disableNavMesh(): boolean {
|
|
return this.gameConfig().disableNavMesh ?? true;
|
|
}
|
|
|
|
radiusPortSpawn(): number {
|
|
return 1;
|
|
}
|
|
|
|
proximityBonusPortsNb(totalPorts: number): number {
|
|
return this._proximityBonusPortsNb;
|
|
}
|
|
|
|
// Specific to TestConfig
|
|
setProximityBonusPortsNb(nb: number): void {
|
|
this._proximityBonusPortsNb = nb;
|
|
}
|
|
|
|
nukeMagnitudes(_: UnitType): NukeMagnitude {
|
|
return { inner: 1, outer: 1 };
|
|
}
|
|
|
|
setDefaultNukeSpeed(speed: number): void {
|
|
this._defaultNukeSpeed = speed;
|
|
}
|
|
|
|
defaultNukeSpeed(): number {
|
|
return this._defaultNukeSpeed;
|
|
}
|
|
|
|
defaultNukeTargetableRange(): number {
|
|
return 20;
|
|
}
|
|
|
|
deletionMarkDuration(): number {
|
|
return 5;
|
|
}
|
|
|
|
defaultSamRange(): number {
|
|
return 20;
|
|
}
|
|
|
|
samRange(level: number): number {
|
|
return 20;
|
|
}
|
|
|
|
setSpawnImmunityDuration(duration: Tick) {
|
|
this._spawnImmunityDuration = duration;
|
|
}
|
|
|
|
spawnImmunityDuration(): Tick {
|
|
return this._spawnImmunityDuration;
|
|
}
|
|
|
|
setNationSpawnImmunityDuration(duration: Tick) {
|
|
this._nationSpawnImmunityDuration = duration;
|
|
}
|
|
|
|
nationSpawnImmunityDuration(): Tick {
|
|
return this._nationSpawnImmunityDuration;
|
|
}
|
|
|
|
attackLogic(
|
|
gm: Game,
|
|
attackTroops: number,
|
|
attacker: Player,
|
|
defender: Player | TerraNullius,
|
|
tileToConquer: TileRef,
|
|
): {
|
|
attackerTroopLoss: number;
|
|
defenderTroopLoss: number;
|
|
tilesPerTickUsed: number;
|
|
} {
|
|
return { attackerTroopLoss: 1, defenderTroopLoss: 1, tilesPerTickUsed: 1 };
|
|
}
|
|
|
|
attackTilesPerTick(
|
|
attackTroops: number,
|
|
attacker: Player,
|
|
defender: Player | TerraNullius,
|
|
numAdjacentTilesWithEnemy: number,
|
|
): number {
|
|
return 1;
|
|
}
|
|
}
|
|
export class UseRealAttackLogic extends TestConfig {
|
|
attackLogic(
|
|
gm: Game,
|
|
attackTroops: number,
|
|
attacker: Player,
|
|
defender: Player | TerraNullius,
|
|
tileToConquer: TileRef,
|
|
): {
|
|
attackerTroopLoss: number;
|
|
defenderTroopLoss: number;
|
|
tilesPerTickUsed: number;
|
|
} {
|
|
return Config.prototype.attackLogic.call(
|
|
this,
|
|
gm,
|
|
attackTroops,
|
|
attacker,
|
|
defender,
|
|
tileToConquer,
|
|
);
|
|
}
|
|
}
|