Initial commit: OpenRA game engine
Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
79
OpenRA.Mods.Common/Widgets/Logic/ReplayUtils.cs
Normal file
79
OpenRA.Mods.Common/Widgets/Logic/ReplayUtils.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright (c) The OpenRA Developers and Contributors
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation, either version 3 of
|
||||
* the License, or (at your option) any later version. For more
|
||||
* information, see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using OpenRA.FileFormats;
|
||||
|
||||
namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
public static class ReplayUtils
|
||||
{
|
||||
[FluentReference]
|
||||
const string IncompatibleReplayTitle = "dialog-incompatible-replay.title";
|
||||
|
||||
[FluentReference]
|
||||
const string IncompatibleReplayPrompt = "dialog-incompatible-replay.prompt";
|
||||
|
||||
[FluentReference]
|
||||
const string IncompatibleReplayAccept = "dialog-incompatible-replay.confirm";
|
||||
|
||||
[FluentReference]
|
||||
const string UnknownVersion = "dialog-incompatible-replay.prompt-unknown-version";
|
||||
|
||||
[FluentReference]
|
||||
const string UnknownMod = "dialog-incompatible-replay.prompt-unknown-mod";
|
||||
|
||||
[FluentReference("mod")]
|
||||
const string UnvailableMod = "dialog-incompatible-replay.prompt-unavailable-mod";
|
||||
|
||||
[FluentReference("version")]
|
||||
const string IncompatibleVersion = "dialog-incompatible-replay.prompt-incompatible-version";
|
||||
|
||||
[FluentReference("map")]
|
||||
const string UnvailableMap = "dialog-incompatible-replay.prompt-unavailable-map";
|
||||
|
||||
static readonly Action DoNothing = () => { };
|
||||
|
||||
public static bool PromptConfirmReplayCompatibility(ReplayMetadata replayMeta, ModData modData, Action onCancel = null)
|
||||
{
|
||||
onCancel ??= DoNothing;
|
||||
|
||||
if (replayMeta == null)
|
||||
return IncompatibleReplayDialog(modData, onCancel, IncompatibleReplayPrompt);
|
||||
|
||||
var version = replayMeta.GameInfo.Version;
|
||||
if (version == null)
|
||||
return IncompatibleReplayDialog(modData, onCancel, UnknownVersion);
|
||||
|
||||
var mod = replayMeta.GameInfo.Mod;
|
||||
if (mod == null)
|
||||
return IncompatibleReplayDialog(modData, onCancel, UnknownMod);
|
||||
|
||||
if (!Game.Mods.ContainsKey(mod))
|
||||
return IncompatibleReplayDialog(modData, onCancel, UnvailableMod, "mod", mod);
|
||||
|
||||
if (Game.Mods[mod].Metadata.Version != version)
|
||||
return IncompatibleReplayDialog(modData, onCancel, IncompatibleVersion, "version", version);
|
||||
|
||||
if (replayMeta.GameInfo.GetMapPreview(modData).Status != MapStatus.Available)
|
||||
return IncompatibleReplayDialog(modData, onCancel, UnvailableMap, "map", replayMeta.GameInfo.MapUid);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool IncompatibleReplayDialog(ModData modData, Action onCancel, string text, params object[] args)
|
||||
{
|
||||
ConfirmationDialogs.ButtonPrompt(
|
||||
modData, IncompatibleReplayTitle, text, textArguments: args, onCancel: onCancel, cancelText: IncompatibleReplayAccept);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user