Files
dota_factory/src/lib/config/WorldConfig.h
2026-06-05 20:09:20 +02:00

58 lines
1.9 KiB
C

#pragma once
#include "Formula.h"
// Region widths are in tiles (REQ-GW-REGIONS).
struct WorldRegions
{
int asteroidWidth;
int playerBufferWidth;
int contestZoneWidth;
int enemyBufferWidth;
};
// Asteroid expansion (REQ-EXP-UNLOCK, REQ-EXP-COST).
struct WorldExpansion
{
int columnsPerExpansion;
int costBuildingBlocks;
};
// Push effects (REQ-PSH-*, REQ-WAV-BOSS-ADVANCE).
struct WorldPush
{
int pushExpandColumns;
double bossAdvanceSeconds; // boss countdown advanced by this much per push
};
// Wave scheduling (REQ-WAV-*).
struct WorldWaves
{
Formula threatRateFormula; // threat/s as a function of boss wave counter x
Formula shipLevelFormula; // enemy ship level as a function of boss wave counter x
double gapMinSeconds;
double gapMaxSeconds;
double spawnDurationSeconds;
double bossCountdownSeconds; // duration of each boss cycle (REQ-WAV-BOSS-COUNTDOWN)
double bossThreatDurationSeconds; // boss budget = rate * this (REQ-WAV-BOSS-TRIGGER)
double bossQuietBeforeSeconds; // suppress normal waves this long before boss (REQ-WAV-QUIET)
double bossQuietAfterSeconds; // suppress normal waves this long after boss (REQ-WAV-QUIET)
};
struct WorldConfig
{
int heightTiles; // REQ-GW-HEIGHT
int refundPercentage; // REQ-BLD-DEMOLISH
int startingBuildingBlocks; // REQ-HQ-STARTING-BLOCKS
double scrapDespawnSeconds; // REQ-RES-SCRAP-DROP
double tileSize_m; // metres per tile (REQ-GW-TILE-SIZE)
double beltSpeed_tps; // REQ-GW-BELT-SPEED (tiles/s, converted from m/s in config)
int tunnelMaxDistance; // REQ-BLD-TUNNEL-PAIR
double departureIntervalSeconds; // REQ-SHP-RALLY
WorldRegions regions;
WorldExpansion expansion;
WorldPush push;
WorldWaves waves;
};