Remove some bogosity from RenderBuilding

This commit is contained in:
Paul Chote
2011-04-16 11:19:37 +12:00
parent 1c2574f4f4
commit 7b0a9136ab
6 changed files with 37 additions and 43 deletions

View File

@@ -23,43 +23,27 @@ namespace OpenRA.Mods.RA.Render
{
public readonly bool HasMakeAnimation = true;
public readonly float2 Origin = float2.Zero;
public override object Create(ActorInitializer init) { return new RenderBuilding(init);}
public override object Create(ActorInitializer init) { return new RenderBuilding(init, this);}
public override IEnumerable<Renderable> RenderPreview(ActorInfo building, string Tileset)
{
var rb = building.Traits.Get<RenderBuildingInfo>();
return base.RenderPreview(building, Tileset)
.Select(a => a.WithPos(a.Pos + rb.Origin));
.Select(a => a.WithPos(a.Pos + building.Traits.Get<RenderBuildingInfo>().Origin));
}
}
public class RenderBuilding : RenderSimple, INotifyDamage, INotifySold, IRenderModifier
{
readonly float2 Origin;
readonly RenderBuildingInfo Info;
public RenderBuilding( ActorInitializer init )
: this( init, () => 0 )
{
Origin = init.self.Info.Traits.Get<RenderBuildingInfo>().Origin;
}
public IEnumerable<Renderable> ModifyRender(Actor self, IEnumerable<Renderable> r)
{
var disabled = self.TraitsImplementing<IDisable>().Any(d => d.Disabled);
foreach (var a in r)
{
var ret = a.WithPos(a.Pos - Origin);
yield return ret;
if (disabled)
yield return ret.WithPalette("disabled").WithZOffset(1);
}
}
public RenderBuilding( ActorInitializer init, RenderBuildingInfo info )
: this(init, info, () => 0) { }
public RenderBuilding( ActorInitializer init, Func<int> baseFacing )
public RenderBuilding( ActorInitializer init, RenderBuildingInfo info, Func<int> baseFacing )
: base(init.self, baseFacing)
{
Info = info;
var self = init.self;
// Work around a bogus crash
anim.PlayRepeating( NormalizeSequence(self, "idle") );
@@ -69,7 +53,19 @@ namespace OpenRA.Mods.RA.Render
// Can't call Complete() from ctor because other traits haven't been inited yet
self.QueueActivity(new CallFunc(() => self.World.AddFrameEndTask( _ => Complete( self ) )));
}
public IEnumerable<Renderable> ModifyRender(Actor self, IEnumerable<Renderable> r)
{
var disabled = self.TraitsImplementing<IDisable>().Any(d => d.Disabled);
foreach (var a in r)
{
var ret = a.WithPos(a.Pos - Info.Origin);
yield return ret;
if (disabled)
yield return ret.WithPalette("disabled").WithZOffset(1);
}
}
void Complete( Actor self )
{
anim.PlayRepeating( NormalizeSequence(self, "idle") );
@@ -119,7 +115,7 @@ namespace OpenRA.Mods.RA.Render
public virtual void Selling( Actor self )
{
if( self.Info.Traits.Get<RenderBuildingInfo>().HasMakeAnimation )
if( Info.HasMakeAnimation )
anim.PlayBackwardsThen( "make", null );
foreach (var s in self.Info.Traits.Get<BuildingInfo>().SellSounds)