diff --git a/OpenRA.Mods.Common/Activities/RepairBridge.cs b/OpenRA.Mods.Common/Activities/RepairBridge.cs index b1ddf1ade9..a7f4d93e21 100644 --- a/OpenRA.Mods.Common/Activities/RepairBridge.cs +++ b/OpenRA.Mods.Common/Activities/RepairBridge.cs @@ -17,8 +17,8 @@ namespace OpenRA.Mods.Common.Activities { readonly BridgeHut hut; - public RepairBridge(Actor self, Actor target) - : base(self, target, EnterBehaviour.Dispose) + public RepairBridge(Actor self, Actor target, EnterBehaviour enterBehaviour) + : base(self, target, enterBehaviour) { hut = target.Trait(); } @@ -32,8 +32,8 @@ namespace OpenRA.Mods.Common.Activities { if (hut.BridgeDamageState == DamageState.Undamaged || hut.Repairing || hut.Bridge.GetHut(0) == null || hut.Bridge.GetHut(1) == null) return; + hut.Repair(self); - self.Dispose(); } } } diff --git a/OpenRA.Mods.Common/Activities/RepairBuilding.cs b/OpenRA.Mods.Common/Activities/RepairBuilding.cs index 581062dd5c..65112dc0e3 100644 --- a/OpenRA.Mods.Common/Activities/RepairBuilding.cs +++ b/OpenRA.Mods.Common/Activities/RepairBuilding.cs @@ -18,8 +18,8 @@ namespace OpenRA.Mods.Common.Activities readonly Actor target; readonly Health health; - public RepairBuilding(Actor self, Actor target) - : base(self, target, EnterBehaviour.Dispose) + public RepairBuilding(Actor self, Actor target, EnterBehaviour enterBehaviour) + : base(self, target, enterBehaviour) { this.target = target; health = target.Trait(); @@ -34,8 +34,8 @@ namespace OpenRA.Mods.Common.Activities { if (health.DamageState == DamageState.Undamaged) return; + target.InflictDamage(self, -health.MaxHP, null); - self.Dispose(); } } } diff --git a/OpenRA.Mods.Common/Traits/EngineerRepair.cs b/OpenRA.Mods.Common/Traits/EngineerRepair.cs index 4da01c7c1a..faa21f774f 100644 --- a/OpenRA.Mods.Common/Traits/EngineerRepair.cs +++ b/OpenRA.Mods.Common/Traits/EngineerRepair.cs @@ -21,6 +21,10 @@ namespace OpenRA.Mods.Common.Traits { [VoiceReference] public readonly string Voice = "Action"; + [Desc("Behaviour when entering the structure.", + "Possible values are Exit, Suicide, Dispose.")] + public readonly EnterBehaviour EnterBehaviour = EnterBehaviour.Dispose; + public object Create(ActorInitializer init) { return new EngineerRepair(init, this); } } @@ -91,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits self.CancelActivity(); self.SetTargetLine(target, Color.Yellow); - self.QueueActivity(new RepairBuilding(self, target.Actor)); + self.QueueActivity(new RepairBuilding(self, target.Actor, info.EnterBehaviour)); } class EngineerRepairOrderTargeter : UnitOrderTargeter diff --git a/OpenRA.Mods.Common/Traits/RepairsBridges.cs b/OpenRA.Mods.Common/Traits/RepairsBridges.cs index 31fc51bd24..e902f876eb 100644 --- a/OpenRA.Mods.Common/Traits/RepairsBridges.cs +++ b/OpenRA.Mods.Common/Traits/RepairsBridges.cs @@ -21,6 +21,10 @@ namespace OpenRA.Mods.Common.Traits { [VoiceReference] public readonly string Voice = "Action"; + [Desc("Behaviour when entering the structure.", + "Possible values are Exit, Suicide, Dispose.")] + public readonly EnterBehaviour EnterBehaviour = EnterBehaviour.Dispose; + public object Create(ActorInitializer init) { return new RepairsBridges(this); } } @@ -72,7 +76,7 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(Target.FromOrder(self.World, order), Color.Yellow); self.CancelActivity(); - self.QueueActivity(new RepairBridge(self, order.TargetActor)); + self.QueueActivity(new RepairBridge(self, order.TargetActor, info.EnterBehaviour)); } }