Restore separated server creation dialog.

This also adds details about advertising and configuration.
This commit is contained in:
Paul Chote
2017-12-22 13:59:18 +00:00
committed by abcdefg30
parent 5256fb7bbd
commit 959804b167
7 changed files with 633 additions and 272 deletions

View File

@@ -26,9 +26,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
static readonly Action DoNothing = () => { }; static readonly Action DoNothing = () => { };
enum PanelType { Browser, CreateServer }
PanelType panel = PanelType.Browser;
readonly Color incompatibleVersionColor; readonly Color incompatibleVersionColor;
readonly Color incompatibleProtectedGameColor; readonly Color incompatibleProtectedGameColor;
readonly Color protectedGameColor; readonly Color protectedGameColor;
@@ -85,19 +82,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
incompatibleGameStartedColor = ChromeMetrics.Get<Color>("IncompatibleGameStartedColor"); incompatibleGameStartedColor = ChromeMetrics.Get<Color>("IncompatibleGameStartedColor");
LoadBrowserPanel(widget); LoadBrowserPanel(widget);
LoadCreateServerPanel(widget);
// Filter and refresh buttons act on the browser panel, // Filter and refresh buttons act on the browser panel,
// but remain visible (disabled) on the other panels // but remain visible (disabled) on the other panels
var refreshButton = widget.Get<ButtonWidget>("REFRESH_BUTTON"); var refreshButton = widget.Get<ButtonWidget>("REFRESH_BUTTON");
refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching || panel != PanelType.Browser; refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
var filtersButton = widget.Get<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON"); var filtersButton = widget.Get<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON");
filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching || panel != PanelType.Browser; filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
var browserTab = widget.Get<ButtonWidget>("BROWSER_TAB");
browserTab.IsHighlighted = () => panel == PanelType.Browser;
browserTab.OnClick = () => panel = PanelType.Browser;
var directConnectButton = widget.Get<ButtonWidget>("DIRECTCONNECT_BUTTON"); var directConnectButton = widget.Get<ButtonWidget>("DIRECTCONNECT_BUTTON");
directConnectButton.OnClick = () => directConnectButton.OnClick = () =>
@@ -111,9 +103,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}); });
}; };
var createServerTab = widget.Get<ButtonWidget>("CREATE_TAB"); var createServerButton = widget.Get<ButtonWidget>("CREATE_BUTTON");
createServerTab.IsHighlighted = () => panel == PanelType.CreateServer; createServerButton.OnClick = () =>
createServerTab.OnClick = () => panel = PanelType.CreateServer; {
Ui.OpenWindow("MULTIPLAYER_CREATESERVER_PANEL", new WidgetArgs
{
{ "openLobby", OpenLobby },
{ "onExit", DoNothing }
});
};
widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
@@ -154,7 +152,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
void LoadBrowserPanel(Widget widget) void LoadBrowserPanel(Widget widget)
{ {
var browserPanel = Game.LoadWidget(null, "MULTIPLAYER_BROWSER_PANEL", widget.Get("TOP_PANELS_ROOT"), new WidgetArgs()); var browserPanel = Game.LoadWidget(null, "MULTIPLAYER_BROWSER_PANEL", widget.Get("TOP_PANELS_ROOT"), new WidgetArgs());
browserPanel.IsVisible = () => panel == PanelType.Browser;
serverList = browserPanel.Get<ScrollPanelWidget>("SERVER_LIST"); serverList = browserPanel.Get<ScrollPanelWidget>("SERVER_LIST");
headerTemplate = serverList.Get<ScrollItemWidget>("HEADER_TEMPLATE"); headerTemplate = serverList.Get<ScrollItemWidget>("HEADER_TEMPLATE");
@@ -275,18 +272,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
} }
} }
void LoadCreateServerPanel(Widget widget)
{
var createServerPanel = Game.LoadWidget(null, "MULTIPLAYER_CREATESERVER_PANEL",
widget.Get("TOP_PANELS_ROOT"), new WidgetArgs
{
{ "openLobby", OpenLobby },
{ "onExit", DoNothing }
});
createServerPanel.IsVisible = () => panel == PanelType.CreateServer;
}
string PlayersLabel(GameServer game) string PlayersLabel(GameServer game)
{ {
return "{0}{1}{2}".F( return "{0}{1}{2}".F(
@@ -553,15 +538,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}); });
} }
void OpenCreateServerPanel()
{
Ui.OpenWindow("CREATESERVER_PANEL", new WidgetArgs
{
{ "openLobby", OpenLobby },
{ "onExit", DoNothing }
});
}
void Join(GameServer server) void Join(GameServer server)
{ {
if (server == null || !server.IsJoinable) if (server == null || !server.IsJoinable)

View File

@@ -10,16 +10,20 @@
#endregion #endregion
using System; using System;
using System.Drawing;
using System.Linq;
using System.Net; using System.Net;
using OpenRA.Network;
using OpenRA.Widgets; using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic namespace OpenRA.Mods.Common.Widgets.Logic
{ {
public class ServerCreationLogic : ChromeLogic public class ServerCreationLogic : ChromeLogic
{ {
Widget panel; readonly Widget panel;
Action onCreate; readonly LabelWidget noticesLabelA, noticesLabelB, noticesLabelC;
Action onExit; readonly Action onCreate;
readonly Action onExit;
MapPreview preview = MapCache.UnknownMap; MapPreview preview = MapCache.UnknownMap;
bool advertiseOnline; bool advertiseOnline;
@@ -33,6 +37,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var settings = Game.Settings; var settings = Game.Settings;
preview = modData.MapCache[modData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom)]; preview = modData.MapCache[modData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom)];
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin; panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin;
var mapButton = panel.GetOrNull<ButtonWidget>("MAP_BUTTON"); var mapButton = panel.GetOrNull<ButtonWidget>("MAP_BUTTON");
@@ -53,12 +58,29 @@ namespace OpenRA.Mods.Common.Widgets.Logic
panel.Get<MapPreviewWidget>("MAP_PREVIEW").Preview = () => preview; panel.Get<MapPreviewWidget>("MAP_PREVIEW").Preview = () => preview;
var mapTitle = panel.Get<LabelWidget>("MAP_NAME"); var titleLabel = panel.GetOrNull<LabelWithTooltipWidget>("MAP_TITLE");
if (mapTitle != null) if (titleLabel != null)
{ {
var font = Game.Renderer.Fonts[mapTitle.Font]; var font = Game.Renderer.Fonts[titleLabel.Font];
var title = new CachedTransform<MapPreview, string>(m => WidgetUtils.TruncateText(m.Title, mapTitle.Bounds.Width, font)); var title = new CachedTransform<MapPreview, string>(m => WidgetUtils.TruncateText(m.Title, titleLabel.Bounds.Width, font));
mapTitle.GetText = () => title.Update(preview); titleLabel.GetText = () => title.Update(preview);
titleLabel.GetTooltipText = () => preview.Title;
}
var typeLabel = panel.GetOrNull<LabelWidget>("MAP_TYPE");
if (typeLabel != null)
{
var type = new CachedTransform<MapPreview, string>(m => m.Categories.FirstOrDefault() ?? "");
typeLabel.GetText = () => type.Update(preview);
}
var authorLabel = panel.GetOrNull<LabelWidget>("MAP_AUTHOR");
if (authorLabel != null)
{
var font = Game.Renderer.Fonts[authorLabel.Font];
var author = new CachedTransform<MapPreview, string>(
m => WidgetUtils.TruncateText("Created by {0}".F(m.Author), authorLabel.Bounds.Width, font));
authorLabel.GetText = () => author.Update(preview);
} }
} }
@@ -81,11 +103,80 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var advertiseCheckbox = panel.Get<CheckboxWidget>("ADVERTISE_CHECKBOX"); var advertiseCheckbox = panel.Get<CheckboxWidget>("ADVERTISE_CHECKBOX");
advertiseCheckbox.IsChecked = () => advertiseOnline; advertiseCheckbox.IsChecked = () => advertiseOnline;
advertiseCheckbox.OnClick = () => advertiseOnline ^= true; advertiseCheckbox.OnClick = () =>
{
advertiseOnline ^= true;
BuildNotices();
};
var passwordField = panel.GetOrNull<PasswordFieldWidget>("PASSWORD"); var passwordField = panel.GetOrNull<PasswordFieldWidget>("PASSWORD");
if (passwordField != null) if (passwordField != null)
passwordField.Text = Game.Settings.Server.Password; passwordField.Text = Game.Settings.Server.Password;
noticesLabelA = panel.GetOrNull<LabelWidget>("NOTICES_HEADER_A");
noticesLabelB = panel.GetOrNull<LabelWidget>("NOTICES_HEADER_B");
noticesLabelC = panel.GetOrNull<LabelWidget>("NOTICES_HEADER_C");
var noticesNoUPnP = panel.GetOrNull("NOTICES_NO_UPNP");
if (noticesNoUPnP != null)
{
noticesNoUPnP.IsVisible = () => advertiseOnline &&
(UPnP.Status == UPnPStatus.NotSupported || UPnP.Status == UPnPStatus.Disabled);
var settingsA = noticesNoUPnP.GetOrNull("SETTINGS_A");
if (settingsA != null)
settingsA.IsVisible = () => UPnP.Status == UPnPStatus.Disabled;
var settingsB = noticesNoUPnP.GetOrNull("SETTINGS_B");
if (settingsB != null)
settingsB.IsVisible = () => UPnP.Status == UPnPStatus.Disabled;
}
var noticesUPnP = panel.GetOrNull("NOTICES_UPNP");
if (noticesUPnP != null)
noticesUPnP.IsVisible = () => advertiseOnline && UPnP.Status == UPnPStatus.Enabled;
var noticesLAN = panel.GetOrNull("NOTICES_LAN");
if (noticesLAN != null)
noticesLAN.IsVisible = () => !advertiseOnline;
BuildNotices();
}
void BuildNotices()
{
if (noticesLabelA == null || noticesLabelB == null || noticesLabelC == null)
return;
if (advertiseOnline)
{
noticesLabelA.Text = "Internet Server (UPnP ";
var aWidth = Game.Renderer.Fonts[noticesLabelA.Font].Measure(noticesLabelA.Text).X;
noticesLabelA.Bounds.Width = aWidth;
var status = UPnP.Status;
noticesLabelB.Text = status == UPnPStatus.Enabled ? "Enabled" :
status == UPnPStatus.NotSupported ? "Not Supported" : "Disabled";
noticesLabelB.TextColor = status == UPnPStatus.Enabled ? ChromeMetrics.Get<Color>("UPnPEnabledColor") :
status == UPnPStatus.NotSupported ? ChromeMetrics.Get<Color>("UPnPNotSupportedColor") :
ChromeMetrics.Get<Color>("UPnPDisabledColor");
var bWidth = Game.Renderer.Fonts[noticesLabelB.Font].Measure(noticesLabelB.Text).X;
noticesLabelB.Bounds.X = noticesLabelA.Bounds.Right;
noticesLabelB.Bounds.Width = bWidth;
noticesLabelB.Visible = true;
noticesLabelC.Text = "):";
noticesLabelC.Bounds.X = noticesLabelB.Bounds.Right;
noticesLabelC.Visible = true;
}
else
{
noticesLabelA.Text = "Local Server:";
noticesLabelB.Visible = false;
noticesLabelC.Visible = false;
}
} }
void CreateAndJoin() void CreateAndJoin()
@@ -131,6 +222,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return; return;
} }
Ui.CloseWindow();
ConnectionLogic.Connect(IPAddress.Loopback.ToString(), Game.Settings.Server.ListenPort, password, onCreate, onExit); ConnectionLogic.Connect(IPAddress.Loopback.ToString(), Game.Settings.Server.ListenPort, password, onCreate, onExit);
} }
} }

