fix missing explosion on war factory; remove some nonsense

This commit is contained in:
Chris Forbes
2011-04-17 18:57:19 +12:00
committed by Paul Chote
parent 4f76876f05
commit ae645bbafe
3 changed files with 12 additions and 16 deletions

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
}
}
public class RenderBuilding : RenderSimple, INotifyDamageStateChanged, IRenderModifier
public class RenderBuilding : RenderSimple, INotifyDamageStateChanged, IRenderModifier, INotifyKilled
{
readonly RenderBuildingInfo Info;
@@ -98,16 +98,18 @@ namespace OpenRA.Mods.RA.Render
public virtual void DamageStateChanged(Actor self, AttackInfo e)
{
if (e.DamageState == DamageState.Dead)
foreach (var t in FootprintUtils.UnpathableTiles( self.Info.Name, self.Info.Traits.Get<BuildingInfo>(), self.Location ))
{
var cell = t; // required: c# fails at bindings
self.World.AddFrameEndTask(w => w.Add(new Explosion(w, Traits.Util.CenterOfCell(cell), "building", false, 0)));
}
else if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy)
if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy)
anim.ReplaceAnim("damaged-idle");
else if (e.DamageState < DamageState.Heavy)
anim.ReplaceAnim("idle");
}
public void Killed(Actor self, AttackInfo e)
{
var bi = self.Info.Traits.Get<BuildingInfo>();
FootprintUtils.UnpathableTiles(self.Info.Name, bi, self.Location).Do(
t => self.World.AddFrameEndTask(
w => w.Add(new Explosion(w, Traits.Util.CenterOfCell(t), "building", false, 0))));
}
}
}

View File

@@ -27,13 +27,5 @@ namespace OpenRA.Mods.RA.Render
{
anim.Play( "idle" );
}
public override void DamageStateChanged(Actor self, AttackInfo e)
{
if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy)
anim.ReplaceAnim("damaged-idle");
else if (e.DamageState < DamageState.Heavy)
anim.ReplaceAnim("idle");
}
}
}

View File

@@ -78,6 +78,8 @@ namespace OpenRA.Mods.RA.Render
else
roof.ReplaceAnim(roof.CurrentSequence.Name.Replace("damaged-", ""));
}
base.DamageStateChanged(self, e);
}
public void UnitProduced(Actor self, Actor other, int2 exit)