From 16ff9fbc8e124b013dfc36dc86ad78d75594ad8a Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 9 Sep 2018 05:49:20 +0000 Subject: [PATCH] Fix menu/exit fade effect for paused replays. --- .../PaletteEffects/MenuPaletteEffect.cs | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs index 33fb902718..be7d66a5d6 100644 --- a/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs +++ b/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Collections.Generic; using System.Drawing; using OpenRA.Graphics; using OpenRA.Traits; @@ -30,28 +31,45 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new MenuPaletteEffect(this); } } - public class MenuPaletteEffect : IPaletteModifier, ITickRender, IWorldLoaded + public class MenuPaletteEffect : IPaletteModifier, IRender, IWorldLoaded { public enum EffectType { None, Black, Desaturated } public readonly MenuPaletteEffectInfo Info; - int remainingFrames; EffectType from = EffectType.Black; EffectType to = EffectType.Black; + float frac = 0; + long startTime; + long endTime; + public MenuPaletteEffect(MenuPaletteEffectInfo info) { Info = info; } public void Fade(EffectType type) { - remainingFrames = Info.FadeLength; + startTime = Game.RunTime; + endTime = startTime + Game.Timestep * Info.FadeLength; + frac = 1; + from = to; to = type; } - void ITickRender.TickRender(WorldRenderer wr, Actor self) + IEnumerable IRender.Render(Actor self, WorldRenderer wr) { - if (remainingFrames > 0) - remainingFrames--; + if (endTime == 0) + yield break; + + frac = (endTime - Game.RunTime) * 1f / (endTime - startTime); + if (frac < 0) + frac = startTime = endTime = 0; + + yield break; + } + + IEnumerable IRender.ScreenBounds(Actor self, WorldRenderer wr) + { + yield break; } static Color ColorForEffect(EffectType t, Color orig) @@ -71,7 +89,7 @@ namespace OpenRA.Mods.Common.Traits public void AdjustPalette(IReadOnlyDictionary palettes) { - if (to == EffectType.None && remainingFrames == 0) + if (to == EffectType.None && endTime == 0) return; foreach (var pal in palettes.Values) @@ -81,12 +99,12 @@ namespace OpenRA.Mods.Common.Traits var orig = pal.GetColor(x); var t = ColorForEffect(to, orig); - if (remainingFrames == 0) + if (endTime == 0) pal.SetColor(x, t); else { var f = ColorForEffect(from, orig); - pal.SetColor(x, Exts.ColorLerp((float)remainingFrames / Info.FadeLength, t, f)); + pal.SetColor(x, Exts.ColorLerp(frac, t, f)); } } }