From 565ea05bd78dd2ae010c2c6f83635d50a314e178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 6 Jul 2014 09:23:31 +0200 Subject: [PATCH] fix problem with cnc nuke leaking the long idle sequence Tick and avoid magic numbers --- OpenRA.Game/Graphics/Animation.cs | 13 +++++++++++-- OpenRA.Mods.RA/Render/RenderBuilding.cs | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/OpenRA.Game/Graphics/Animation.cs b/OpenRA.Game/Graphics/Animation.cs index ff8d3cd446..d851c20094 100644 --- a/OpenRA.Game/Graphics/Animation.cs +++ b/OpenRA.Game/Graphics/Animation.cs @@ -23,9 +23,12 @@ namespace OpenRA.Graphics int frame = 0; bool backwards = false; - bool tickAlways; + string name; + readonly int defaultTick = 40; // 25 fps == 40 ms + bool tickAlways; + public string Name { get { return name; } } readonly SequenceProvider sequenceProvider; @@ -66,6 +69,12 @@ namespace OpenRA.Graphics return Render(pos, WVec.Zero, 0, palette, 1f); } + public void Initialize(string sequenceName) + { + CurrentSequence = sequenceProvider.GetSequence(name, sequenceName); + tickAlways = true; + } + public void Play(string sequenceName) { PlayThen(sequenceName, null); @@ -149,7 +158,7 @@ namespace OpenRA.Graphics while (timeUntilNextFrame <= 0) { tickFunc(); - timeUntilNextFrame += CurrentSequence != null ? CurrentSequence.Tick : 40; // 25 fps == 40 ms + timeUntilNextFrame += CurrentSequence != null ? CurrentSequence.Tick : defaultTick; } } } diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index 2cff096996..e30569fbf5 100755 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -49,7 +49,8 @@ namespace OpenRA.Mods.RA.Render this.info = info; skipMakeAnimation = init.Contains(); - DefaultAnimation.PlayRepeating(NormalizeSequence(self, "idle")); + DefaultAnimation.Initialize(NormalizeSequence(self, "idle")); + self.Trait().SetAutodetectedFacings(DefaultAnimation.CurrentSequence.Facings); } @@ -71,6 +72,8 @@ namespace OpenRA.Mods.RA.Render public virtual void BuildingComplete(Actor self) { + DefaultAnimation.PlayRepeating(NormalizeSequence(self, "idle")); + if (info.PauseOnLowPower) { var disabled = self.TraitsImplementing();