Remove some bogosity from RenderBuilding
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user