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

@@ -36,7 +36,6 @@ namespace OpenRA.Mods.RA.Render
IdleAnimating
};
public bool Panicked = false;
protected bool dirty = false;
RenderInfantryInfo Info;
@@ -45,17 +44,12 @@ namespace OpenRA.Mods.RA.Render
protected virtual string NormalizeInfantrySequence(Actor self, string baseSequence)
{
var prefix = Panicked ? "panic-" : "";
if (anim.HasSequence(prefix + baseSequence))
return prefix + baseSequence;
else
return baseSequence;
return baseSequence;
}
protected virtual bool AllowIdleAnimation(Actor self)
{
return Info.IdleAnimations.Length > 0 && !Panicked;
return Info.IdleAnimations.Length > 0;
}
public AnimationState State { get; private set; }

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);
}
}
}

View File

@@ -135,7 +135,6 @@
-AutoTarget:
-TakeCover:
-RenderInfantryProne:
RenderInfantry:
AppearsOnRadar:
Selectable:
Voice: CivilianMaleVoice
@@ -158,6 +157,7 @@
ProximityCaptor:
Types:CivilianInfantry
ScaredyCat:
RenderInfantryPanic:
^Plane:
AppearsOnRadar: