1
0
forked from 0ad/0ad

Compare commits

...

2 Commits

Author SHA1 Message Date
30a63187ab Remove setSelectedBiome
Since Atlas now supports biomes, defaulting the biome isn't required
anymore.
2024-09-22 14:48:13 +02:00
1b86fc70fd Allow selecting a biome in Atlas 2024-09-22 14:48:07 +02:00
37 changed files with 150 additions and 84 deletions

View File

@ -4,11 +4,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
if (mapSettings.Biome)
setSelectedBiome();
else
setBiome("generic/savanna");
setBiome(mapSettings.Biome);
// Pick some biome defaults and overload a few settings.
const tPrimary = g_Terrains.mainTerrain;

View File

@ -4,8 +4,8 @@ Engine.LoadLibrary("rmgen-common");
function* GenerateMap(mapSettings)
{
setBiome(mapSettings.Biome ?? "alpine/winter");
const isLateSpringBiome = mapSettings.Biome !== "alpine/winter";
setBiome(mapSettings.Biome);
const isLateSpringBiome = mapSettings.Biome === "alpine/late_spring";
setFogThickness(isLateSpringBiome ? 0.26 : 0.19);
setFogFactor(isLateSpringBiome ? 0.4 : 0.35);

View File

@ -236,7 +236,7 @@ MountainRangeBuilder.prototype.CreateMountainRanges = function*(map)
function* GenerateMap(mapSettings)
{
setBiome(mapSettings.Biome ?? "alpine/winter");
setBiome(mapSettings.Biome);
const heightLand = 3;
const heightOffsetBump = 2;

View File

@ -5,7 +5,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const heightLand = 2;

View File

@ -2,11 +2,11 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
setSelectedBiome();
setBiome(mapSettings.Biome);
const biomeTweaks = Engine.ReadJSONFile("maps/random/archipelago_biome_tweaks.json");

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tPrimary = g_Terrains.mainTerrain;
const tGrass = [g_Terrains.tier1Terrain, g_Terrains.tier2Terrain];

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
TILE_CENTERED_HEIGHT_MAP = true;

View File

@ -3,9 +3,9 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
globalThis.g_Map = new RandomMap(2, g_Terrains.mainTerrain);

View File

@ -4,10 +4,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
if (mapSettings.Biome)
setSelectedBiome();
else
setBiome("fields_of_meroe/dry");
setBiome(mapSettings.Biome);
const tMainDirt = g_Terrains.mainDirt;
const tSecondaryDirt = g_Terrains.secondaryDirt;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -5,7 +5,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
// Random elevation with a bias towards lower elevations
let randElevation = randIntInclusive(0, 29);

View File

@ -2,11 +2,11 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -6,11 +6,7 @@ function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
if (mapSettings.Biome)
setSelectedBiome();
else
// TODO: Replace ugly default for atlas by a dropdown
setBiome("gulf_of_bothnia/winter");
setBiome(mapSettings.Biome);
const isLakeFrozen = g_Environment.Water.Frozen;

View File

@ -3,9 +3,9 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const heightSeaGround = -18;
const heightLand = 2;

View File

@ -3,9 +3,9 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const heightLand = 1;
const heightBarrier = 30;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tPrimary = g_Terrains.mainTerrain;
const tGrass = g_Terrains.tier1Terrain;

View File

@ -3,12 +3,12 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
const g_InitialMineDistance = 14;
const g_InitialTrees = 50;
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -2,11 +2,11 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -3,9 +3,9 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const topTerrain = g_Terrains.tier2Terrain;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -4,11 +4,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
if (mapSettings.Biome)
setSelectedBiome();
else
setBiome("generic/sahara");
setBiome(mapSettings.Biome);
const tPrimary = g_Terrains.mainTerrain;
const tCity = g_Terrains.roadWild;

View File

@ -4,11 +4,7 @@ Engine.LoadLibrary("rmbiome");
function* GenerateMap(mapSettings)
{
if (mapSettings.Biome)
setSelectedBiome();
else
// TODO: Replace ugly default for atlas by a dropdown
setBiome("persian_highlands/summer");
setBiome(mapSettings.Biome);
const tDirtMain = g_Terrains.mainTerrain;
const tCity = g_Terrains.road;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -11,12 +11,6 @@ function currentBiome()
return g_BiomeID;
}
function setSelectedBiome()
{
// TODO: Replace ugly default for atlas by a dropdown
setBiome(g_MapSettings.Biome || "generic/alpine");
}
function setBiome(biomeID)
{
RandomMapLogger.prototype.printDirectly("Setting biome " + biomeID + ".\n");

View File

@ -2,11 +2,11 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -3,9 +3,9 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmgen2");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const heightLand = 30;

View File

@ -2,9 +2,9 @@ Engine.LoadLibrary("rmgen");
Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -6,7 +6,7 @@ function* GenerateMap(mapSettings)
{
TILE_CENTERED_HEIGHT_MAP = true;
setSelectedBiome();
setBiome(mapSettings.Biome);
const tMainTerrain = g_Terrains.mainTerrain;
const tForestFloor1 = g_Terrains.forestFloor1;

View File

@ -3,7 +3,7 @@ Engine.LoadLibrary("rmgen-common");
Engine.LoadLibrary("rmbiome");
Engine.LoadLibrary("heightmap");
function* GenerateMap()
function* GenerateMap(mapSettings)
{
globalThis.g_Map = new RandomMap(0, "whiteness");
@ -17,7 +17,7 @@ function* GenerateMap()
return stringOrArrayOfStrings;
}
setSelectedBiome();
setBiome(mapSettings.Biome);
// Terrain, entities and actors
const wildLakeBiome = [

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2023 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -29,8 +29,10 @@
#include <algorithm>
#include <ctime>
#include <random>
#include <string>
#include <wx/busyinfo.h>
#include <wx/filename.h>
#include <vector>
#define CREATE_CHECKBOX(window, parentSizer, name, description, ID) \
parentSizer->Add(new wxStaticText(window, wxID_ANY, _(name)), wxSizerFlags().Align(wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT)); \
@ -51,6 +53,7 @@ enum
ID_MapKW_Trigger,
ID_RandomScript,
ID_RandomSize,
ID_RandomBiome,
ID_RandomNomad,
ID_RandomSeed,
ID_RandomReseed,
@ -468,6 +471,10 @@ MapSidebar::MapSidebar(ScenarioEditor& scenarioEditor, wxWindow* sidebarContaine
wxFlexGridSizer* gridSizer = new wxFlexGridSizer(2, 5, 5);
gridSizer->AddGrowableCol(1);
gridSizer->Add(new wxStaticText(scrolledWindow, wxID_ANY, _("Biome")),
wxSizerFlags().Align(wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT));
gridSizer->Add(new wxChoice(scrolledWindow, ID_RandomBiome), wxSizerFlags().Expand());
wxChoice* sizeChoice = new wxChoice(scrolledWindow, ID_RandomSize);
gridSizer->Add(new wxStaticText(scrolledWindow, wxID_ANY, _("Map size")), wxSizerFlags().Align(wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT));
gridSizer->Add(sizeChoice, wxSizerFlags().Expand());
@ -669,6 +676,41 @@ void MapSidebar::OnSimReset(wxCommandEvent& WXUNUSED(event))
UpdateSimButtons();
}
void MapSidebar::OnRandomScript(wxCommandEvent& WXUNUSED(evt))
{
wxChoice* biomeChoice = wxDynamicCast(FindWindow(ID_RandomBiome), wxChoice);
wxChoice* scriptChoice = wxDynamicCast(FindWindow(ID_RandomScript), wxChoice);
if (scriptChoice->GetSelection() < 0)
return;
biomeChoice->Clear();
AtObj mapSettings = dynamic_cast<AtObjClientData*>(scriptChoice->GetClientObject(
scriptChoice->GetSelection()))->GetValue();
std::vector<std::string> biomes;
if (mapSettings["SupportedBiomes"]["@array"].defined())
{
for (AtIter it = mapSettings["SupportedBiomes"]["item"]; it.defined(); ++it)
biomes.push_back(static_cast<const char*>(*it));
}
else
{
std::string singleBiome{static_cast<const char*>(*mapSettings["SupportedBiomes"])};
if (!singleBiome.empty())
biomes.push_back(singleBiome);
}
AtlasMessage::qExpandBiomes qry;
qry.biomes = std::move(biomes);
qry.Post();
biomes = *qry.biomes;
for (const std::string& biome : biomes)
biomeChoice->Append(wxString::FromUTF8(biome.c_str()));
biomeChoice->SetSelection(0);
}
void MapSidebar::OnRandomReseed(wxCommandEvent& WXUNUSED(evt))
{
std::mt19937 engine(std::time(nullptr));
@ -708,6 +750,10 @@ void MapSidebar::OnRandomGenerate(wxCommandEvent& WXUNUSED(evt))
settings.setInt("Seed", wxAtoi(wxDynamicCast(FindWindow(ID_RandomSeed), wxTextCtrl)->GetValue()));
wxChoice* biomeChoice = wxDynamicCast(FindWindow(ID_RandomBiome), wxChoice);
wxString biome = biomeChoice->GetString(biomeChoice->GetSelection());
settings.set("Biome", biome.utf8_str());
std::string json = AtlasObject::SaveToJSON(settings);
wxBusyInfo busy(_("Generating map"));
@ -764,4 +810,5 @@ BEGIN_EVENT_TABLE(MapSidebar, Sidebar)
EVT_BUTTON(ID_RandomGenerate, MapSidebar::OnRandomGenerate)
EVT_BUTTON(ID_ResizeMap, MapSidebar::OnResizeMap)
EVT_BUTTON(ID_OpenPlayerPanel, MapSidebar::OnOpenPlayerPanel)
EVT_CHOICE(ID_RandomScript, MapSidebar::OnRandomScript)
END_EVENT_TABLE();

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -36,6 +36,7 @@ private:
void OnCollapse(wxCollapsiblePaneEvent& evt);
void OnOpenPlayerPanel(wxCommandEvent& evt);
void OnRandomScript(wxCommandEvent& evt);
void OnRandomReseed(wxCommandEvent& evt);
void OnRandomGenerate(wxCommandEvent& evt);
void OnResizeMap(wxCommandEvent& evt);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2023 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -57,6 +57,9 @@
#include "simulation2/components/ICmpVisual.h"
#include "simulation2/system/ParamNode.h"
#include <algorithm>
#include <string>
#include <vector>
#ifdef _MSC_VER
# pragma warning(disable: 4458) // Declaration hides class member.
@ -357,6 +360,41 @@ QUERYHANDLER(GetRMSData)
msg->data = g_Game->GetSimulation2()->GetRMSData();
}
QUERYHANDLER(ExpandBiomes)
{
std::vector<std::string> unexpandedBiomes = *msg->biomes;
std::vector<std::string> expandedBiomes;
for (const std::string& toExpand : unexpandedBiomes)
{
if (toExpand.empty())
{
LOGERROR("Got an empty biome");
continue;
}
if (toExpand.back() != '/')
{
expandedBiomes.push_back(toExpand);
continue;
}
VfsPaths biomesList;
if (vfs::GetPathnames(g_VFS, "maps/random/rmbiome/" + toExpand, L"*.json", biomesList) ==
INFO::OK)
{
std::transform(biomesList.begin(), biomesList.end(), std::back_inserter(expandedBiomes),
[&](const VfsPath& biome)
{
return toExpand + biome.Basename().string8();
});
}
else
LOGERROR("Error reading biome files in %s", toExpand);
}
msg->biomes = std::move(expandedBiomes);
}
QUERYHANDLER(GetCurrentMapSize)
{
msg->size = g_Game->GetWorld()->GetTerrain().GetTilesPerSide();

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2023 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -222,6 +222,11 @@ QUERY(GetRMSData,
((std::vector<std::string>, data))
);
QUERY(ExpandBiomes,
,
((std::vector<std::string>, biomes))
);
COMMAND(ResizeMap, NOMERGE,
((int, tiles))
((int, offsetX))