Implement enter behaviour for building/bridge repair.

This commit is contained in:
Paul Chote
2015-11-23 21:36:48 +00:00
parent 1959820bc8
commit 5b99a0c2da
4 changed files with 16 additions and 8 deletions

View File

@@ -17,8 +17,8 @@ namespace OpenRA.Mods.Common.Activities
{ {
readonly BridgeHut hut; readonly BridgeHut hut;
public RepairBridge(Actor self, Actor target) public RepairBridge(Actor self, Actor target, EnterBehaviour enterBehaviour)
: base(self, target, EnterBehaviour.Dispose) : base(self, target, enterBehaviour)
{ {
hut = target.Trait<BridgeHut>(); hut = target.Trait<BridgeHut>();
} }
@@ -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) if (hut.BridgeDamageState == DamageState.Undamaged || hut.Repairing || hut.Bridge.GetHut(0) == null || hut.Bridge.GetHut(1) == null)
return; return;
hut.Repair(self); hut.Repair(self);
self.Dispose();
} }
} }
} }

View File

@@ -18,8 +18,8 @@ namespace OpenRA.Mods.Common.Activities
readonly Actor target; readonly Actor target;
readonly Health health; readonly Health health;
public RepairBuilding(Actor self, Actor target) public RepairBuilding(Actor self, Actor target, EnterBehaviour enterBehaviour)
: base(self, target, EnterBehaviour.Dispose) : base(self, target, enterBehaviour)
{ {
this.target = target; this.target = target;
health = target.Trait<Health>(); health = target.Trait<Health>();
@@ -34,8 +34,8 @@ namespace OpenRA.Mods.Common.Activities
{ {
if (health.DamageState == DamageState.Undamaged) if (health.DamageState == DamageState.Undamaged)
return; return;
target.InflictDamage(self, -health.MaxHP, null); target.InflictDamage(self, -health.MaxHP, null);
self.Dispose();
} }
} }
} }

View File

@@ -21,6 +21,10 @@ namespace OpenRA.Mods.Common.Traits
{ {
[VoiceReference] public readonly string Voice = "Action"; [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); } public object Create(ActorInitializer init) { return new EngineerRepair(init, this); }
} }
@@ -91,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits
self.CancelActivity(); self.CancelActivity();
self.SetTargetLine(target, Color.Yellow); self.SetTargetLine(target, Color.Yellow);
self.QueueActivity(new RepairBuilding(self, target.Actor)); self.QueueActivity(new RepairBuilding(self, target.Actor, info.EnterBehaviour));
} }
class EngineerRepairOrderTargeter : UnitOrderTargeter class EngineerRepairOrderTargeter : UnitOrderTargeter

View File

@@ -21,6 +21,10 @@ namespace OpenRA.Mods.Common.Traits
{ {
[VoiceReference] public readonly string Voice = "Action"; [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); } 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.SetTargetLine(Target.FromOrder(self.World, order), Color.Yellow);
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new RepairBridge(self, order.TargetActor)); self.QueueActivity(new RepairBridge(self, order.TargetActor, info.EnterBehaviour));
} }
} }