Page Menu
Home
Wildfire Games
Search
Configure Global Search
Log In
Files
F5210379
D2393.id10460.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D2393.id10460.diff
View Options
Index: build/premake/premake5.lua
===================================================================
--- build/premake/premake5.lua
+++ build/premake/premake5.lua
@@ -1157,7 +1157,8 @@
{ -- include
"..",
"CustomControls",
- "Misc"
+ "Misc",
+ "../../../third_party/jsonspirit"
},
atlas_extern_libs,
{ -- extra_params
Index: source/simulation2/Simulation2.h
===================================================================
--- source/simulation2/Simulation2.h
+++ source/simulation2/Simulation2.h
@@ -250,6 +250,13 @@
std::vector<std::string> GetCivData();
/**
+ * Get victory condition data
+ *
+ * @return vector of strings containing JSON format data
+ */
+ std::vector<std::string> GetVictoryConditiondData();
+
+ /**
* Get player default data
*
* @return string containing JSON format data
Index: source/simulation2/Simulation2.cpp
===================================================================
--- source/simulation2/Simulation2.cpp
+++ source/simulation2/Simulation2.cpp
@@ -952,6 +952,11 @@
return GetJSONData(L"simulation/data/civs/");
}
+std::vector<std::string> CSimulation2::GetVictoryConditiondData()
+{
+ return GetJSONData(L"simulation/data/settings/victory_conditions/");
+}
+
static std::string ReadJSON(const VfsPath& path)
{
if (!VfsFileExists(path))
Index: source/tools/atlas/AtlasObject/JSONSpiritInclude.h
===================================================================
--- source/tools/atlas/AtlasObject/JSONSpiritInclude.h
+++ source/tools/atlas/AtlasObject/JSONSpiritInclude.h
@@ -29,8 +29,8 @@
#pragma warning(disable: 4512)
#endif
-# include "json_spirit_writer_template.h"
-# include "json_spirit_reader_template.h"
+#include "json_spirit_writer_template.h"
+#include "json_spirit_reader_template.h"
#ifdef _MSC_VER
#pragma warning(default: 4100)
Index: source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp
===================================================================
--- source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp
+++ source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp
@@ -20,6 +20,7 @@
#include "Map.h"
#include "AtlasObject/AtlasObject.h"
+#include "AtlasObject/JSONSpiritInclude.h"
#include "GameInterface/Messages.h"
#include "ScenarioEditor/ScenarioEditor.h"
#include "ScenarioEditor/Tools/Common/Tools.h"
@@ -43,12 +44,6 @@
ID_MapKW_Naval,
ID_MapKW_New,
ID_MapKW_Trigger,
- ID_VC_Conquest,
- ID_VC_ConquestUnits,
- ID_VC_ConquestStructures,
- ID_VC_CaptureTheRelic,
- ID_VC_Wonder,
- ID_VC_Regicide,
ID_RandomScript,
ID_RandomSize,
ID_RandomNomad,
@@ -105,15 +100,15 @@
AtObj UpdateSettingsObject();
private:
void SendToEngine();
- void OnConquestChanged();
+ void OnVictoryConditionChanged(long controlId);
void OnEdit(wxCommandEvent& evt)
{
SendToEngine();
- if (evt.GetId() == ID_VC_Conquest)
- OnConquestChanged();
+ OnVictoryConditionChanged(evt.GetId());
}
+ std::map<long, AtObj> m_VictoryConditions;
std::set<std::string> m_MapSettingsKeywords;
std::set<std::string> m_MapSettingsVictoryConditions;
std::vector<wxChoice*> m_PlayerCivChoices;
@@ -171,16 +166,23 @@
sizer->AddSpacer(5);
- // TODO: replace by names in binaries/data/mods/public/simulation/data/settings/victory_conditions/
wxStaticBoxSizer* victoryConditionSizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Victory Conditions"));
wxFlexGridSizer* vcGridSizer = new wxFlexGridSizer(2, 0, 5);
vcGridSizer->AddGrowableCol(1);
- CREATE_CHECKBOX(this, vcGridSizer, "Conquest", "Select Conquest victory condition", ID_VC_Conquest);
- CREATE_CHECKBOX(this, vcGridSizer, "Conquest Units", "Select Conquest Units victory condition", ID_VC_ConquestUnits);
- CREATE_CHECKBOX(this, vcGridSizer, "Conquest Structures", "Select Conquest Structures victory condition", ID_VC_ConquestStructures);
- CREATE_CHECKBOX(this, vcGridSizer, "Capture the Relic", "Select Capture the Relic victory condition", ID_VC_CaptureTheRelic);
- CREATE_CHECKBOX(this, vcGridSizer, "Wonder", "Select Wonder victory condition", ID_VC_Wonder);
- CREATE_CHECKBOX(this, vcGridSizer, "Regicide", "Select Regicide victory condition", ID_VC_Regicide);
+
+ AtlasMessage::qGetVictoryConditionData qryVictoryCondition;
+ qryVictoryCondition.Post();
+ std::vector<std::string> victoryConditionData = *qryVictoryCondition.data;
+
+ for (const std::string& victoryConditionJson : victoryConditionData)
+ {
+ AtObj victoryCondition = AtlasObject::LoadFromJSON(victoryConditionJson);
+ long index = wxWindow::NewControlId();
+ wxString title = wxString::FromUTF8(victoryCondition["Data"]["Title"]);
+ m_VictoryConditions.insert(std::pair<long, AtObj>(index, victoryCondition));
+ CREATE_CHECKBOX(this, vcGridSizer, title.MakeLower(), "Select " + wxString::FromUTF8(victoryCondition["Data"]["Title"]) + " victory condition.", index);
+ }
+
victoryConditionSizer->Add(vcGridSizer);
sizer->Add(victoryConditionSizer, wxSizerFlags().Expand());
@@ -230,14 +232,13 @@
if (window != nullptr) \
wxDynamicCast(window, wxCheckBox)->SetValue(mapSettings.count(value) != 0);
- INIT_CHECKBOX(ID_VC_Conquest, m_MapSettingsVictoryConditions, "conquest");
- INIT_CHECKBOX(ID_VC_ConquestUnits, m_MapSettingsVictoryConditions, "conquest_units");
- INIT_CHECKBOX(ID_VC_ConquestStructures, m_MapSettingsVictoryConditions, "conquest_structures");
- INIT_CHECKBOX(ID_VC_CaptureTheRelic, m_MapSettingsVictoryConditions, "capture_the_relic");
- INIT_CHECKBOX(ID_VC_Wonder, m_MapSettingsVictoryConditions, "wonder");
- INIT_CHECKBOX(ID_VC_Regicide, m_MapSettingsVictoryConditions, "regicide");
- OnConquestChanged();
+ for (const std::pair<long, AtObj>& vc : m_VictoryConditions)
+ {
+ INIT_CHECKBOX(vc.first, m_MapSettingsVictoryConditions, wxString::FromUTF8(vc.second["Data"]["Title"]).Lower().ToStdString());
+ OnVictoryConditionChanged(vc.first);
+ }
+
// lock teams
wxDynamicCast(FindWindow(ID_MapTeams), wxCheckBox)->SetValue(wxString::FromUTF8(m_MapSettings["LockTeams"]) == "true");
@@ -264,22 +265,63 @@
SendToEngine();
}
-// TODO Use the json data for this
-void MapSettingsControl::OnConquestChanged()
+void MapSettingsControl::OnVictoryConditionChanged(long controlId)
{
- bool conqestEnabled = wxDynamicCast(FindWindow(ID_VC_Conquest), wxCheckBox)->GetValue();
+ AtObj victoryCondition;
- wxCheckBox* conquestUnitsCheckbox = wxDynamicCast(FindWindow(ID_VC_ConquestUnits), wxCheckBox);
- conquestUnitsCheckbox->Enable(!conqestEnabled);
- wxCheckBox* conquestStructuresCheckbox = wxDynamicCast(FindWindow(ID_VC_ConquestStructures), wxCheckBox);
- conquestStructuresCheckbox->Enable(!conqestEnabled);
- if (conqestEnabled)
+ for (const std::pair<long, AtObj>& vc : m_VictoryConditions)
{
- conquestUnitsCheckbox->SetValue(false);
- conquestStructuresCheckbox->SetValue(false);
+ if(vc.first != controlId)
+ continue;
+
+ victoryCondition = vc.second;
+ break;
}
+
+ // ChangeOnChecked and DisabledWhenChecked use file names instead of victory titles so we have to convert them.
+
+ for (AtIter victoryConditionPair = victoryCondition["Data"]["ChangeOnChecked"]; victoryConditionPair.defined(); ++victoryConditionPair)
+ {
+ for (const std::pair<long, AtObj>& vc : m_VictoryConditions)
+ {
+ auto escapedTitle = wxString::FromUTF8(vc.second["Data"]["Title"]).Lower().ToStdString();
+ for (std::string::iterator it = escapedTitle.begin(); it != escapedTitle.end(); ++it) {
+ if (*it == ' ')
+ *it = '_';
+ }
+
+ if (victoryConditionPair[escapedTitle.c_str()].defined())
+ {
+ wxCheckBox* victoryConditionCheckBox = wxDynamicCast(FindWindow(vc.first), wxCheckBox);
+ victoryConditionCheckBox->SetValue(wxString::FromUTF8(victoryConditionPair[escapedTitle.c_str()]).Lower().ToStdString() == "true");
+ break;
+ }
+ }
+ }
+
+ bool controlEnabled = wxDynamicCast(FindWindow(controlId), wxCheckBox)->GetValue();
+ for (AtIter victoryConditionTitle = victoryCondition["Data"]["DisabledWhenChecked"]; victoryConditionTitle.defined(); ++victoryConditionTitle)
+ {
+ for (const std::pair<long, AtObj>& vc : m_VictoryConditions)
+ {
+ auto escapedTitle = wxString::FromUTF8(vc.second["Data"]["Title"]).Lower().ToStdString();
+ for (std::string::iterator it = escapedTitle.begin(); it != escapedTitle.end(); ++it) {
+ if (*it == ' ')
+ *it = '_';
+ }
+
+ if (escapedTitle == wxString::FromUTF8(victoryConditionTitle["item"]).ToStdString())
+ {
+ wxCheckBox* victoryConditionCheckBox = wxDynamicCast(FindWindow(vc.first), wxCheckBox);
+ victoryConditionCheckBox->Enable(!controlEnabled);
+ victoryConditionCheckBox->SetValue(!controlEnabled);
+ break;
+ }
+ }
+ }
}
+
AtObj MapSettingsControl::UpdateSettingsObject()
{
// map name
@@ -301,12 +343,10 @@
else \
m_MapSettingsVictoryConditions.erase(name);
- INSERT_VICTORY_CONDITION_CHECKBOX("conquest", ID_VC_Conquest);
- INSERT_VICTORY_CONDITION_CHECKBOX("conquest_units", ID_VC_ConquestUnits);
- INSERT_VICTORY_CONDITION_CHECKBOX("conquest_structures", ID_VC_ConquestStructures);
- INSERT_VICTORY_CONDITION_CHECKBOX("capture_the_relic", ID_VC_CaptureTheRelic);
- INSERT_VICTORY_CONDITION_CHECKBOX("wonder", ID_VC_Wonder);
- INSERT_VICTORY_CONDITION_CHECKBOX("regicide", ID_VC_Regicide);
+ for (const std::pair<long, AtObj>& vc : m_VictoryConditions)
+ {
+ INSERT_VICTORY_CONDITION_CHECKBOX(wxString::FromUTF8(vc.second["Data"]["Title"]).Lower().ToStdString(), vc.first);
+ }
#undef INSERT_VICTORY_CONDITION_CHECKBOX
Index: source/tools/atlas/GameInterface/Handlers/MapHandlers.cpp
===================================================================
--- source/tools/atlas/GameInterface/Handlers/MapHandlers.cpp
+++ source/tools/atlas/GameInterface/Handlers/MapHandlers.cpp
@@ -365,4 +365,9 @@
#undef GET_FILE_LIST
}
+QUERYHANDLER(GetVictoryConditionData)
+{
+ msg->data = g_Game->GetSimulation2()->GetVictoryConditiondData();
}
+
+}
Index: source/tools/atlas/GameInterface/Messages.h
===================================================================
--- source/tools/atlas/GameInterface/Messages.h
+++ source/tools/atlas/GameInterface/Messages.h
@@ -224,6 +224,11 @@
((std::vector<std::string>, data))
);
+QUERY(GetVictoryConditionData,
+ ,
+ ((std::vector<std::string>, data))
+ );
+
QUERY(GetPlayerDefaults,
,
((std::string, defaults))
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Sep 21, 9:15 AM (6 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3370088
Default Alt Text
D2393.id10460.diff (10 KB)
Attached To
Mode
D2393: Use victory conditions json's in Atlas
Attached
Detach File
Event Timeline
Log In to Comment