Add Actor.Guard

This commit is contained in:
Oliver Brakmann
2014-02-09 15:56:29 +01:00
parent bfc34df581
commit e65626cc6b
3 changed files with 26 additions and 4 deletions

View File

@@ -27,12 +27,18 @@ namespace OpenRA.Mods.RA
if (order.OrderString == "Guard")
{
var target = Target.FromActor(order.TargetActor);
GuardTarget(self, target);
}
}
public void GuardTarget(Actor self, Target target)
{
self.SetTargetLine(target, Color.Yellow);
var range = WRange.FromCells(target.Actor.Info.Traits.Get<GuardableInfo>().Range);
self.QueueActivity(false, new AttackMove.AttackMoveActivity(self, self.Trait<IMove>().MoveFollow(self, target, range)));
}
}
public string VoicePhraseForOrder(Actor self, Order order)
{

View File

@@ -372,5 +372,17 @@ namespace OpenRA.Mods.RA.Scripting
factory.Trait<ProductionQueue>().ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount));
}
[LuaGlobal]
public void Guard(Actor guard, Actor target)
{
if (target.HasTrait<Guardable>())
{
var gt = guard.TraitOrDefault<Guard>();
if (gt != null)
gt.GuardTarget(guard, Target.FromActor(target));
}
}
}
}

View File

@@ -187,6 +187,10 @@ Actor.ReturnToBase = function(actor, airfield)
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
end
Actor.Guard = function(actor, target)
Internal.Guard(actor, target)
end
Actor.Patrol = function(actor, waypoints, wait, loop)
Utils.Do(waypoints, function(wpt)
Actor.AttackMove(actor, wpt.Location, 3)