forked from 0ad/0ad
Cleanup: Move all code to hide elements to switchSetupPage. Remove nasty second argument from switchSetupPage by just hiding every page. To avoid another state variable, immediately set g_IsConnecting to true by calling startConnectionStatus when trying to host. Use .some instead of a loop. This was SVN commit r18371.
This commit is contained in:
parent
320798f901
commit
7b655b7ea6
@ -1,5 +1,16 @@
|
||||
/**
|
||||
* Whether we are attempting to join or host a game.
|
||||
*/
|
||||
var g_IsConnecting = false;
|
||||
var g_GameType; // "server" or "client"
|
||||
|
||||
/**
|
||||
* "server" or "client"
|
||||
*/
|
||||
var g_GameType;
|
||||
|
||||
/**
|
||||
* Server title shown in the lobby gamelist.
|
||||
*/
|
||||
var g_ServerName = "";
|
||||
|
||||
var g_IsRejoining = false;
|
||||
@ -10,33 +21,32 @@ var g_UserRating;
|
||||
function init(attribs)
|
||||
{
|
||||
g_UserRating = attribs.rating;
|
||||
|
||||
switch (attribs.multiplayerGameType)
|
||||
{
|
||||
case "join":
|
||||
if(Engine.HasXmppClient())
|
||||
{
|
||||
if (Engine.HasXmppClient())
|
||||
{
|
||||
if (startJoin(attribs.name, attribs.ip))
|
||||
switchSetupPage("pageJoin", "pageConnecting");
|
||||
switchSetupPage("pageConnecting");
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.GetGUIObjectByName("pageJoin").hidden = false;
|
||||
Engine.GetGUIObjectByName("pageHost").hidden = true;
|
||||
}
|
||||
switchSetupPage("pageJoin");
|
||||
break;
|
||||
}
|
||||
case "host":
|
||||
Engine.GetGUIObjectByName("pageJoin").hidden = true;
|
||||
Engine.GetGUIObjectByName("pageHost").hidden = false;
|
||||
if(Engine.HasXmppClient())
|
||||
{
|
||||
if (Engine.HasXmppClient())
|
||||
{
|
||||
Engine.GetGUIObjectByName("hostServerNameWrapper").hidden = false;
|
||||
Engine.GetGUIObjectByName("hostPlayerName").caption = attribs.name;
|
||||
Engine.GetGUIObjectByName("hostServerName").caption =
|
||||
sprintf(translate("%(name)s's game"), { "name": attribs.name });
|
||||
}
|
||||
else
|
||||
Engine.GetGUIObjectByName("hostPlayerNameWrapper").hidden = false;
|
||||
|
||||
switchSetupPage("pageHost");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
error("Unrecognised multiplayer game type: " + attribs.multiplayerGameType);
|
||||
break;
|
||||
@ -51,7 +61,22 @@ function cancelSetup()
|
||||
if (Engine.HasXmppClient())
|
||||
Engine.LobbySetPlayerPresence("available");
|
||||
|
||||
Engine.PopGuiPage();
|
||||
// Keep the page open if an attempt to join/host by ip failed
|
||||
if (!g_IsConnecting || (Engine.HasXmppClient() && g_GameType == "client"))
|
||||
{
|
||||
Engine.PopGuiPage();
|
||||
return;
|
||||
}
|
||||
|
||||
g_IsConnecting = false;
|
||||
Engine.GetGUIObjectByName("hostFeedback").caption = "";
|
||||
|
||||
if (g_GameType == "client")
|
||||
switchSetupPage("pageJoin");
|
||||
else if (g_GameType == "server")
|
||||
switchSetupPage("pageHost");
|
||||
else
|
||||
error("cancelSetup: Unrecognised multiplayer game type: " + g_GameType);
|
||||
}
|
||||
|
||||
function confirmSetup()
|
||||
@ -61,14 +86,14 @@ function confirmSetup()
|
||||
let joinPlayerName = Engine.GetGUIObjectByName("joinPlayerName").caption;
|
||||
let joinServer = Engine.GetGUIObjectByName("joinServer").caption;
|
||||
if (startJoin(joinPlayerName, joinServer))
|
||||
switchSetupPage("pageJoin", "pageConnecting");
|
||||
switchSetupPage("pageConnecting");
|
||||
}
|
||||
else if (!Engine.GetGUIObjectByName("pageHost").hidden)
|
||||
{
|
||||
let hostPlayerName = Engine.GetGUIObjectByName("hostPlayerName").caption;
|
||||
let hostServerName = Engine.GetGUIObjectByName("hostServerName").caption;
|
||||
if (startHost(hostPlayerName, hostServerName))
|
||||
switchSetupPage("pageHost", "pageConnecting");
|
||||
switchSetupPage("pageConnecting");
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,31 +228,38 @@ function pollAndHandleNetworkClient()
|
||||
}
|
||||
}
|
||||
|
||||
function switchSetupPage(oldpage, newpage)
|
||||
function switchSetupPage(newPage)
|
||||
{
|
||||
Engine.GetGUIObjectByName(oldpage).hidden = true;
|
||||
Engine.GetGUIObjectByName(newpage).hidden = false;
|
||||
Engine.GetGUIObjectByName("continueButton").hidden = true;
|
||||
for (let page of Engine.GetGUIObjectByName("multiplayerPages").children)
|
||||
if (page.name.substr(0,4) == "page")
|
||||
page.hidden = true;
|
||||
|
||||
Engine.GetGUIObjectByName(newPage).hidden = false;
|
||||
|
||||
Engine.GetGUIObjectByName("hostPlayerNameWrapper").hidden = Engine.HasXmppClient();
|
||||
Engine.GetGUIObjectByName("hostServerNameWrapper").hidden = !Engine.HasXmppClient();
|
||||
|
||||
Engine.GetGUIObjectByName("continueButton").hidden = newPage == "pageConnecting";
|
||||
}
|
||||
|
||||
function startHost(playername, servername)
|
||||
{
|
||||
startConnectionStatus("server");
|
||||
|
||||
// Save player name
|
||||
Engine.ConfigDB_CreateValue("user", "playername.multiplayer", playername);
|
||||
Engine.ConfigDB_WriteValueToFile("user", "playername.multiplayer", playername, "config/user.cfg");
|
||||
|
||||
// Disallow identically named games in the multiplayer lobby
|
||||
if (Engine.HasXmppClient())
|
||||
if (Engine.HasXmppClient() &&
|
||||
Engine.GetGameList().some(game => game.name == servername))
|
||||
{
|
||||
for (let g of Engine.GetGameList())
|
||||
{
|
||||
if (g.name === servername)
|
||||
{
|
||||
Engine.GetGUIObjectByName("hostFeedback").caption = translate("Game name already in use.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
cancelSetup();
|
||||
Engine.GetGUIObjectByName("hostFeedback").caption =
|
||||
translate("Game name already in use.");
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (g_UserRating)
|
||||
@ -246,7 +278,6 @@ function startHost(playername, servername)
|
||||
return false;
|
||||
}
|
||||
|
||||
startConnectionStatus("server");
|
||||
g_ServerName = servername;
|
||||
|
||||
if (Engine.HasXmppClient())
|
||||
|
@ -10,7 +10,7 @@
|
||||
<!-- Add a translucent black background to fade out the menu page -->
|
||||
<object type="image" sprite="ModernFade"/>
|
||||
|
||||
<object type="image" style="ModernDialog" size="50%-230 50%-120 50%+230 50%+120">
|
||||
<object name="multiplayerPages" type="image" style="ModernDialog" size="50%-230 50%-120 50%+230 50%+120">
|
||||
|
||||
<action on="Tick">
|
||||
onTick();
|
||||
|
Loading…
Reference in New Issue
Block a user