Split out RenderInfantryPanic.

This commit is contained in:
Paul Chote
2011-02-17 21:38:04 +13:00
parent 06bf38b526
commit 18d73aef53
3 changed files with 46 additions and 13 deletions

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
class ScaredyCat : INotifyIdle, INotifyDamage
{
readonly ScaredyCatInfo Info;
bool Panicked = false;
public bool Panicked = false;
public ScaredyCat(Actor self, ScaredyCatInfo info)
{
Info = info;
@@ -36,16 +36,55 @@ namespace OpenRA.Mods.RA
{
if (!Panicked)
return;
var target = Util.SubPxVector[self.World.SharedRandom.Next(255)]* Info.MoveRadius / 1024 + self.Location;
self.Trait<Mobile>().ResolveOrder(self, new Order("Move", self, false) { TargetLocation = target });
}
public void Damaged(Actor self, AttackInfo e)
{
if (Panicked)
return;
Panicked = true;
self.Trait<RenderInfantry>().Panicked = true;
}
}
class RenderInfantryPanicInfo : RenderInfantryInfo, ITraitPrerequisite<ScaredyCatInfo>
{
public override object Create(ActorInitializer init) { return new RenderInfantryPanic(init.self, this); }
}
class RenderInfantryPanic : RenderInfantry
{
readonly ScaredyCat sc;
bool wasPanic;
public RenderInfantryPanic(Actor self, RenderInfantryPanicInfo info)
: base(self, info)
{
sc = self.Trait<ScaredyCat>();
}
protected override string NormalizeInfantrySequence(Actor self, string baseSequence)
{
var prefix = sc != null && sc.Panicked ? "panic-" : "";
if (anim.HasSequence(prefix + baseSequence))
return prefix + baseSequence;
else
return baseSequence;
}
protected override bool AllowIdleAnimation(Actor self)
{
return base.AllowIdleAnimation(self) && !sc.Panicked;
}
public override void Tick (Actor self)
{
if (wasPanic != sc.Panicked)
dirty = true;
wasPanic = sc.Panicked;
base.Tick(self);
}
}
}