Merge pull request #10153 from abcdefg30/repairableNear

Add a 'Voice' field to RepairableNearInfo
This commit is contained in:
Oliver Brakmann
2015-12-14 21:59:56 +01:00
3 changed files with 22 additions and 3 deletions

View File

@@ -20,12 +20,13 @@ namespace OpenRA.Mods.Common.Traits
class RepairableNearInfo : ITraitInfo, Requires<HealthInfo>, Requires<IMoveInfo>
{
[ActorReference] public readonly HashSet<string> Buildings = new HashSet<string> { "spen", "syrd" };
public readonly int CloseEnough = 4; /* cells */
public readonly WDist CloseEnough = WDist.FromCells(4);
[VoiceReference] public readonly string Voice = "Action";
public object Create(ActorInitializer init) { return new RepairableNear(init.Self, this); }
}
class RepairableNear : IIssueOrder, IResolveOrder
class RepairableNear : IIssueOrder, IResolveOrder, IOrderVoice
{
readonly Actor self;
readonly RepairableNearInfo info;
@@ -65,6 +66,11 @@ namespace OpenRA.Mods.Common.Traits
return self.GetDamageState() > DamageState.Undamaged;
}
public string VoicePhraseForOrder(Actor self, Order order)
{
return (order.OrderString == "RepairNear" && ShouldRepair()) ? info.Voice : null;
}
public void ResolveOrder(Actor self, Order order)
{
if (order.OrderString == "RepairNear" && CanRepairAt(order.TargetActor) && ShouldRepair())
@@ -72,7 +78,7 @@ namespace OpenRA.Mods.Common.Traits
var target = Target.FromOrder(self.World, order);
self.CancelActivity();
self.QueueActivity(movement.MoveWithinRange(target, new WDist(1024 * info.CloseEnough)));
self.QueueActivity(movement.MoveWithinRange(target, info.CloseEnough));
self.QueueActivity(new Repair(order.TargetActor));
self.SetTargetLine(target, Color.Green, false);