Use MakeAnimation activity for make animations

This commit is contained in:
Paul Chote
2011-04-10 11:27:57 +12:00
parent 394ee0dfe6
commit a31ef3d8e2
2 changed files with 12 additions and 5 deletions

View File

@@ -19,13 +19,11 @@ namespace OpenRA.Mods.RA.Activities
class MakeAnimation : CancelableActivity class MakeAnimation : CancelableActivity
{ {
readonly bool Reversed; readonly bool Reversed;
readonly RenderBuilding rb;
public MakeAnimation(Actor self) : this(self, false) {} public MakeAnimation(Actor self) : this(self, false) {}
public MakeAnimation(Actor self, bool reversed) public MakeAnimation(Actor self, bool reversed)
{ {
Reversed = reversed; Reversed = reversed;
rb = self.Trait<RenderBuilding>();
} }
bool complete = false; bool complete = false;
@@ -35,6 +33,7 @@ namespace OpenRA.Mods.RA.Activities
if (IsCanceled) return NextActivity; if (IsCanceled) return NextActivity;
if (!started) if (!started)
{ {
var rb = self.Trait<RenderBuilding>();
started = true; started = true;
if (Reversed) if (Reversed)
{ {

View File

@@ -15,6 +15,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Effects; using OpenRA.Mods.RA.Effects;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Mods.RA.Activities;
namespace OpenRA.Mods.RA.Render namespace OpenRA.Mods.RA.Render
{ {
@@ -58,10 +59,17 @@ namespace OpenRA.Mods.RA.Render
: base(init.self, baseFacing) : base(init.self, baseFacing)
{ {
var self = init.self; var self = init.self;
if( init.Contains<SkipMakeAnimsInit>() || !self.Info.Traits.Get<RenderBuildingInfo>().HasMakeAnimation )
anim.PlayThen( "idle", () => self.World.AddFrameEndTask( _ => Complete( self ) ) ); // Work around a bogus crash
anim.PlayRepeating( NormalizeSequence(self, "idle") );
if (self.Info.Traits.Get<RenderBuildingInfo>().HasMakeAnimation && !init.Contains<SkipMakeAnimsInit>())
{
self.QueueActivity(new MakeAnimation(self));
self.QueueActivity(new CallFunc(() => self.World.AddFrameEndTask( _ => Complete( self ) )));
}
else else
anim.PlayThen( "make", () => self.World.AddFrameEndTask( _ => Complete( self ) ) ); Complete( self );
} }
void Complete( Actor self ) void Complete( Actor self )