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 RenderBuilding( ActorInitializer init, RenderBuildingInfo info )
: this(init, info, () => 0) { }
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, 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") );
@@ -70,6 +54,18 @@ namespace OpenRA.Mods.RA.Render
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)

View File

@@ -13,14 +13,14 @@ namespace OpenRA.Mods.RA.Render
class RenderBuildingChargeInfo : RenderBuildingInfo
{
public readonly string ChargeAudio = "tslachg2.aud";
public override object Create(ActorInitializer init) { return new RenderBuildingCharge(init); }
public override object Create(ActorInitializer init) { return new RenderBuildingCharge(init, this); }
}
/* used for tesla */
public class RenderBuildingCharge : RenderBuilding
{
public RenderBuildingCharge( ActorInitializer init )
: base(init)
public RenderBuildingCharge( ActorInitializer init, RenderBuildingInfo info )
: base(init, info)
{
}

View File

@@ -14,15 +14,15 @@ namespace OpenRA.Mods.RA.Render
{
class RenderBuildingOreInfo : RenderBuildingInfo
{
public override object Create(ActorInitializer init) { return new RenderBuildingOre(init); }
public override object Create(ActorInitializer init) { return new RenderBuildingOre(init, this); }
}
class RenderBuildingOre : RenderBuilding, INotifyBuildComplete, INotifyCapture
{
PlayerResources PlayerResources;
public RenderBuildingOre( ActorInitializer init )
: base(init)
public RenderBuildingOre( ActorInitializer init, RenderBuildingInfo info )
: base(init, info)
{
PlayerResources = init.self.Owner.PlayerActor.Trait<PlayerResources>();
}

View File

@@ -15,15 +15,13 @@ namespace OpenRA.Mods.RA.Render
{
class RenderBuildingTurretedInfo : RenderBuildingInfo
{
public override object Create(ActorInitializer init) { return new RenderBuildingTurreted( init ); }
public override object Create(ActorInitializer init) { return new RenderBuildingTurreted( init, this ); }
}
class RenderBuildingTurreted : RenderBuilding, INotifyBuildComplete
{
public RenderBuildingTurreted( ActorInitializer init )
: base(init, () => init.self.Trait<Turreted>().turretFacing)
{
}
public RenderBuildingTurreted( ActorInitializer init, RenderBuildingInfo info )
: base(init, info, () => init.self.Trait<Turreted>().turretFacing) { }
public void BuildingComplete( Actor self )
{

View File

@@ -16,7 +16,7 @@ namespace OpenRA.Mods.RA.Render
{
class RenderBuildingWallInfo : RenderBuildingInfo
{
public override object Create(ActorInitializer init) { return new RenderBuildingWall(init); }
public override object Create(ActorInitializer init) { return new RenderBuildingWall( init, this ); }
}
class RenderBuildingWall : RenderBuilding, INotifyBuildComplete
@@ -24,8 +24,8 @@ namespace OpenRA.Mods.RA.Render
string seqName;
int adjacentWalls = 0;
public RenderBuildingWall( ActorInitializer init )
: base(init)
public RenderBuildingWall( ActorInitializer init, RenderBuildingInfo info )
: base(init, info)
{
seqName = "idle";
}

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA.Render
{
class RenderWarFactoryInfo : RenderBuildingInfo
{
public override object Create(ActorInitializer init) { return new RenderWarFactory(init); }
public override object Create(ActorInitializer init) { return new RenderWarFactory( init, this ); }
/* get around unverifiability */
IEnumerable<Renderable> BaseBuildingPreview(ActorInfo building, string tileset)
@@ -45,8 +45,8 @@ namespace OpenRA.Mods.RA.Render
[Sync]
int2 openExit;
public RenderWarFactory(ActorInitializer init)
: base(init)
public RenderWarFactory(ActorInitializer init, RenderBuildingInfo info)
: base(init, info)
{
roof = new Animation(GetImage(init.self));
}