View File

@@ -1,32 +1,30 @@
Container@MULTIPLAYER_CREATESERVER_PANEL: Container@MULTIPLAYER_CREATESERVER_PANEL:
Logic: ServerCreationLogic Logic: ServerCreationLogic
Width: PARENT_RIGHT X: (WINDOW_RIGHT - WIDTH) / 2
Height: PARENT_BOTTOM Y: (WINDOW_BOTTOM - HEIGHT - 15) / 2
Width: 530
Height: 314
Children: Children:
Label@TITLE: Label@TITLE:
Y: 5 Width: PARENT_RIGHT
Width: 582 Y: 0-25
Height: 25 Font: BigBold
Text: Create Server Contrast: true
Align: Center Align: Center
Font: Bold Text: Create Server
ScrollPanel: Background@bg:
Y: 30 Width: PARENT_RIGHT
Width: 582 Height: PARENT_BOTTOM - 35
Height: 249 Background: panel-black
Children:
Container:
X: 185
Y: 25
Children: Children:
Label@SERVER_NAME_LABEL: Label@SERVER_NAME_LABEL:
Y: 14 Y: 14
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Server Name: Text: Server Name:
TextField@SERVER_NAME: TextField@SERVER_NAME:
X: 100 X: 110
Y: 15 Y: 15
Width: 215 Width: 215
MaxLength: 50 MaxLength: 50
@@ -34,65 +32,195 @@ Container@MULTIPLAYER_CREATESERVER_PANEL:
Text: My OpenRA Server Text: My OpenRA Server
Label@PASSWORD_LABEL: Label@PASSWORD_LABEL:
Y: 49 Y: 49
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Password: Text: Password:
PasswordField@PASSWORD: PasswordField@PASSWORD:
X: 100 X: 110
Y: 50 Y: 50
Width: 145 Width: 145
MaxLength: 20 MaxLength: 20
Height: 25 Height: 25
Label@AFTER_PASSWORD_LABEL: Label@AFTER_PASSWORD_LABEL:
X: 255 X: 265
Y: 49 Y: 49
Width: 95 Width: 105
Height: 25 Height: 25
Align: Left Align: Left
Text: (optional) Text: (optional)
Label@LISTEN_PORT_LABEL: Label@LISTEN_PORT_LABEL:
Y: 84 Y: 84
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Port: Text: Port:
TextField@LISTEN_PORT: TextField@LISTEN_PORT:
X: 100 X: 110
Y: 85 Y: 85
Width: 50 Width: 50
Height: 25 Height: 25
MaxLength: 5 MaxLength: 5
Text: 1234 Text: 1234
Checkbox@ADVERTISE_CHECKBOX:
X: 15
Y: 121
Width: 150
Height: 20
Font: Regular
Text: Advertise Online
Label@EXTERNAL_PORT_LABEL: Label@EXTERNAL_PORT_LABEL:
X: 170 X: 180
Y: 84 Y: 119
Width: 90 Width: 90
Height: 25 Height: 25
Align: Right Align: Right
Text: External Port: Text: External Port:
TextField@EXTERNAL_PORT: TextField@EXTERNAL_PORT:
X: 265 X: 275
Y: 85 Y: 120
Width: 50 Width: 50
MaxLength: 5 MaxLength: 5
Height: 25 Height: 25
Text: 1234 Text: 1234
Checkbox@ADVERTISE_CHECKBOX: Label@NOTICES_HEADER_A:
X: 100 X: 15
Y: 135 Y: 165
Width: 150 Height: 25
Height: 20 Align: Left
Font: Regular Font: Bold
Text: Advertise Online Label@NOTICES_HEADER_B:
Container@SIDEBAR: X: 15
X: PARENT_RIGHT - WIDTH Y: 165
Y: 30 Height: 25
Width: 174 Align: Left
Height: 280 Font: Bold
Children: Label@NOTICES_HEADER_C:
Background@MAP_BG: X: 15
Y: 165
Height: 25
Align: Left
Font: Bold
Container@NOTICES_LAN:
X: 20
Y: 185
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network only.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Players can connect using Direct IP from the Internet if you
Label@PORTFORWARD_B:
X: 7
Y: 36
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: manually configure port forwarding on your router.
Container@NOTICES_NO_UPNP:
X: 20
Y: 185
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network and Internet.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your router to allow and forward
Label@PORTFORWARD_B:
X: 7
Y: 36
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: connections from the External Port to your local IP and Port.
Label@SETTINGS_A:
Y: 48
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You can enable UPnP (if supported by your router) in the
Label@SETTINGS_B:
X: 7
Y: 60
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: Advanced tab of the OpenRA settings menu.
Container@NOTICES_UPNP:
X: 20
Y: 185
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network and Internet.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - OpenRA will use UPnP to automaticaly configure port forwarding.
Label@SETTINGS_A:
Y: 36
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You can disable UPnP in the OpenRA settings menu.
Background@MAP_BG:
X: PARENT_RIGHT - 189
Y: 15
Width: 174
Height: 174 Height: 174
Background: panel-gray Background: panel-gray
Children: Children:
@@ -101,22 +229,47 @@ Container@MULTIPLAYER_CREATESERVER_PANEL:
Y: 1 Y: 1
Width: PARENT_RIGHT - 2 Width: PARENT_RIGHT - 2
Height: PARENT_RIGHT - 2 Height: PARENT_RIGHT - 2
Label@MAP_NAME: LabelWithTooltip@MAP_TITLE:
Y: 172 X: PARENT_RIGHT - 189
Width: PARENT_RIGHT Y: 187
Width: 174
Height: 25 Height: 25
Font: Bold Font: Bold
Align: Center Align: Center
Button@MAP_BUTTON: TooltipContainer: TOOLTIP_CONTAINER
X: PARENT_RIGHT - WIDTH TooltipTemplate: SIMPLE_TOOLTIP
Y: 284 - 30 Label@MAP_TYPE:
X: PARENT_RIGHT - 189
Y: 202
Width: 174 Width: 174
Height: 25 Height: 25
Text: Choose Map Font: TinyBold
Align: Center
IgnoreMouseOver: true
Label@MAP_AUTHOR:
X: PARENT_RIGHT - 189
Y: 215
Width: 174
Height: 25
Font: Tiny
Align: Center
Button@MAP_BUTTON:
X: PARENT_RIGHT - 189
Y: PARENT_BOTTOM - 40
Width: 174
Height: 25
Text: Change Map
Button@BACK_BUTTON:
Key: return
Y: PARENT_BOTTOM - 36
Width: 140
Height: 35
Text: Back
Button@CREATE_BUTTON: Button@CREATE_BUTTON:
Key: return Key: return
X: PARENT_RIGHT - WIDTH X: PARENT_RIGHT - WIDTH
Y: 284 Y: PARENT_BOTTOM - 36
Width: 174 Width: 140
Height: 25 Height: 35
Text: Create Text: Create
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -30,22 +30,16 @@ Container@MULTIPLAYER_PANEL:
Height: 25 Height: 25
Text: Refresh Text: Refresh
Button@DIRECTCONNECT_BUTTON: Button@DIRECTCONNECT_BUTTON:
X: 277 X: 387
Y: 284 Y: 284
Width: 100 Width: 100
Height: 25 Height: 25
Text: Direct IP Text: Direct IP
Button@BROWSER_TAB: Button@CREATE_BUTTON:
X: 382
Y: 278
Width: 105
Height: 31
Text: Browse
Button@CREATE_TAB:
X: 492 X: 492
Y: 278 Y: 284
Width: 105 Width: 105
Height: 31 Height: 25
Text: Create Text: Create
Container@TOP_PANELS_ROOT: Container@TOP_PANELS_ROOT:
X: 15 X: 15

