From 413507929057a07db2648180b1ef9c3d62f438ea Mon Sep 17 00:00:00 2001 From: penev92 Date: Thu, 26 Jan 2023 20:56:12 +0200 Subject: [PATCH] Unify MediaGlobal/Scripting.Media PlayFMV* methods - Improve consistency - Remove dead code - Removed AsyncAction! - Delegate.BeginInvoke is unsupported since .NET Core and throws an "Operation is not supported on this platform." exception. --- OpenRA.Game/Effects/AsyncAction.cs | 39 ------------------ .../Scripting/Global/MediaGlobal.cs | 40 +++---------------- OpenRA.Mods.Common/Scripting/Media.cs | 29 ++++++-------- 3 files changed, 19 insertions(+), 89 deletions(-) delete mode 100644 OpenRA.Game/Effects/AsyncAction.cs diff --git a/OpenRA.Game/Effects/AsyncAction.cs b/OpenRA.Game/Effects/AsyncAction.cs deleted file mode 100644 index 1f31262245..0000000000 --- a/OpenRA.Game/Effects/AsyncAction.cs +++ /dev/null @@ -1,39 +0,0 @@ -#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 System.Collections.Generic; -using OpenRA.Graphics; - -namespace OpenRA.Effects -{ - public class AsyncAction : IEffect - { - readonly Action a; - readonly IAsyncResult ar; - - public AsyncAction(IAsyncResult ar, Action a) - { - this.a = a; - this.ar = ar; - } - - public void Tick(World world) - { - if (ar.IsCompleted) - { - world.AddFrameEndTask(w => { w.Remove(this); a(); }); - } - } - - public IEnumerable Render(WorldRenderer r) { yield break; } - } -} diff --git a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs index 24e6389088..240a99fc3a 100644 --- a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs +++ b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs @@ -10,15 +10,12 @@ #endregion using System; -using System.IO; using Eluant; -using OpenRA.Effects; using OpenRA.GameRules; using OpenRA.Mods.Common.Effects; using OpenRA.Mods.Common.Traits; using OpenRA.Primitives; using OpenRA.Scripting; -using OpenRA.Video; namespace OpenRA.Mods.Common.Scripting { @@ -96,41 +93,18 @@ namespace OpenRA.Mods.Common.Scripting playlist.Stop(); } - [Desc("Play a VQA video fullscreen. File name has to include the file extension.")] - public void PlayMovieFullscreen(string movie, LuaFunction onPlayComplete = null) + [Desc("Play a video fullscreen. File name has to include the file extension.")] + public void PlayMovieFullscreen(string videoFileName, LuaFunction onPlayComplete = null) { var onComplete = WrapOnPlayComplete(onPlayComplete); - Media.PlayFMVFullscreen(world, movie, onComplete); + Media.PlayFMVFullscreen(world, videoFileName, onComplete); } - [Desc("Play a VQA video in the radar window. File name has to include the file extension. " + - "Returns true on success, if the movie wasn't found the function returns false and the callback is executed.")] - public bool PlayMovieInRadar(string movie, LuaFunction onPlayComplete = null) + [Desc("Play a video in the radar window. File name has to include the file extension.")] + public void PlayMovieInRadar(string videoFileName, LuaFunction onPlayComplete = null) { var onComplete = WrapOnPlayComplete(onPlayComplete); - - Stream s; - try - { - s = world.Map.Open(movie); - } - catch (FileNotFoundException e) - { - Log.Write("lua", $"Couldn't play movie {e.FileName}! File doesn't exist."); - onComplete(); - return false; - } - - var l = new AsyncLoader(Media.LoadVideo); - var ar = l.BeginInvoke(s, null, null); - Action onLoadComplete = () => - { - Media.StopFMVInRadar(); - world.AddFrameEndTask(_ => Media.PlayFMVInRadar(l.EndInvoke(ar), onComplete)); - }; - - world.AddFrameEndTask(w => w.Add(new AsyncAction(ar, onLoadComplete))); - return true; + Media.PlayFMVInRadar(videoFileName, onComplete); } [Desc("Display a text message to all players.")] @@ -183,8 +157,6 @@ namespace OpenRA.Mods.Common.Scripting world.AddFrameEndTask(w => w.Add(new FloatingText(position, c, text, duration))); } - public delegate IVideo AsyncLoader(Stream s); - Action WrapOnPlayComplete(LuaFunction onPlayComplete) { Action onComplete; diff --git a/OpenRA.Mods.Common/Scripting/Media.cs b/OpenRA.Mods.Common/Scripting/Media.cs index 900c390ffe..21b12a5fb7 100644 --- a/OpenRA.Mods.Common/Scripting/Media.cs +++ b/OpenRA.Mods.Common/Scripting/Media.cs @@ -12,21 +12,20 @@ using System; using System.IO; using OpenRA.Mods.Common.Widgets; -using OpenRA.Video; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Scripting { public static class Media { - public static void PlayFMVFullscreen(World w, string movie, Action onComplete) + public static void PlayFMVFullscreen(World w, string videoFileName, Action onComplete) { var playerRoot = Game.OpenWindow(w, "FMVPLAYER"); var player = playerRoot.Get("PLAYER"); try { - player.Load(movie); + player.Load(videoFileName); } catch (FileNotFoundException) { @@ -60,10 +59,19 @@ namespace OpenRA.Mods.Common.Scripting }); } - public static void PlayFMVInRadar(IVideo movie, Action onComplete) + public static void PlayFMVInRadar(string videoFileName, Action onComplete) { var player = Ui.Root.Get("PLAYER"); - player.Open(movie); + + try + { + player.Load(videoFileName); + } + catch (FileNotFoundException) + { + onComplete(); + return; + } player.PlayThen(() => { @@ -71,16 +79,5 @@ namespace OpenRA.Mods.Common.Scripting player.CloseVideo(); }); } - - public static void StopFMVInRadar() - { - var player = Ui.Root.Get("PLAYER"); - player.Stop(); - } - - public static IVideo LoadVideo(Stream s) - { - return VideoLoader.GetVideo(s, true, Game.ModData.VideoLoaders); - } } }