diff --git a/OpenRA.Mods.RA/Activities/RepairBridge.cs b/OpenRA.Mods.RA/Activities/RepairBridge.cs index 7d770111c5..7da09d5046 100644 --- a/OpenRA.Mods.RA/Activities/RepairBridge.cs +++ b/OpenRA.Mods.RA/Activities/RepairBridge.cs @@ -12,25 +12,24 @@ using OpenRA.Traits; 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(); } - public override Activity Tick(Actor self) + protected override bool CanReserve(Actor self) { - if (IsCanceled || target.Type != TargetType.Actor) - return NextActivity; + return hut.BridgeDamageState != DamageState.Undamaged; + } - var hut = target.Actor.Trait(); + protected override void OnInside(Actor self) + { if (hut.BridgeDamageState == DamageState.Undamaged) - return NextActivity; - + return; hut.Repair(self); self.Destroy(); - - return this; } } } diff --git a/OpenRA.Mods.RA/Activities/RepairBuilding.cs b/OpenRA.Mods.RA/Activities/RepairBuilding.cs index b5a813e138..92a3dec918 100644 --- a/OpenRA.Mods.RA/Activities/RepairBuilding.cs +++ b/OpenRA.Mods.RA/Activities/RepairBuilding.cs @@ -12,25 +12,29 @@ using OpenRA.Traits; 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 override Activity Tick(Actor self) + public RepairBuilding(Actor self, Actor target) + : base(self, target) { - if (IsCanceled || target.Type != TargetType.Actor) - return NextActivity; + this.target = target; + health = target.Trait(); + } - var health = target.Actor.Trait(); + protected override bool CanReserve(Actor self) + { + return health.DamageState != DamageState.Undamaged; + } + + protected override void OnInside(Actor self) + { if (health.DamageState == DamageState.Undamaged) - return NextActivity; - - target.Actor.InflictDamage(self, -health.MaxHP, null); + return; + target.InflictDamage(self, -health.MaxHP, null); self.Destroy(); - - return this; } } } diff --git a/OpenRA.Mods.RA/EngineerRepair.cs b/OpenRA.Mods.RA/EngineerRepair.cs index 60c5cdde8b..eca7376f94 100644 --- a/OpenRA.Mods.RA/EngineerRepair.cs +++ b/OpenRA.Mods.RA/EngineerRepair.cs @@ -78,7 +78,7 @@ namespace OpenRA.Mods.RA self.CancelActivity(); 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 diff --git a/OpenRA.Mods.RA/RepairsBridges.cs b/OpenRA.Mods.RA/RepairsBridges.cs index b3d8087042..ac1bdbaf36 100644 --- a/OpenRA.Mods.RA/RepairsBridges.cs +++ b/OpenRA.Mods.RA/RepairsBridges.cs @@ -59,7 +59,7 @@ namespace OpenRA.Mods.RA self.SetTargetLine(Target.FromOrder(self.World, order), Color.Yellow); self.CancelActivity(); - self.QueueActivity(new Enter(self, order.TargetActor, new RepairBridge(order.TargetActor))); + self.QueueActivity(new RepairBridge(self, order.TargetActor)); } }