View File

@@ -1,98 +1,221 @@
Container@MULTIPLAYER_CREATESERVER_PANEL: Background@MULTIPLAYER_CREATESERVER_PANEL:
Logic: ServerCreationLogic Logic: ServerCreationLogic
Width: PARENT_RIGHT X: (WINDOW_RIGHT - WIDTH)/2
Height: PARENT_BOTTOM Y: (WINDOW_BOTTOM - HEIGHT)/2
Width: 530
Height: 345
Children: Children:
Label@TITLE: Label@TITLE:
Y: 5 Y: 15
Width: 582 Width: PARENT_RIGHT
Height: 25 Height: 25
Text: Create Server Text: Create Server
Align: Center Align: Center
Font: Bold Font: Bold
ScrollPanel:
Y: 30
Width: 583
Height: PARENT_BOTTOM - 30
Children:
Container:
X: 185
Y: 30
Children:
Label@SERVER_NAME_LABEL: Label@SERVER_NAME_LABEL:
Y: 14 Y: 44
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Server Name: Text: Server Name:
TextField@SERVER_NAME: TextField@SERVER_NAME:
X: 100 X: 110
Y: 15 Y: 45
Width: 215 Width: 215
MaxLength: 50 MaxLength: 50
Height: 25 Height: 25
Text: My OpenRA Server Text: My OpenRA Server
Label@PASSWORD_LABEL: Label@PASSWORD_LABEL:
Y: 49 Y: 79
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Password: Text: Password:
PasswordField@PASSWORD: PasswordField@PASSWORD:
X: 100 X: 110
Y: 50 Y: 80
Width: 145 Width: 145
MaxLength: 20 MaxLength: 20
Height: 25 Height: 25
Label@AFTER_PASSWORD_LABEL: Label@AFTER_PASSWORD_LABEL:
X: 255 X: 265
Y: 49 Y: 79
Width: 95 Width: 95
Height: 25 Height: 25
Align: Left Align: Left
Text: (optional) Text: (optional)
Label@LISTEN_PORT_LABEL: Label@LISTEN_PORT_LABEL:
Y: 84 Y: 114
Width: 95 Width: 105
Height: 25 Height: 25
Align: Right Align: Right
Text: Port: Text: Port:
TextField@LISTEN_PORT: TextField@LISTEN_PORT:
X: 100 X: 110
Y: 85 Y: 115
Width: 50 Width: 50
Height: 25 Height: 25
MaxLength: 5 MaxLength: 5
Text: 1234 Text: 1234
Checkbox@ADVERTISE_CHECKBOX:
X: 20
Y: 151
Width: 150
Height: 20
Font: Regular
Text: Advertise Online
Label@EXTERNAL_PORT_LABEL: Label@EXTERNAL_PORT_LABEL:
X: 170 X: 180
Y: 84 Y: 149
Width: 90 Width: 90
Height: 25 Height: 25
Align: Right Align: Right
Text: External Port: Text: External Port:
TextField@EXTERNAL_PORT: TextField@EXTERNAL_PORT:
X: 265 X: 275
Y: 85 Y: 150
Width: 50 Width: 50
MaxLength: 5 MaxLength: 5
Height: 25 Height: 25
Text: 1234 Text: 1234
Checkbox@ADVERTISE_CHECKBOX: Label@NOTICES_HEADER_A:
X: 100 X: 20
Y: 135 Y: 185
Width: 150 Height: 25
Height: 20 Align: Left
Font: Regular Font: Bold
Text: Advertise Online Label@NOTICES_HEADER_B:
Container@SIDEBAR: X: 20
X: PARENT_RIGHT - WIDTH Y: 185
Y: 30 Height: 25
Width: 174 Align: Left
Height: 280 Font: Bold
Children: Label@NOTICES_HEADER_C:
Background@MAP_BG: X: 20
Y: 185
Height: 25
Align: Left
Font: Bold
Container@NOTICES_LAN:
X: 25
Y: 205
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network only.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Players can connect using Direct IP from the Internet if you
Label@PORTFORWARD_B:
X: 7
Y: 36
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: manually configure port forwarding on your router.
Container@NOTICES_NO_UPNP:
X: 25
Y: 205
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network and Internet.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your router to allow and forward
Label@PORTFORWARD_B:
X: 7
Y: 36
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: connections from the External Port to your local IP and Port.
Label@SETTINGS_A:
Y: 48
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You can enable UPnP (if supported by your router) in the
Label@SETTINGS_B:
X: 7
Y: 60
Width: 295
Height: 25
Font: Tiny
Align: Left
Text: Advanced tab of the OpenRA settings menu.
Container@NOTICES_UPNP:
X: 25
Y: 205
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:
Label@ADVERTISING:
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - Game will be advertised to the Local Area Network and Internet.
Label@FIREWALL:
Y: 12
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You must manually configure your firewall to allow connections.
Label@PORTFORWARD_A:
Y: 24
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - OpenRA will use UPnP to automaticaly configure port forwarding.
Label@SETTINGS_A:
Y: 36
Width: 305
Height: 25
Font: Tiny
Align: Left
Text: - You can disable UPnP in the OpenRA settings menu.
Background@MAP_BG:
X: PARENT_RIGHT - 194
Y: 45
Width: 174
Height: 174 Height: 174
Background: dialog3 Background: dialog3
Children: Children:
@@ -101,24 +224,51 @@ Container@MULTIPLAYER_CREATESERVER_PANEL:
Y: 1 Y: 1
Width: PARENT_RIGHT - 2 Width: PARENT_RIGHT - 2
Height: PARENT_RIGHT - 2 Height: PARENT_RIGHT - 2
Label@MAP_NAME: LabelWithTooltip@MAP_TITLE:
Y: 172 X: PARENT_RIGHT - 194
Width: PARENT_RIGHT Y: 217
Width: 174
Height: 25 Height: 25
Font: Bold Font: Bold
Align: Center Align: Center
Button@MAP_BUTTON: TooltipContainer: TOOLTIP_CONTAINER
X: PARENT_RIGHT - WIDTH TooltipTemplate: SIMPLE_TOOLTIP
Y: 240 Label@MAP_TYPE:
X: PARENT_RIGHT - 194
Y: 232
Width: 174 Width: 174
Height: 25 Height: 25
Text: Choose Map Font: TinyBold
Align: Center
IgnoreMouseOver: true
Label@MAP_AUTHOR:
X: PARENT_RIGHT - 194
Y: 245
Width: 174
Height: 25
Font: Tiny
Align: Center
Button@MAP_BUTTON:
X: PARENT_RIGHT - 194
Y: 268
Width: 174
Height: 25
Text: Change Map
Font: Bold Font: Bold
Button@BACK_BUTTON:
X: PARENT_RIGHT - 194
Y: PARENT_BOTTOM - 45
Width: 174
Height: 25
Text: Back
Font: Bold
Key: escape
Button@CREATE_BUTTON: Button@CREATE_BUTTON:
Key: return Key: return
X: PARENT_RIGHT - WIDTH X: 20
Y: PARENT_BOTTOM - 25 Y: PARENT_BOTTOM - 45
Width: 174 Width: 174
Height: 25 Height: 25
Text: Create Text: Create
Font: Bold Font: Bold
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -27,24 +27,17 @@ Background@MULTIPLAYER_PANEL:
Text: Refresh Text: Refresh
Font: Bold Font: Bold
Button@DIRECTCONNECT_BUTTON: Button@DIRECTCONNECT_BUTTON:
X: 288 X: 398
Y: PARENT_BOTTOM - HEIGHT - 20 Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100 Width: 100
Height: 25 Height: 25
Text: Direct IP Text: Direct IP
Font: Bold Font: Bold
Button@BROWSER_TAB: Button@CREATE_BUTTON:
X: 393 X: 503
Y: PARENT_BOTTOM - HEIGHT - 20 Y: PARENT_BOTTOM - HEIGHT - 20
Width: 105 Width: 100
Height: 31 Height: 25
Text: Browse
Font: Bold
Button@CREATE_TAB:
X: 498
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 105
Height: 31
Text: Create Text: Create
Font: Bold Font: Bold
Container@TOP_PANELS_ROOT: Container@TOP_PANELS_ROOT:

View File

@@ -38,3 +38,6 @@ Metrics:
TextfieldColorInvalid: FFC0C0 TextfieldColorInvalid: FFC0C0
TextfieldFont: Regular TextfieldFont: Regular
WaitingGameColor: 00FF00 WaitingGameColor: 00FF00
UPnPDisabledColor: FFFFFF
UPnPEnabledColor: 00FF00
UPnPNotSupportedColor: FF0000