Fix selected map in server creation panel not updating

This commit is contained in:
Gustas
2023-08-05 22:52:10 +03:00
committed by Matthias Mailänder
parent 0dcb341059
commit e22d7b31f9
3 changed files with 30 additions and 112 deletions

View File

@@ -11,7 +11,6 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Linq;
using OpenRA.Network; using OpenRA.Network;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Widgets; using OpenRA.Widgets;
@@ -58,7 +57,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
readonly LabelWidget noticesLabelA, noticesLabelB, noticesLabelC; readonly LabelWidget noticesLabelA, noticesLabelB, noticesLabelC;
readonly Action onCreate; readonly Action onCreate;
readonly Action onExit; readonly Action onExit;
MapPreview preview = MapCache.UnknownMap; MapPreview map = MapCache.UnknownMap;
bool advertiseOnline; bool advertiseOnline;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
@@ -70,7 +69,20 @@ namespace OpenRA.Mods.Common.Widgets.Logic
this.onExit = onExit; this.onExit = onExit;
var settings = Game.Settings; var settings = Game.Settings;
preview = modData.MapCache[modData.MapCache.ChooseInitialMap(modData.MapCache.PickLastModifiedMap(MapVisibility.Lobby) ?? Game.Settings.Server.Map, Game.CosmeticRandom)];
map = modData.MapCache[modData.MapCache.ChooseInitialMap(modData.MapCache.PickLastModifiedMap(MapVisibility.Lobby) ?? Game.Settings.Server.Map, Game.CosmeticRandom)];
Ui.LoadWidget("MAP_PREVIEW", panel.Get("MAP_PREVIEW_ROOT"), new WidgetArgs
{
{ "orderManager", null },
{ "getMap", (Func<(MapPreview, Session.MapStatus)>)(() => (map, Session.MapStatus.Playable)) },
{ "onMouseDown", null },
{ "getSpawnOccupants", null },
{ "getDisabledSpawnPoints", null },
{ "showUnoccupiedSpawnpoints", false },
{ "mapUpdatesEnabled", true },
{ "onMapUpdate", (Action<string>)(uid => map = modData.MapCache[uid]) },
});
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin; panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin;
@@ -82,50 +94,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
Ui.OpenWindow("MAPCHOOSER_PANEL", new WidgetArgs() Ui.OpenWindow("MAPCHOOSER_PANEL", new WidgetArgs()
{ {
{ "initialMap", preview.Uid }, { "initialMap", map.Uid },
{ "initialTab", MapClassification.System }, { "initialTab", MapClassification.System },
{ "onExit", () => { } }, { "onExit", () => modData.MapCache.UpdateMaps() },
{ "onSelect", (Action<string>)(uid => preview = modData.MapCache[uid]) }, { "onSelect", (Action<string>)(uid => map = modData.MapCache[uid]) },
{ "filter", MapVisibility.Lobby }, { "filter", MapVisibility.Lobby },
{ "onStart", () => { } } { "onStart", () => { } }
}); });
}; };
panel.Get<MapPreviewWidget>("MAP_PREVIEW").Preview = () => preview;
var titleLabel = panel.GetOrNull<LabelWithTooltipWidget>("MAP_TITLE");
if (titleLabel != null)
{
var font = Game.Renderer.Fonts[titleLabel.Font];
var title = new CachedTransform<MapPreview, string>(m =>
{
var truncated = WidgetUtils.TruncateText(m.Title, titleLabel.Bounds.Width, font);
if (m.Title != truncated)
titleLabel.GetTooltipText = () => m.Title;
else
titleLabel.GetTooltipText = null;
return truncated;
});
titleLabel.GetText = () => title.Update(preview);
}
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 {m.Author}", authorLabel.Bounds.Width, font));
authorLabel.GetText = () => author.Update(preview);
}
} }
var serverName = panel.Get<TextFieldWidget>("SERVER_NAME"); var serverName = panel.Get<TextFieldWidget>("SERVER_NAME");
@@ -221,6 +197,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
void CreateAndJoin() void CreateAndJoin()
{ {
// Refresh MapCache.
if (modData.MapCache[map.Uid].Status != MapStatus.Available)
return;
var name = Game.Settings.SanitizedServerName(panel.Get<TextFieldWidget>("SERVER_NAME").Text); var name = Game.Settings.SanitizedServerName(panel.Get<TextFieldWidget>("SERVER_NAME").Text);
if (!int.TryParse(panel.Get<TextFieldWidget>("LISTEN_PORT").Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var listenPort)) if (!int.TryParse(panel.Get<TextFieldWidget>("LISTEN_PORT").Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var listenPort))
listenPort = 1234; listenPort = 1234;
@@ -228,18 +208,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var passwordField = panel.GetOrNull<PasswordFieldWidget>("PASSWORD"); var passwordField = panel.GetOrNull<PasswordFieldWidget>("PASSWORD");
var password = passwordField != null ? passwordField.Text : ""; var password = passwordField != null ? passwordField.Text : "";
// Save new settings // Save new settings.
Game.Settings.Server.Name = name; Game.Settings.Server.Name = name;
Game.Settings.Server.ListenPort = listenPort; Game.Settings.Server.ListenPort = listenPort;
Game.Settings.Server.AdvertiseOnline = advertiseOnline; Game.Settings.Server.AdvertiseOnline = advertiseOnline;
Game.Settings.Server.Map = preview.Uid; Game.Settings.Server.Map = map.Uid;
Game.Settings.Server.Password = password; Game.Settings.Server.Password = password;
Game.Settings.Save(); Game.Settings.Save();
// Take a copy so that subsequent changes don't affect the server // Take a copy so that subsequent changes don't affect the server.
var settings = Game.Settings.Server.Clone(); var settings = Game.Settings.Server.Clone();
// Create and join the server // Create and join the server.
try try
{ {
var endpoint = Game.CreateServer(settings); var endpoint = Game.CreateServer(settings);

View File

@@ -204,42 +204,11 @@ Container@MULTIPLAYER_CREATESERVER_PANEL:
Font: Tiny Font: Tiny
Align: Left Align: Left
Text: - You can disable UPnP/NAT-PMP in the settings menu. Text: - You can disable UPnP/NAT-PMP in the settings menu.
Background@MAP_BG: Container@MAP_PREVIEW_ROOT:
X: PARENT_RIGHT - 189 X: PARENT_RIGHT - 189
Y: 15 Y: 15
Width: 174 Width: 174
Height: 174 Height: 250
Background: panel-gray
Children:
MapPreview@MAP_PREVIEW:
X: 1
Y: 1
Width: PARENT_RIGHT - 2
Height: PARENT_RIGHT - 2
LabelWithTooltip@MAP_TITLE:
X: PARENT_RIGHT - 189
Y: 187
Width: 174
Height: 25
Font: Bold
Align: Center
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@MAP_TYPE:
X: PARENT_RIGHT - 189
Y: 202
Width: 174
Height: 25
Font: TinyBold
Align: Center
IgnoreMouseOver: true
Label@MAP_AUTHOR:
X: PARENT_RIGHT - 189
Y: 215
Width: 174
Height: 25
Font: Tiny
Align: Center
Button@BACK_BUTTON: Button@BACK_BUTTON:
Key: return Key: return
Y: PARENT_BOTTOM - 1 Y: PARENT_BOTTOM - 1

View File

@@ -199,42 +199,11 @@ Background@MULTIPLAYER_CREATESERVER_PANEL:
Font: Tiny Font: Tiny
Align: Left Align: Left
Text: - You can disable UPnP/NAT-PMP in the settings menu. Text: - You can disable UPnP/NAT-PMP in the settings menu.
Background@MAP_BG: Container@MAP_PREVIEW_ROOT:
X: PARENT_RIGHT - 194 X: PARENT_RIGHT - 194
Y: 45 Y: 45
Width: 174 Width: 174
Height: 174 Height: 250
Background: dialog3
Children:
MapPreview@MAP_PREVIEW:
X: 1
Y: 1
Width: PARENT_RIGHT - 2
Height: PARENT_RIGHT - 2
LabelWithTooltip@MAP_TITLE:
X: PARENT_RIGHT - 194
Y: 218
Width: 174
Height: 25
Font: Bold
Align: Center
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Label@MAP_TYPE:
X: PARENT_RIGHT - 194
Y: 233
Width: 174
Height: 25
Font: TinyBold
Align: Center
IgnoreMouseOver: true
Label@MAP_AUTHOR:
X: PARENT_RIGHT - 194
Y: 246
Width: 174
Height: 25
Font: Tiny
Align: Center
Button@MAP_BUTTON: Button@MAP_BUTTON:
X: 20 X: 20
Y: PARENT_BOTTOM - 45 Y: PARENT_BOTTOM - 45