1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Merge pull request #3645 from vcmi/save_rmg_options

Save rmg options
This commit is contained in:
DjWarmonger
2024-03-14 19:54:08 +01:00
committed by GitHub
16 changed files with 264 additions and 153 deletions

View File

@@ -38,6 +38,10 @@
#include "../../lib/filesystem/Filesystem.h"
#include "../../lib/RoadHandler.h"
#include "../../lib/CConfigHandler.h"
#include "../../lib/serializer/JsonSerializer.h"
#include "../../lib/serializer/JsonDeserializer.h"
RandomMapTab::RandomMapTab():
InterfaceObjectConfigurable()
{
@@ -162,7 +166,7 @@ RandomMapTab::RandomMapTab():
};
}
updateMapInfoByHost();
loadOptions();
}
void RandomMapTab::updateMapInfoByHost()
@@ -461,7 +465,7 @@ TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab & randomMapTab):
//int totalPlayers = randomMapTab.obtainMapGenOptions().getPlayerLimit();
int totalPlayers = randomMapTab.obtainMapGenOptions().getMaxPlayersCount();
assert(totalPlayers <= PlayerColor::PLAYER_LIMIT_I);
auto settings = randomMapTab.obtainMapGenOptions().getPlayersSettings();
auto playerSettings = randomMapTab.obtainMapGenOptions().getPlayersSettings();
variables["totalPlayers"].Integer() = totalPlayers;
pos.w = variables["windowSize"]["x"].Integer() + totalPlayers * variables["cellMargin"]["x"].Integer();
@@ -502,20 +506,20 @@ TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab & randomMapTab):
// Window should have X * X columns, where X is max players allowed for current settings
// For random player count, X is 8
if (totalPlayers > settings.size())
if (totalPlayers > playerSettings.size())
{
auto savedPlayers = randomMapTab.obtainMapGenOptions().getSavedPlayersMap();
for (const auto & player : savedPlayers)
{
if (!vstd::contains(settings, player.first))
if (!vstd::contains(playerSettings, player.first))
{
settings[player.first] = player.second;
playerSettings[player.first] = player.second;
}
}
}
std::vector<CMapGenOptions::CPlayerSettings> settingsVec;
for (const auto & player : settings)
for (const auto & player : playerSettings)
{
settingsVec.push_back(player.second);
}
@@ -569,3 +573,36 @@ TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab & randomMapTab):
buttonOk = widget<CButton>("buttonOK");
buttonCancel = widget<CButton>("buttonCancel");
}
void RandomMapTab::saveOptions(const CMapGenOptions & options)
{
JsonNode data;
JsonSerializer ser(nullptr, data);
ser.serializeStruct("lastSettings", const_cast<CMapGenOptions & >(options));
// FIXME: Do not nest fields
Settings rmgSettings = persistentStorage.write["rmg"];
rmgSettings["rmg"] = data;
}
void RandomMapTab::loadOptions()
{
auto rmgSettings = persistentStorage["rmg"]["rmg"];
if (!rmgSettings.Struct().empty())
{
mapGenOptions.reset(new CMapGenOptions());
JsonDeserializer handler(nullptr, rmgSettings);
handler.serializeStruct("lastSettings", *mapGenOptions);
// Will check template and set other options as well
setTemplate(mapGenOptions->getMapTemplate());
if(auto w = widget<ComboBox>("templateList"))
{
w->setItem(mapGenOptions->getMapTemplate());
}
}
updateMapInfoByHost();
// TODO: Save & load difficulty?
}