From a31ef3d8e2ba0c6624cb730ee33c98be32ad94c0 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 10 Apr 2011 11:27:57 +1200 Subject: [PATCH] Use MakeAnimation activity for make animations --- OpenRA.Mods.RA/Activities/MakeAnimation.cs | 3 +-- OpenRA.Mods.RA/Render/RenderBuilding.cs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/MakeAnimation.cs b/OpenRA.Mods.RA/Activities/MakeAnimation.cs index c02b6ff3e8..da3b67d081 100644 --- a/OpenRA.Mods.RA/Activities/MakeAnimation.cs +++ b/OpenRA.Mods.RA/Activities/MakeAnimation.cs @@ -19,13 +19,11 @@ namespace OpenRA.Mods.RA.Activities class MakeAnimation : CancelableActivity { readonly bool Reversed; - readonly RenderBuilding rb; public MakeAnimation(Actor self) : this(self, false) {} public MakeAnimation(Actor self, bool reversed) { Reversed = reversed; - rb = self.Trait(); } bool complete = false; @@ -35,6 +33,7 @@ namespace OpenRA.Mods.RA.Activities if (IsCanceled) return NextActivity; if (!started) { + var rb = self.Trait(); started = true; if (Reversed) { diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index 436db9cf98..b6f09484d0 100755 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -15,6 +15,7 @@ using OpenRA.Graphics; using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Effects; using OpenRA.Traits; +using OpenRA.Mods.RA.Activities; namespace OpenRA.Mods.RA.Render { @@ -58,10 +59,17 @@ namespace OpenRA.Mods.RA.Render : base(init.self, baseFacing) { var self = init.self; - if( init.Contains() || !self.Info.Traits.Get().HasMakeAnimation ) - anim.PlayThen( "idle", () => self.World.AddFrameEndTask( _ => Complete( self ) ) ); + + // Work around a bogus crash + anim.PlayRepeating( NormalizeSequence(self, "idle") ); + + if (self.Info.Traits.Get().HasMakeAnimation && !init.Contains()) + { + self.QueueActivity(new MakeAnimation(self)); + self.QueueActivity(new CallFunc(() => self.World.AddFrameEndTask( _ => Complete( self ) ))); + } else - anim.PlayThen( "make", () => self.World.AddFrameEndTask( _ => Complete( self ) ) ); + Complete( self ); } void Complete( Actor self )