RepairBuilding & RepairBridge as Enter subclasses
This commit is contained in:
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user