diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index d570f0e5ed..b366bd4fd9 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -190,7 +190,8 @@ namespace OpenRA else if (orderManager.NetFrameNumber == 0) orderManager.LastTickTime = Environment.TickCount; - + + world.TickRender(worldRenderer); viewport.Tick(); } } diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 42b75205ab..d04f5d5bde 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -34,6 +34,7 @@ namespace OpenRA.Traits } public interface ITick { void Tick(Actor self); } + public interface ITickRender { void TickRender(WorldRenderer wr, Actor self); } public interface IRender { IEnumerable Render(Actor self, WorldRenderer wr); } public interface IAutoSelectionSize { int2 SelectionSize(Actor self); } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 833fc29427..58ad20884b 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.Effects; using OpenRA.FileFormats; +using OpenRA.Graphics; using OpenRA.Network; using OpenRA.Orders; using OpenRA.Support; @@ -192,7 +193,12 @@ namespace OpenRA while (frameEndActions.Count != 0) frameEndActions.Dequeue()(this); - + } + + // For things that want to update their render state once per tick, ignoring pause state + public void TickRender(WorldRenderer wr) + { + ActorsWithTrait().Do(x => x.Trait.TickRender(wr, x.Actor)); } public IEnumerable Actors { get { return actors; } } diff --git a/OpenRA.Mods.Cnc/CncMenuPaletteEffect.cs b/OpenRA.Mods.Cnc/CncMenuPaletteEffect.cs index a351b80128..71ee66a307 100644 --- a/OpenRA.Mods.Cnc/CncMenuPaletteEffect.cs +++ b/OpenRA.Mods.Cnc/CncMenuPaletteEffect.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Drawing; using OpenRA.FileFormats; +using OpenRA.Graphics; using OpenRA.Traits; namespace OpenRA.Mods.Cnc @@ -22,7 +23,7 @@ namespace OpenRA.Mods.Cnc public object Create(ActorInitializer init) { return new CncMenuPaletteEffect(this); } } - public class CncMenuPaletteEffect : IPaletteModifier, ITick + public class CncMenuPaletteEffect : IPaletteModifier, ITickRender { public enum EffectType { None, Black, Desaturated } public readonly CncMenuPaletteEffectInfo Info; @@ -40,7 +41,7 @@ namespace OpenRA.Mods.Cnc to = type; } - public void Tick(Actor self) + public void TickRender(WorldRenderer wr, Actor self) { if (remainingFrames > 0) remainingFrames--;