1
0
forked from 0ad/0ad

Replace "_" with " " in displayed map names.

Hide "_default" map from display.
Default to techdemo-mp map for multiplayer games.
Fix script error when selecting "Unassigned" in single-player setup
screen.

This was SVN commit r7872.
This commit is contained in:
Ykkrosh 2010-08-08 15:25:16 +00:00
parent 814a8722da
commit 353032070c
2 changed files with 44 additions and 14 deletions

View File

@ -14,7 +14,7 @@ var g_IsInGuiUpdate;
var g_PlayerAssignments = {};
// Default game setup attributes
var g_GameAttributes = { "map": "Latium" };
var g_GameAttributes = { "map": "" };
// Number of players for currently selected map
var g_MaxPlayers = 8;
@ -44,6 +44,14 @@ function init(attribs)
error("Unexpected 'type' in gamesetup init: "+attribs.type);
}
// Set a default map
if (attribs.type == "offline")
g_GameAttributes.map = "Latium";
else
g_GameAttributes.map = "techdemo-mp";
initMapNameList(getGUIObjectByName("mapSelection"));
// If we're a network client, disable all the map controls
// TODO: make them look visually disabled so it's obvious why they don't work
if (!g_IsController)
@ -134,34 +142,54 @@ function handleNetMessage(message)
}
}
// Convert map .xml filename into displayed name
function getMapDisplayName(filename)
{
var name = filename;
// Replace "_" with " " (so we can avoid spaces in filenames)
name = name.replace(/_/g, " ");
return name;
}
// Initialise the list control containing all the available maps
function initMapNameList(object)
{
var mapPath = "maps/scenarios/"
// Get a list of map filenames
var mapArray = buildDirEntList(mapPath, "*.xml", false);
var mapFiles = buildDirEntList(mapPath, "*.xml", false);
// Remove the path and extension from each name, since we just want the filename
mapFiles = [ n.substring(mapPath.length, n.length-4) for each (n in mapFiles) ];
// Remove any files starting with "_" (these are for special maps used by the engine/editor)
mapFiles = [ n for each (n in mapFiles) if (n[0] != "_") ];
var mapList = [ { "name": getMapDisplayName(n), "file": n } for each (n in mapFiles) ];
// Alphabetically sort the list, ignoring case
mapArray.sort(function (x, y) {
var lowerX = x.toLowerCase();
var lowerY = y.toLowerCase();
mapList.sort(function (x, y) {
var lowerX = x.name.toLowerCase();
var lowerY = y.name.toLowerCase();
if (lowerX < lowerY) return -1;
else if (lowerX > lowerY) return 1;
else return 0;
});
// Remove the path and extension from each name, since we just want the filename
var mapNames = [ n.substring(mapPath.length, n.length-4) for each (n in mapArray) ];
var mapListNames = [ n.name for each (n in mapList) ];
var mapListFiles = [ n.file for each (n in mapList) ];
// Select the default map
var selected = mapNames.indexOf(g_GameAttributes.map);
var selected = mapListFiles.indexOf(g_GameAttributes.map);
// Default to the first element if we can't find the one we searched for
if (selected == -1)
selected = 0;
// Update the list control
object.list = mapNames;
object.list = mapListNames;
object.list_data = mapListFiles;
object.selected = selected;
}
@ -199,10 +227,10 @@ function onGameAttributesChange()
var mapName = g_GameAttributes.map;
var mapSelectionBox = getGUIObjectByName("mapSelection");
var mapIdx = mapSelectionBox.list.indexOf(mapName);
var mapIdx = mapSelectionBox.list_data.indexOf(mapName);
mapSelectionBox.selected = mapIdx;
getGUIObjectByName("mapInfoName").caption = mapName;
getGUIObjectByName("mapInfoName").caption = getMapDisplayName(mapName);
var mapData = loadMapData(mapName);
var mapSettings = (mapData && mapData.settings ? mapData.settings : {});
@ -299,7 +327,10 @@ function updatePlayerList()
{
if (!g_IsInGuiUpdate)
{
g_PlayerAssignments[hostGuidList[this.selected]].player = playerID;
// If we didn't just select "unassigned", update the selected host's ID
if (this.selected > 0)
g_PlayerAssignments[hostGuidList[this.selected]].player = playerID;
updatePlayerList();
}
};

View File

@ -34,8 +34,7 @@
size="0 0 100% 100%-200"
tooltip_style="onscreenToolTip"
tooltip="Select a map to play on.">
<action on="Load">initMapNameList(this);</action>
<action on="SelectionChange">selectMap(this.list[this.selected]);</action>
<action on="SelectionChange">selectMap(this.list_data[this.selected]);</action>
</object>
<object type="image" style="indentedPanel" size="0 100%-190 100% 100%">