RepairBuilding & RepairBridge as Enter subclasses

This commit is contained in:
atlimit8
2014-10-04 15:53:09 -05:00
parent 6d0feb9fbf
commit 41452dcfeb
4 changed files with 29 additions and 26 deletions

View File

@@ -12,25 +12,24 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
class RepairBridge : Activity class RepairBridge : Enter
{ {
Target target; readonly BridgeHut hut;
public RepairBridge(Actor target) { this.target = Target.FromActor(target); } public RepairBridge(Actor self, Actor target)
: base(self, target) { hut = target.Trait<BridgeHut>(); }
public override Activity Tick(Actor self) protected override bool CanReserve(Actor self)
{ {
if (IsCanceled || target.Type != TargetType.Actor) return hut.BridgeDamageState != DamageState.Undamaged;
return NextActivity; }
var hut = target.Actor.Trait<BridgeHut>(); protected override void OnInside(Actor self)
{
if (hut.BridgeDamageState == DamageState.Undamaged) if (hut.BridgeDamageState == DamageState.Undamaged)
return NextActivity; return;
hut.Repair(self); hut.Repair(self);
self.Destroy(); self.Destroy();
return this;
} }
} }
} }

View File

@@ -12,25 +12,29 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
class RepairBuilding : Activity class RepairBuilding : Enter
{ {
Target target; readonly Actor target;
readonly Health health;
public RepairBuilding(Actor target) { this.target = Target.FromActor(target); } public RepairBuilding(Actor self, Actor target)
: base(self, target)
public override Activity Tick(Actor self)
{ {
if (IsCanceled || target.Type != TargetType.Actor) this.target = target;
return NextActivity; health = target.Trait<Health>();
}
var health = target.Actor.Trait<Health>(); protected override bool CanReserve(Actor self)
{
return health.DamageState != DamageState.Undamaged;
}
protected override void OnInside(Actor self)
{
if (health.DamageState == DamageState.Undamaged) if (health.DamageState == DamageState.Undamaged)
return NextActivity; return;
target.InflictDamage(self, -health.MaxHP, null);
target.Actor.InflictDamage(self, -health.MaxHP, null);
self.Destroy(); self.Destroy();
return this;
} }
} }
} }

View File

@@ -78,7 +78,7 @@ namespace OpenRA.Mods.RA
self.CancelActivity(); self.CancelActivity();
self.SetTargetLine(target, Color.Yellow); self.SetTargetLine(target, Color.Yellow);
self.QueueActivity(new Enter(self, target.Actor, new RepairBuilding(target.Actor))); self.QueueActivity(new RepairBuilding(self, target.Actor));
} }
class EngineerRepairOrderTargeter : UnitOrderTargeter class EngineerRepairOrderTargeter : UnitOrderTargeter

View File

@@ -59,7 +59,7 @@ namespace OpenRA.Mods.RA
self.SetTargetLine(Target.FromOrder(self.World, order), Color.Yellow); self.SetTargetLine(Target.FromOrder(self.World, order), Color.Yellow);
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Enter(self, order.TargetActor, new RepairBridge(order.TargetActor))); self.QueueActivity(new RepairBridge(self, order.TargetActor));
} }
} }