Index: binaries/data/mods/public/gui/replaymenu/replay_actions.js
===================================================================
--- binaries/data/mods/public/gui/replaymenu/replay_actions.js (revision 18104)
+++ binaries/data/mods/public/gui/replaymenu/replay_actions.js (working copy)
@@ -11,6 +11,9 @@
let populationFilter = Engine.GetGUIObjectByName("populationFilter");
let durationFilter = Engine.GetGUIObjectByName("durationFilter");
let compatibilityFilter = Engine.GetGUIObjectByName("compatibilityFilter");
+ let singleplayerFilter = Engine.GetGUIObjectByName("singleplayerFilter");
+ let victoryConFilter = Engine.GetGUIObjectByName("victoryConditionFilter");
+ let ratedGamesFilter = Engine.GetGUIObjectByName("ratedGamesFilter");
return {
"directory": selectedDirectory,
@@ -23,7 +26,10 @@
"mapSize": mapSizeFilter.list_data[mapSizeFilter.selected],
"popCap": populationFilter.list_data[populationFilter.selected],
"duration": durationFilter.list_data[durationFilter.selected],
- "compatibility": compatibilityFilter.checked
+ "compatibility": compatibilityFilter.checked,
+ "singleplayer": singleplayerFilter.list_data[singleplayerFilter.selected],
+ "victoryCondition": victoryConFilter.list_data[victoryConFilter.selected],
+ "ratedGames": ratedGamesFilter.selected
}
};
}
Index: binaries/data/mods/public/gui/replaymenu/replay_filters.js
===================================================================
--- binaries/data/mods/public/gui/replaymenu/replay_filters.js (revision 18104)
+++ binaries/data/mods/public/gui/replaymenu/replay_filters.js (working copy)
@@ -33,6 +33,9 @@
initMapNameFilter(filters && filters.mapName);
initPopCapFilter(filters && filters.popCap);
initDurationFilter(filters && filters.duration);
+ initSingleplayerFilter(filters && filters.singleplayer);
+ initVictoryConditionFilter(filters && filters.victoryCondition);
+ initRatedGamesFilter(filters && filters.ratedGames);
}
/**
@@ -133,6 +136,45 @@
durationFilter.selected = 0;
}
+function initSingleplayerFilter(singleplayer)
+{
+ let singleplayerFilter = Engine.GetGUIObjectByName("singleplayerFilter");
+ singleplayerFilter.list = [translateWithContext("gamemode", "Single- and multiplayer"), translate("Single Player"), translate("Multiplayer")];
+ singleplayerFilter.list_data = ["", "Singleplayer", "Multiplayer"];
+
+ if (singleplayer)
+ singleplayerFilter.selected = singleplayerFilter.list_data.indexOf(singleplayer);
+
+ if (singleplayerFilter.selected < 0 || singleplayerFilter.selected >= singleplayerFilter.list.length)
+ singleplayerFilter.selected = 0;
+}
+
+function initVictoryConditionFilter(victoryCondition)
+{
+ let victoryConditionFilter = Engine.GetGUIObjectByName("victoryConditionFilter");
+ victoryConditionFilter.list = [translateWithContext("victory condition", "Any Gametype")].concat(g_VictoryConditions.map(victoryCondition => translateVictoryCondition(victoryCondition)));
+ victoryConditionFilter.list_data = [""].concat(g_VictoryConditions);
+
+ if (victoryCondition)
+ victoryConditionFilter.selected = victoryConditionFilter.list_data.indexOf(victoryCondition);
+
+ if (victoryConditionFilter.selected < 0 || victoryConditionFilter.selected >= victoryConditionFilter.list.length)
+ victoryConditionFilter.selected = 0;
+}
+
+function initRatedGamesFilter(ratedGames)
+{
+ let ratedGamesFilter = Engine.GetGUIObjectByName("ratedGamesFilter");
+ ratedGamesFilter.list = [translateWithContext("rated game", "Rated and unrated games"), translate("Rated Games"), translate("Unrated Games")];
+ ratedGamesFilter.list_data = ["", "rated", "not rated"];
+
+ if (ratedGames)
+ ratedGamesFilter.selected = ratedGamesFilter.list_data.indexOf(ratedGames);
+
+ if (ratedGamesFilter.selected < 0 || ratedGamesFilter.selected >= ratedGamesFilter.list.length)
+ ratedGamesFilter.selected = 0;
+}
+
/**
* Initializes g_ReplaysFiltered with replays that are not filtered out and sort it.
*/
@@ -193,14 +235,31 @@
if (compatibilityFilter.checked && !isReplayCompatible(replay))
return false;
+ // Filter by multiplayer/singleplayer
+ let singleplayerFilter = Engine.GetGUIObjectByName("singleplayerFilter");
+ if (singleplayerFilter.selected == 1 && replay.isMultiplayer ||
+ singleplayerFilter.selected == 2 && !replay.isMultiplayer)
+ return false;
+
+ // Filter by victory condition
+ let victoryConditionFilter = Engine.GetGUIObjectByName("victoryConditionFilter");
+ if (victoryConditionFilter.selected > 0 && replay.attribs.settings.GameType != victoryConditionFilter.list_data[victoryConditionFilter.selected])
+ return false;
+
+ // Filter by rating
+ let ratedGamesFilter = Engine.GetGUIObjectByName("ratedGamesFilter");
+ if (ratedGamesFilter.selected == 1 && !replay.attribs.settings.RatingEnabled ||
+ ratedGamesFilter.selected == 2 && replay.attribs.settings.RatingEnabled)
+ return false
+
// Filter date/time (select a month)
- var dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
+ let dateTimeFilter = Engine.GetGUIObjectByName("dateTimeFilter");
if (dateTimeFilter.selected > 0 && getReplayMonth(replay) != dateTimeFilter.list_data[dateTimeFilter.selected])
return false;
// Filter by playernames
- var playersFilter = Engine.GetGUIObjectByName("playersFilter");
- var keywords = playersFilter.caption.toLowerCase().split(" ");
+ let playersFilter = Engine.GetGUIObjectByName("playersFilter");
+ let keywords = playersFilter.caption.toLowerCase().split(" ");
if (keywords.length)
{
// We just check if all typed words are somewhere in the playerlist of that replay
@@ -210,22 +269,22 @@
}
// Filter by map name
- var mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter");
+ let mapNameFilter = Engine.GetGUIObjectByName("mapNameFilter");
if (mapNameFilter.selected > 0 && getReplayMapName(replay) != mapNameFilter.list_data[mapNameFilter.selected])
return false;
// Filter by map size
- var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
+ let mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
if (mapSizeFilter.selected > 0 && replay.attribs.settings.Size != mapSizeFilter.list_data[mapSizeFilter.selected])
return false;
// Filter by population capacity
- var populationFilter = Engine.GetGUIObjectByName("populationFilter");
+ let populationFilter = Engine.GetGUIObjectByName("populationFilter");
if (populationFilter.selected > 0 && replay.attribs.settings.PopulationCap != populationFilter.list_data[populationFilter.selected])
return false;
// Filter by game duration
- var durationFilter = Engine.GetGUIObjectByName("durationFilter");
+ let durationFilter = Engine.GetGUIObjectByName("durationFilter");
if (durationFilter.selected > 0)
{
let interval = g_DurationFilterIntervals[durationFilter.selected];
Index: binaries/data/mods/public/gui/replaymenu/replay_menu.js
===================================================================
--- binaries/data/mods/public/gui/replaymenu/replay_menu.js (revision 18104)
+++ binaries/data/mods/public/gui/replaymenu/replay_menu.js (working copy)
@@ -34,6 +34,11 @@
var g_MapNames = [];
/**
+ * Sorted list of the victory conditions occuring in the replays
+ */
+var g_VictoryConditions = [];
+
+/**
* Directory name of the currently selected replay. Used to restore the selection after changing filters.
*/
var g_SelectedReplayDirectory = "";
@@ -62,7 +67,7 @@
/**
* Store the list of replays loaded in C++ in g_Replays.
- * Check timestamp and compatibility and extract g_Playernames, g_MapNames.
+ * Check timestamp and compatibility and extract g_Playernames, g_MapNames, g_VictoryConditions.
* Restore selected filters and item.
*/
function loadReplays(replaySelectionData)
@@ -75,6 +80,7 @@
g_Playernames = [];
for (let replay of g_Replays)
{
+ let nonAIPlayers = 0;
// Use time saved in file, otherwise file mod date
replay.timestamp = replay.attribs.timestamp ? +replay.attribs.timestamp : +replay.filemod_timestamp-replay.duration;
@@ -87,6 +93,10 @@
if (g_MapNames.indexOf(replay.attribs.settings.Name) == -1 && replay.attribs.settings.Name != "")
g_MapNames.push(replay.attribs.settings.Name);
+ // Extract victory conditions
+ if (replay.attribs.settings.GameType && g_VictoryConditions.indexOf(replay.attribs.settings.GameType) == -1)
+ g_VictoryConditions.push(replay.attribs.settings.GameType);
+
// Extract playernames
for (let playerData of replay.attribs.settings.PlayerData)
{
@@ -101,9 +111,13 @@
if (g_Playernames.indexOf(playername) == -1)
g_Playernames.push(playername);
+ ++nonAIPlayers;
}
+ replay.isMultiplayer = nonAIPlayers > 1;
+ replay.attribs.settings.RatingEnabled = replay.attribs.settings.RatingEnabled && nonAIPlayers == 2;
}
g_MapNames.sort();
+ g_VictoryConditions.sort();
// Reload filters (since they depend on g_Replays and its derivatives)
initFilters(replaySelectionData && replaySelectionData.filters);
Index: binaries/data/mods/public/gui/replaymenu/replay_menu.xml
===================================================================
--- binaries/data/mods/public/gui/replaymenu/replay_menu.xml (revision 18104)
+++ binaries/data/mods/public/gui/replaymenu/replay_menu.xml (working copy)
@@ -110,8 +110,23 @@
Filter compatible replays
+
+
+
+
+
+
+
+
+
-