1
0
forked from 0ad/0ad

Pick a TeamPlacement in Atlas

This moves the TeamPlacement selection to Atlas, so the map don't have
to worry about it.
This commit is contained in:
phosit 2024-09-20 17:57:53 +02:00
parent e56ebb3f46
commit 37871429dc
3 changed files with 17 additions and 9 deletions

View File

@ -20,17 +20,15 @@ function* GenerateMap(mapSettings)
yield 10;
const pattern = mapSettings.TeamPlacement ||
pickRandom(["line", "radial", "randomGroup", "stronghold"]);
const [playerIDs, playerPosition] =
createBases(
...playerPlacementByPattern(
pattern,
mapSettings.TeamPlacement,
fractionToTiles(randFloat(0.2, 0.35)),
fractionToTiles(randFloat(0.08, 0.1)),
randomAngle(),
undefined),
g_PlayerbaseTypes[pattern].walls);
g_PlayerbaseTypes[mapSettings.TeamPlacement].walls);
if (!isNomad())
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());

View File

@ -23,17 +23,14 @@ function* GenerateMap(mapSettings)
if (!isNomad())
{
// Note: `|| pickRandom(...)` is needed for atlas.
const pattern = mapSettings.TeamPlacement ||
pickRandom(["line", "radial", "randomGroup", "stronghold"]);
createBases(
...playerPlacementByPattern(
pattern,
mapSettings.TeamPlacement,
fractionToTiles(randFloat(0.2, 0.35)),
fractionToTiles(randFloat(0.08, 0.1)),
randomAngle(),
undefined),
g_PlayerbaseTypes[pattern].walls);
g_PlayerbaseTypes[mapSettings.TeamPlacement].walls);
}
yield 40;

View File

@ -708,6 +708,19 @@ void MapSidebar::OnRandomGenerate(wxCommandEvent& WXUNUSED(evt))
settings.setInt("Seed", wxAtoi(wxDynamicCast(FindWindow(ID_RandomSeed), wxTextCtrl)->GetValue()));
std::default_random_engine rngEngine{std::random_device{}()};
std::vector<std::string> playerPlacements;
for (AtIter it{settings["TeamPlacements"]["item"]}; it.defined(); ++it)
{
playerPlacements.push_back(static_cast<const char*>(*it));
}
if (!playerPlacements.empty())
{
std::uniform_int_distribution distrib{static_cast<size_t>(0), playerPlacements.size() - 1};
settings.set("TeamPlacement", playerPlacements[distrib(rngEngine)].c_str());
}
std::string json = AtlasObject::SaveToJSON(settings);
wxBusyInfo busy(_("Generating map"));