Don't crash when joining a game after asset installation.

This commit is contained in:
Matthias Mailänder
2022-04-13 13:18:22 +02:00
committed by Pavel Penev
parent 0f90713aba
commit 648c56bca1
9 changed files with 12 additions and 36 deletions

View File

@@ -419,7 +419,6 @@ namespace OpenRA
Console.WriteLine($"\t{mod.Key}: {mod.Value.Title} ({mod.Value.Version})");
InitializeMod(modID, args);
Ui.InitializeTranslation();
}
public static void InitializeMod(string mod, Arguments args)

View File

@@ -21,7 +21,6 @@ using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Support;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA
{
@@ -1370,7 +1369,7 @@ namespace OpenRA
public string Translate(string key, IDictionary<string, object> args = null, string attribute = null)
{
if (Translation.GetFormattedMessage(key, args, attribute) == key)
return Ui.Translate(key, args, attribute);
return modData.Translation.GetFormattedMessage(key, args, attribute);
return Translation.GetFormattedMessage(key, args, attribute);
}

View File

@@ -36,6 +36,7 @@ namespace OpenRA
public readonly IModelSequenceLoader ModelSequenceLoader;
public readonly IVideoLoader[] VideoLoaders;
public readonly HotkeyManager Hotkeys;
public readonly Translation Translation;
public ILoadScreen LoadScreen { get; private set; }
public CursorProvider CursorProvider { get; private set; }
public FS ModFiles;
@@ -95,7 +96,7 @@ namespace OpenRA
var modelFormat = Manifest.Get<ModelSequenceFormat>();
var modelLoader = ObjectCreator.FindType(modelFormat.Type + "Loader");
var modelCtor = modelLoader != null ? modelLoader.GetConstructor(new[] { typeof(ModData) }) : null;
var modelCtor = modelLoader?.GetConstructor(new[] { typeof(ModData) });
if (modelLoader == null || !modelLoader.GetInterfaces().Contains(typeof(IModelSequenceLoader)) || modelCtor == null)
throw new InvalidOperationException($"Unable to find a model loader for type '{modelFormat.Type}'.");
@@ -104,6 +105,8 @@ namespace OpenRA
Hotkeys = new HotkeyManager(ModFiles, Game.Settings.Keys, Manifest);
Translation = new Translation(Game.Settings.Player.Language, Manifest.Translations, DefaultFileSystem);
defaultRules = Exts.Lazy(() => Ruleset.LoadDefaults(this));
defaultTerrainInfo = Exts.Lazy(() =>
{

View File

@@ -14,7 +14,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Fluent.Net;
using OpenRA.Widgets;
namespace OpenRA.Network
{
@@ -119,7 +118,7 @@ namespace OpenRA.Network
.JoinWith("\n");
}
public string Translate()
public string Translate(ModData modData)
{
var argumentDictionary = new Dictionary<string, object>();
foreach (var argument in Arguments)
@@ -130,7 +129,7 @@ namespace OpenRA.Network
argumentDictionary.Add(argument.Key, new FluentString(argument.Value));
}
return Ui.Translate(Key, argumentDictionary);
return modData.Translation.GetFormattedMessage(Key, argumentDictionary);
}
}
}

View File

@@ -44,7 +44,7 @@ namespace OpenRA.Network
foreach (var node in yaml)
{
var localizedMessage = new LocalizedMessage(node.Value);
TextNotificationsManager.AddSystemLine(localizedMessage.Translate());
TextNotificationsManager.AddSystemLine(localizedMessage.Translate(Game.ModData));
}
break;

View File

@@ -27,7 +27,6 @@ using OpenRA.Network;
using OpenRA.Primitives;
using OpenRA.Support;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Server
{
@@ -936,7 +935,7 @@ namespace OpenRA.Server
DispatchServerOrdersToClients(Order.FromTargetString("LocalizedMessage", text, true));
if (Type == ServerType.Dedicated)
Console.WriteLine($"[{DateTime.Now.ToString(Settings.TimestampFormat)}] {Ui.Translate(key, arguments)}");
Console.WriteLine($"[{DateTime.Now.ToString(Settings.TimestampFormat)}] {ModData.Translation.GetFormattedMessage(key, arguments)}");
}
public void SendLocalizedMessageTo(Connection conn, string key, Dictionary<string, object> arguments = null)

View File

@@ -44,7 +44,7 @@ namespace OpenRA
messageContexts = GetMessageContext(language, translations, fileSystem).ToList();
}
IEnumerable<MessageContext> GetMessageContext(string language, string[] translations, IReadOnlyFileSystem fileSystem)
static IEnumerable<MessageContext> GetMessageContext(string language, string[] translations, IReadOnlyFileSystem fileSystem)
{
var backfall = translations.Where(t => t.EndsWith("en.ftl"));
var paths = translations.Where(t => t.EndsWith(language + ".ftl"));

View File

@@ -33,8 +33,6 @@ namespace OpenRA.Widgets
public static Widget KeyboardFocusWidget;
public static Widget MouseOverWidget;
internal static Translation Translation;
public static void CloseWindow()
{
if (WindowList.Count > 0)
@@ -158,27 +156,6 @@ namespace OpenRA.Widgets
HandleInput(new MouseInput(MouseInputEvent.Move, MouseButton.None,
Viewport.LastMousePos, int2.Zero, Modifiers.None, 0));
}
public static void InitializeTranslation()
{
Translation = new Translation(Game.Settings.Player.Language, Game.ModData.Manifest.Translations, Game.ModData.DefaultFileSystem);
}
public static string Translate(string key, IDictionary<string, object> args = null, string attribute = null)
{
if (Translation == null)
return null;
return Translation.GetFormattedMessage(key, args, attribute);
}
public static string TranslationAttribute(string key, string attribute = null)
{
if (Translation == null)
return null;
return Translation.GetAttribute(key, attribute);
}
}
public class ChromeLogic : IDisposable

View File

@@ -86,7 +86,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
bool passwordOffsetAdjusted;
[ObjectCreator.UseCtor]
public ConnectionFailedLogic(Widget widget, OrderManager orderManager, NetworkConnection connection, string password, Action onAbort, Action<string> onRetry)
public ConnectionFailedLogic(Widget widget, ModData modData, OrderManager orderManager, NetworkConnection connection, string password, Action onAbort, Action<string> onRetry)
{
var panel = widget;
var abortButton = panel.Get<ButtonWidget>("ABORT_BUTTON");
@@ -107,7 +107,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
widget.Get<LabelWidget>("CONNECTING_DESC").GetText = () => $"Could not connect to {connection.Target}";
var connectionError = widget.Get<LabelWidget>("CONNECTION_ERROR");
connectionError.GetText = () => Ui.Translate(orderManager.ServerError) ?? connection.ErrorMessage ?? "Unknown error";
connectionError.GetText = () => modData.Translation.GetFormattedMessage(orderManager.ServerError) ?? connection.ErrorMessage ?? "Unknown error";
var panelTitle = widget.Get<LabelWidget>("TITLE");
panelTitle.GetText = () => orderManager.AuthenticationFailed ? "Password Required" : "Connection Failed";