Unify and tweak layout of MP browser window.

This commit is contained in:
Paul Chote
2017-12-22 14:45:52 +00:00
committed by abcdefg30
parent 959804b167
commit 0b446167b6
9 changed files with 434 additions and 460 deletions

View File

@@ -81,15 +81,129 @@ namespace OpenRA.Mods.Common.Widgets.Logic
gameStartedColor = ChromeMetrics.Get<Color>("GameStartedColor"); gameStartedColor = ChromeMetrics.Get<Color>("GameStartedColor");
incompatibleGameStartedColor = ChromeMetrics.Get<Color>("IncompatibleGameStartedColor"); incompatibleGameStartedColor = ChromeMetrics.Get<Color>("IncompatibleGameStartedColor");
LoadBrowserPanel(widget); serverList = widget.Get<ScrollPanelWidget>("SERVER_LIST");
headerTemplate = serverList.Get<ScrollItemWidget>("HEADER_TEMPLATE");
serverTemplate = serverList.Get<ScrollItemWidget>("SERVER_TEMPLATE");
// Filter and refresh buttons act on the browser panel, var join = widget.Get<ButtonWidget>("JOIN_BUTTON");
// but remain visible (disabled) on the other panels join.IsVisible = () => currentServer != null;
var refreshButton = widget.Get<ButtonWidget>("REFRESH_BUTTON"); join.IsDisabled = () => !currentServer.IsJoinable;
refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching; join.OnClick = () => Join(currentServer);
var filtersButton = widget.Get<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON"); // Display the progress label over the server list
filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching; // The text is only visible when the list is empty
var progressText = widget.Get<LabelWidget>("PROGRESS_LABEL");
progressText.IsVisible = () => searchStatus != SearchStatus.Hidden;
progressText.GetText = ProgressLabelText;
var gs = Game.Settings.Game;
Action<MPGameFilters> toggleFilterFlag = f =>
{
gs.MPGameFilters ^= f;
Game.Settings.Save();
RefreshServerList();
};
var filtersPanel = Ui.LoadWidget("MULTIPLAYER_FILTER_PANEL", null, new WidgetArgs());
var showWaitingCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("WAITING_FOR_PLAYERS");
if (showWaitingCheckbox != null)
{
showWaitingCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Waiting);
showWaitingCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Waiting);
}
var showEmptyCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("EMPTY");
if (showEmptyCheckbox != null)
{
showEmptyCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Empty);
showEmptyCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Empty);
}
var showAlreadyStartedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("ALREADY_STARTED");
if (showAlreadyStartedCheckbox != null)
{
showAlreadyStartedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Started);
showAlreadyStartedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Started);
}
var showProtectedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("PASSWORD_PROTECTED");
if (showProtectedCheckbox != null)
{
showProtectedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Protected);
showProtectedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Protected);
}
var showIncompatibleCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("INCOMPATIBLE_VERSION");
if (showIncompatibleCheckbox != null)
{
showIncompatibleCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Incompatible);
showIncompatibleCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Incompatible);
}
var filtersButton = widget.GetOrNull<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON");
if (filtersButton != null)
{
filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
filtersButton.OnMouseDown = _ =>
{
filtersButton.RemovePanel();
filtersButton.AttachPanel(filtersPanel);
};
}
var refreshButton = widget.GetOrNull<ButtonWidget>("REFRESH_BUTTON");
if (refreshButton != null)
{
refreshButton.GetText = () => searchStatus == SearchStatus.Fetching ? "Refreshing..." : "Refresh";
refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
refreshButton.OnClick = RefreshServerList;
}
var mapPreview = widget.GetOrNull<MapPreviewWidget>("SELECTED_MAP_PREVIEW");
if (mapPreview != null)
mapPreview.Preview = () => currentMap;
var mapTitle = widget.GetOrNull<LabelWidget>("SELECTED_MAP");
if (mapTitle != null)
{
var font = Game.Renderer.Fonts[mapTitle.Font];
var title = new CachedTransform<MapPreview, string>(m => m == null ? "No Server Selected" :
WidgetUtils.TruncateText(m.Title, mapTitle.Bounds.Width, font));
mapTitle.GetText = () => title.Update(currentMap);
}
var ip = widget.GetOrNull<LabelWidget>("SELECTED_IP");
if (ip != null)
{
ip.IsVisible = () => currentServer != null;
ip.GetText = () => currentServer.Address;
}
var status = widget.GetOrNull<LabelWidget>("SELECTED_STATUS");
if (status != null)
{
status.IsVisible = () => currentServer != null;
status.GetText = () => GetStateLabel(currentServer);
status.GetColor = () => GetStateColor(currentServer, status);
}
var modVersion = widget.GetOrNull<LabelWidget>("SELECTED_MOD_VERSION");
if (modVersion != null)
{
modVersion.IsVisible = () => currentServer != null;
modVersion.GetColor = () => currentServer.IsCompatible ? modVersion.TextColor : incompatibleVersionColor;
var font = Game.Renderer.Fonts[modVersion.Font];
var version = new CachedTransform<GameServer, string>(s => WidgetUtils.TruncateText(s.ModLabel, mapTitle.Bounds.Width, font));
modVersion.GetText = () => version.Update(currentServer);
}
var players = widget.GetOrNull<LabelWidget>("SELECTED_PLAYERS");
if (players != null)
{
players.IsVisible = () => currentServer != null;
players.GetText = () => PlayersLabel(currentServer);
}
var directConnectButton = widget.Get<ButtonWidget>("DIRECTCONNECT_BUTTON"); var directConnectButton = widget.Get<ButtonWidget>("DIRECTCONNECT_BUTTON");
directConnectButton.OnClick = () => directConnectButton.OnClick = () =>
@@ -149,129 +263,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
} }
} }
void LoadBrowserPanel(Widget widget)
{
var browserPanel = Game.LoadWidget(null, "MULTIPLAYER_BROWSER_PANEL", widget.Get("TOP_PANELS_ROOT"), new WidgetArgs());
serverList = browserPanel.Get<ScrollPanelWidget>("SERVER_LIST");
headerTemplate = serverList.Get<ScrollItemWidget>("HEADER_TEMPLATE");
serverTemplate = serverList.Get<ScrollItemWidget>("SERVER_TEMPLATE");
var join = widget.Get<ButtonWidget>("JOIN_BUTTON");
join.IsDisabled = () => currentServer == null || !currentServer.IsJoinable;
join.OnClick = () => Join(currentServer);
// Display the progress label over the server list
// The text is only visible when the list is empty
var progressText = widget.Get<LabelWidget>("PROGRESS_LABEL");
progressText.IsVisible = () => searchStatus != SearchStatus.Hidden;
progressText.GetText = ProgressLabelText;
var gs = Game.Settings.Game;
Action<MPGameFilters> toggleFilterFlag = f =>
{
gs.MPGameFilters ^= f;
Game.Settings.Save();
RefreshServerList();
};
var filtersPanel = Ui.LoadWidget("MULTIPLAYER_FILTER_PANEL", null, new WidgetArgs());
var showWaitingCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("WAITING_FOR_PLAYERS");
if (showWaitingCheckbox != null)
{
showWaitingCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Waiting);
showWaitingCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Waiting);
}
var showEmptyCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("EMPTY");
if (showEmptyCheckbox != null)
{
showEmptyCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Empty);
showEmptyCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Empty);
}
var showAlreadyStartedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("ALREADY_STARTED");
if (showAlreadyStartedCheckbox != null)
{
showAlreadyStartedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Started);
showAlreadyStartedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Started);
}
var showProtectedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("PASSWORD_PROTECTED");
if (showProtectedCheckbox != null)
{
showProtectedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Protected);
showProtectedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Protected);
}
var showIncompatibleCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("INCOMPATIBLE_VERSION");
if (showIncompatibleCheckbox != null)
{
showIncompatibleCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Incompatible);
showIncompatibleCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Incompatible);
}
var filtersButton = widget.GetOrNull<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON");
if (filtersButton != null)
{
filtersButton.OnMouseDown = _ =>
{
filtersButton.RemovePanel();
filtersButton.AttachPanel(filtersPanel);
};
}
var refreshButton = widget.Get<ButtonWidget>("REFRESH_BUTTON");
refreshButton.GetText = () => searchStatus == SearchStatus.Fetching ? "Refreshing..." : "Refresh";
refreshButton.OnClick = RefreshServerList;
var mapPreview = widget.GetOrNull<MapPreviewWidget>("SELECTED_MAP_PREVIEW");
if (mapPreview != null)
mapPreview.Preview = () => currentMap;
var mapTitle = widget.GetOrNull<LabelWidget>("SELECTED_MAP");
if (mapTitle != null)
{
var font = Game.Renderer.Fonts[mapTitle.Font];
var title = new CachedTransform<MapPreview, string>(m => m == null ? "No Server Selected" :
WidgetUtils.TruncateText(m.Title, mapTitle.Bounds.Width, font));
mapTitle.GetText = () => title.Update(currentMap);
}
var ip = widget.GetOrNull<LabelWidget>("SELECTED_IP");
if (ip != null)
{
ip.IsVisible = () => currentServer != null;
ip.GetText = () => currentServer.Address;
}
var status = widget.GetOrNull<LabelWidget>("SELECTED_STATUS");
if (status != null)
{
status.IsVisible = () => currentServer != null;
status.GetText = () => GetStateLabel(currentServer);
status.GetColor = () => GetStateColor(currentServer, status);
}
var modVersion = widget.GetOrNull<LabelWidget>("SELECTED_MOD_VERSION");
if (modVersion != null)
{
modVersion.IsVisible = () => currentServer != null;
modVersion.GetColor = () => currentServer.IsCompatible ? modVersion.TextColor : incompatibleVersionColor;
var font = Game.Renderer.Fonts[modVersion.Font];
var version = new CachedTransform<GameServer, string>(s => WidgetUtils.TruncateText(s.ModLabel, mapTitle.Bounds.Width, font));
modVersion.GetText = () => version.Update(currentServer);
}
var players = widget.GetOrNull<LabelWidget>("SELECTED_PLAYERS");
if (players != null)
{
players.IsVisible = () => currentServer != null;
players.GetText = () => PlayersLabel(currentServer);
}
}
string PlayersLabel(GameServer game) string PlayersLabel(GameServer game)
{ {
return "{0}{1}{2}".F( return "{0}{1}{2}".F(

View File

@@ -1,139 +1,233 @@
Container@MULTIPLAYER_BROWSER_PANEL: Container@MULTIPLAYER_PANEL:
Width: PARENT_RIGHT Logic: MultiplayerLogic
Height: PARENT_BOTTOM X: (WINDOW_RIGHT - WIDTH) / 2
Y: (WINDOW_BOTTOM - 560) / 2
Width: 800
Height: 575
Children: Children:
Container@LABEL_CONTAINER: Label@TITLE:
Y: 5 Text: Multiplayer
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Y: 0 - 25
Font: BigBold
Contrast: true
Align: Center
Background@bg:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM - 35
Background: panel-black
Children: Children:
Label@NAME: Container@LABEL_CONTAINER:
X: 5 X: 15
Width: 255 Y: 5
Height: 25 Width: PARENT_RIGHT
Text: Server Height: PARENT_BOTTOM
Align: Center
Font: Bold
Label@PLAYERS:
X: 290
Width: 85
Height: 25
Text: Players
Font: Bold
Label@LOCATION:
X: 380
Width: 110
Height: 25
Text: Location
Font: Bold
Label@STATUS:
X: 495
Width: 50
Height: 25
Text: Status
Font: Bold
ScrollPanel@SERVER_LIST:
Y: 30
Width: 582
Height: 249
TopBottomSpacing: 2
Children:
ScrollItem@HEADER_TEMPLATE:
Width: PARENT_RIGHT - 27
Height: 20
X: 2
Visible: false
Children: Children:
Label@LABEL: Label@NAME:
Y: 0 - 1
Font: TinyBold
Width: PARENT_RIGHT
Height: 20
Align: Center
ScrollItem@SERVER_TEMPLATE:
Width: PARENT_RIGHT - 27
Height: 25
X: 2
Children:
Label@TITLE:
X: 5 X: 5
Width: 255 Width: 255
Height: 25 Height: 25
Image@PASSWORD_PROTECTED: Text: Server
X: 272 Align: Center
Y: 6 Font: Bold
Width: 8
Height: 10
ImageCollection: lobby-bits
Label@PLAYERS: Label@PLAYERS:
X: 290 X: 290
Width: 85 Width: 85
Height: 25 Height: 25
Text: Players
Font: Bold
Label@LOCATION: Label@LOCATION:
X: 380 X: 380
Width: 110 Width: 110
Height: 25 Height: 25
Text: Location
Font: Bold
Label@STATUS: Label@STATUS:
X: 495 X: 495
Width: 50 Width: 50
Height: 25 Height: 25
Label@PROGRESS_LABEL: Text: Status
Y: 30 + (249 - HEIGHT) / 2 Font: Bold
Width: 582 ScrollPanel@SERVER_LIST:
Height: 25 X: 15
Font: Bold Y: 30
Align: Center Width: 582
Visible: false Height: PARENT_BOTTOM - 75
Container@SELECTED_SERVER: TopBottomSpacing: 2
X: PARENT_RIGHT - WIDTH
Y: 30
Width: 174
Height: 280
Children:
Background@MAP_BG:
Width: PARENT_RIGHT
Height: 174
Background: panel-gray
Children: Children:
MapPreview@SELECTED_MAP_PREVIEW: ScrollItem@HEADER_TEMPLATE:
X: 1 Width: PARENT_RIGHT - 27
Y: 1 Height: 20
Width: PARENT_RIGHT - 2 X: 2
Height: PARENT_BOTTOM - 2 Visible: false
Label@SELECTED_MAP: Children:
Y: 172 Label@LABEL:
Width: PARENT_RIGHT Y: 0 - 1
Font: TinyBold
Width: PARENT_RIGHT
Height: 20
Align: Center
ScrollItem@SERVER_TEMPLATE:
Width: PARENT_RIGHT - 27
Height: 25
X: 2
Children:
Label@TITLE:
X: 5
Width: 255
Height: 25
Image@PASSWORD_PROTECTED:
X: 272
Y: 6
Width: 8
Height: 10
ImageCollection: lobby-bits
Label@PLAYERS:
X: 290
Width: 85
Height: 25
Label@LOCATION:
X: 380
Width: 110
Height: 25
Label@STATUS:
X: 495
Width: 50
Height: 25
Label@PROGRESS_LABEL:
X: 15
Y: 30 + (PARENT_BOTTOM - 75 - HEIGHT) / 2
Width: 582
Height: 25 Height: 25
Font: Bold Font: Bold
Align: Center Align: Center
Label@SELECTED_IP: Visible: false
Y: 187 Container@SELECTED_SERVER:
Width: PARENT_RIGHT X: PARENT_RIGHT - WIDTH - 15
Y: 30
Width: 174
Height: 280
Children:
Background@MAP_BG:
Width: PARENT_RIGHT
Height: 174
Background: panel-gray
Children:
MapPreview@SELECTED_MAP_PREVIEW:
X: 1
Y: 1
Width: PARENT_RIGHT - 2
Height: PARENT_BOTTOM - 2
Label@SELECTED_MAP:
Y: 172
Width: PARENT_RIGHT
Height: 25
Font: Bold
Align: Center
Label@SELECTED_IP:
Y: 187
Width: PARENT_RIGHT
Height: 25
Font: Tiny
Align: Center
Label@SELECTED_STATUS:
Y: 203
Width: PARENT_RIGHT
Height: 25
Font: TinyBold
Align: Center
Label@SELECTED_MOD_VERSION:
Y: 216
Width: PARENT_RIGHT
Height: 25
Font: Tiny
Align: Center
Label@SELECTED_PLAYERS:
Y: 229
Width: PARENT_RIGHT
Height: 25
Font: TinyBold
Align: Center
Button@JOIN_BUTTON:
Key: return
Y: 255
Width: PARENT_RIGHT
Height: 25
Text: Join
DropDownButton@FILTERS_DROPDOWNBUTTON:
X: 15
Y: PARENT_BOTTOM - 40
Width: 152
Height: 25 Height: 25
Font: Tiny Text: Filter Games
Align: Center Button@REFRESH_BUTTON:
Label@SELECTED_STATUS: X: 172
Y: 203 Y: PARENT_BOTTOM - 40
Width: PARENT_RIGHT Width: 100
Height: 25 Height: 25
Font: TinyBold Text: Refresh
Align: Center Button@DIRECTCONNECT_BUTTON:
Label@SELECTED_MOD_VERSION: X: 387
Y: 216 Y: PARENT_BOTTOM - 40
Width: PARENT_RIGHT Width: 100
Height: 25 Height: 25
Font: Tiny Text: Direct IP
Align: Center Button@CREATE_BUTTON:
Label@SELECTED_PLAYERS: X: 492
Y: 229 Y: PARENT_BOTTOM - 40
Width: PARENT_RIGHT Width: 105
Height: 25 Height: 25
Font: TinyBold Text: Create
Align: Center Button@BACK_BUTTON:
Button@JOIN_BUTTON: Key: escape
Key: return X: 0
X: PARENT_RIGHT - WIDTH Y: PARENT_BOTTOM - 36
Y: 284 Width: 140
Width: 174 Height: 35
Height: 25 Text: Back
Text: Join TooltipContainer@TOOLTIP_CONTAINER:
ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 147
Height: 130
Background: panel-black
Children:
Checkbox@WAITING_FOR_PLAYERS:
X: 5
Y: 5
Width: PARENT_RIGHT - 29
Height: 20
Text: Waiting
TextColor: 32CD32
Font: Regular
Checkbox@EMPTY:
X: 5
Y: 30
Width: PARENT_RIGHT - 29
Height: 20
Text: Empty
Font: Regular
Checkbox@PASSWORD_PROTECTED:
X: 5
Y: 55
Width: PARENT_RIGHT - 29
Height: 20
Text: Protected
TextColor: FF0000
Font: Regular
Checkbox@ALREADY_STARTED:
X: 5
Y: 80
Width: PARENT_RIGHT - 29
Height: 20
Text: Started
TextColor: FFA500
Font: Regular
Checkbox@INCOMPATIBLE_VERSION:
X: 5
Y: 105
Width: PARENT_RIGHT - 29
Height: 20
Text: Incompatible
TextColor: BEBEBE
Font: Regular

View File

@@ -1,100 +0,0 @@
Container@MULTIPLAYER_PANEL:
Logic: MultiplayerLogic
X: (WINDOW_RIGHT - WIDTH) / 2
Y: (WINDOW_BOTTOM - 345) / 2
Width: 800
Height: 360
Children:
Label@TITLE:
Text: Multiplayer
Width: PARENT_RIGHT
Y: 0 - 25
Font: BigBold
Contrast: true
Align: Center
Background@bg:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM - 35
Background: panel-black
Children:
DropDownButton@FILTERS_DROPDOWNBUTTON:
X: 15
Y: 284
Width: 152
Height: 25
Text: Filter Games
Button@REFRESH_BUTTON:
X: 172
Y: 284
Width: 100
Height: 25
Text: Refresh
Button@DIRECTCONNECT_BUTTON:
X: 387
Y: 284
Width: 100
Height: 25
Text: Direct IP
Button@CREATE_BUTTON:
X: 492
Y: 284
Width: 105
Height: 25
Text: Create
Container@TOP_PANELS_ROOT:
X: 15
Width: PARENT_RIGHT - 30
Height: PARENT_BOTTOM
TooltipContainer@TOOLTIP_CONTAINER:
Button@BACK_BUTTON:
Key: escape
X: 0
Y: PARENT_BOTTOM - 36
Width: 140
Height: 35
Text: Back
ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 147
Height: 130
Background: panel-black
Children:
Checkbox@WAITING_FOR_PLAYERS:
X: 5
Y: 5
Width: PARENT_RIGHT - 29
Height: 20
Text: Waiting
TextColor: 32CD32
Font: Regular
Checkbox@EMPTY:
X: 5
Y: 30
Width: PARENT_RIGHT - 29
Height: 20
Text: Empty
Font: Regular
Checkbox@PASSWORD_PROTECTED:
X: 5
Y: 55
Width: PARENT_RIGHT - 29
Height: 20
Text: Protected
TextColor: FF0000
Font: Regular
Checkbox@ALREADY_STARTED:
X: 5
Y: 80
Width: PARENT_RIGHT - 29
Height: 20
Text: Started
TextColor: FFA500
Font: Regular
Checkbox@INCOMPATIBLE_VERSION:
X: 5
Y: 105
Width: PARENT_RIGHT - 29
Height: 20
Text: Incompatible
TextColor: BEBEBE
Font: Regular

View File

@@ -89,7 +89,6 @@ Assemblies:
ChromeLayout: ChromeLayout:
cnc|chrome/mainmenu.yaml cnc|chrome/mainmenu.yaml
cnc|chrome/multiplayer.yaml
cnc|chrome/multiplayer-browser.yaml cnc|chrome/multiplayer-browser.yaml
cnc|chrome/multiplayer-createserver.yaml cnc|chrome/multiplayer-createserver.yaml
cnc|chrome/multiplayer-directconnect.yaml cnc|chrome/multiplayer-directconnect.yaml

View File

@@ -1,9 +1,20 @@
Container@MULTIPLAYER_BROWSER_PANEL: Background@MULTIPLAYER_PANEL:
Width: PARENT_RIGHT Logic: MultiplayerLogic
Height: PARENT_BOTTOM X: (WINDOW_RIGHT - WIDTH) / 2
Y: (WINDOW_BOTTOM - HEIGHT) / 2
Width: 808
Height: 600
Children: Children:
Label@TITLE:
Y: 15
Width: PARENT_RIGHT
Height: 25
Text: Multiplayer
Align: Center
Font: Bold
Container@LABEL_CONTAINER: Container@LABEL_CONTAINER:
Y: 5 X: 20
Y: 42
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
Children: Children:
@@ -33,9 +44,10 @@ Container@MULTIPLAYER_BROWSER_PANEL:
Text: Status Text: Status
Font: Bold Font: Bold
ScrollPanel@SERVER_LIST: ScrollPanel@SERVER_LIST:
Y: 30 X: 20
Y: 67
Width: 583 Width: 583
Height: 279 Height: PARENT_BOTTOM - 119
TopBottomSpacing: 2 TopBottomSpacing: 2
Children: Children:
ScrollItem@HEADER_TEMPLATE: ScrollItem@HEADER_TEMPLATE:
@@ -79,15 +91,16 @@ Container@MULTIPLAYER_BROWSER_PANEL:
Width: 50 Width: 50
Height: 25 Height: 25
Label@PROGRESS_LABEL: Label@PROGRESS_LABEL:
Y: 30 + (249 - HEIGHT) / 2 X: 20
Y: 67 + (PARENT_BOTTOM - 119 - HEIGHT) / 2
Width: 582 Width: 582
Height: 25 Height: 25
Font: Bold Font: Bold
Align: Center Align: Center
Visible: false Visible: false
Container@SELECTED_SERVER: Container@SELECTED_SERVER:
X: PARENT_RIGHT - WIDTH X: PARENT_RIGHT - WIDTH - 20
Y: 30 Y: 67
Width: 174 Width: 174
Height: 280 Height: 280
Children: Children:
@@ -131,11 +144,91 @@ Container@MULTIPLAYER_BROWSER_PANEL:
Height: 25 Height: 25
Font: TinyBold Font: TinyBold
Align: Center Align: Center
Button@JOIN_BUTTON: Button@JOIN_BUTTON:
Key: return Key: return
X: PARENT_RIGHT - WIDTH Y: 255
Y: 284 Width: PARENT_RIGHT
Height: 25
Text: Join
Font: Bold
DropDownButton@FILTERS_DROPDOWNBUTTON:
X: 20
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 158
Height: 25
Text: Filter Games
Font: Bold
Button@REFRESH_BUTTON:
X: 182
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Refresh
Font: Bold
Button@DIRECTCONNECT_BUTTON:
X: 398
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Direct IP
Font: Bold
Button@CREATE_BUTTON:
X: 503
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Create
Font: Bold
Button@BACK_BUTTON:
Key: escape
X: PARENT_RIGHT - WIDTH - 20
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 174 Width: 174
Height: 25 Height: 25
Text: Join Text: Back
Font: Bold Font: Bold
TooltipContainer@TOOLTIP_CONTAINER:
ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 158
Height: 130
Children:
Checkbox@WAITING_FOR_PLAYERS:
X: 5
Y: 5
Width: PARENT_RIGHT - 29
Height: 20
Text: Waiting
TextColor: 32CD32
Font: Regular
Checkbox@EMPTY:
X: 5
Y: 30
Width: PARENT_RIGHT - 29
Height: 20
Text: Empty
Font: Regular
Checkbox@PASSWORD_PROTECTED:
X: 5
Y: 55
Width: PARENT_RIGHT - 29
Height: 20
Text: Protected
TextColor: FF0000
Font: Regular
Checkbox@ALREADY_STARTED:
X: 5
Y: 80
Width: PARENT_RIGHT - 29
Height: 20
Text: Started
TextColor: FFA500
Font: Regular
Checkbox@INCOMPATIBLE_VERSION:
X: 5
Y: 105
Width: PARENT_RIGHT - 29
Height: 20
Text: Incompatible
TextColor: BEBEBE
Font: Regular

View File

@@ -1,100 +0,0 @@
Background@MULTIPLAYER_PANEL:
Logic: MultiplayerLogic
X: (WINDOW_RIGHT - WIDTH) / 2
Y: (WINDOW_BOTTOM - HEIGHT) / 2
Width: 808
Height: 395
Children:
Label@TITLE:
Y: 15
Width: PARENT_RIGHT
Height: 25
Text: Multiplayer
Align: Center
Font: Bold
DropDownButton@FILTERS_DROPDOWNBUTTON:
X: 20
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 158
Height: 25
Text: Filter Games
Font: Bold
Button@REFRESH_BUTTON:
X: 182
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Refresh
Font: Bold
Button@DIRECTCONNECT_BUTTON:
X: 398
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Direct IP
Font: Bold
Button@CREATE_BUTTON:
X: 503
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 100
Height: 25
Text: Create
Font: Bold
Container@TOP_PANELS_ROOT:
X: 20
Y: 37
Width: PARENT_RIGHT - 40
Height: PARENT_BOTTOM - 87
TooltipContainer@TOOLTIP_CONTAINER:
Button@BACK_BUTTON:
Key: escape
X: PARENT_RIGHT - WIDTH - 20
Y: PARENT_BOTTOM - HEIGHT - 20
Width: 174
Height: 25
Text: Back
Font: Bold
ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 158
Height: 130
Children:
Checkbox@WAITING_FOR_PLAYERS:
X: 5
Y: 5
Width: PARENT_RIGHT - 29
Height: 20
Text: Waiting
TextColor: 32CD32
Font: Regular
Checkbox@EMPTY:
X: 5
Y: 30
Width: PARENT_RIGHT - 29
Height: 20
Text: Empty
Font: Regular
Checkbox@PASSWORD_PROTECTED:
X: 5
Y: 55
Width: PARENT_RIGHT - 29
Height: 20
Text: Protected
TextColor: FF0000
Font: Regular
Checkbox@ALREADY_STARTED:
X: 5
Y: 80
Width: PARENT_RIGHT - 29
Height: 20
Text: Started
TextColor: FFA500
Font: Regular
Checkbox@INCOMPATIBLE_VERSION:
X: 5
Y: 105
Width: PARENT_RIGHT - 29
Height: 20
Text: Incompatible
TextColor: BEBEBE
Font: Regular

View File

@@ -90,7 +90,6 @@ ChromeLayout:
common|chrome/lobby-kickdialogs.yaml common|chrome/lobby-kickdialogs.yaml
common|chrome/color-picker.yaml common|chrome/color-picker.yaml
common|chrome/map-chooser.yaml common|chrome/map-chooser.yaml
common|chrome/multiplayer.yaml
common|chrome/multiplayer-browser.yaml common|chrome/multiplayer-browser.yaml
common|chrome/multiplayer-createserver.yaml common|chrome/multiplayer-createserver.yaml
common|chrome/multiplayer-directconnect.yaml common|chrome/multiplayer-directconnect.yaml

View File

@@ -105,7 +105,6 @@ ChromeLayout:
common|chrome/lobby-kickdialogs.yaml common|chrome/lobby-kickdialogs.yaml
common|chrome/color-picker.yaml common|chrome/color-picker.yaml
common|chrome/map-chooser.yaml common|chrome/map-chooser.yaml
common|chrome/multiplayer.yaml
common|chrome/multiplayer-browser.yaml common|chrome/multiplayer-browser.yaml
common|chrome/multiplayer-createserver.yaml common|chrome/multiplayer-createserver.yaml
common|chrome/multiplayer-directconnect.yaml common|chrome/multiplayer-directconnect.yaml

View File

@@ -153,7 +153,6 @@ ChromeLayout:
common|chrome/lobby-kickdialogs.yaml common|chrome/lobby-kickdialogs.yaml
ts|chrome/color-picker.yaml ts|chrome/color-picker.yaml
common|chrome/map-chooser.yaml common|chrome/map-chooser.yaml
common|chrome/multiplayer.yaml
common|chrome/multiplayer-browser.yaml common|chrome/multiplayer-browser.yaml
common|chrome/multiplayer-createserver.yaml common|chrome/multiplayer-createserver.yaml
common|chrome/multiplayer-directconnect.yaml common|chrome/multiplayer-directconnect.yaml