Add Team.Patrol and Actor.Patrol. Fixes #4491.
This commit is contained in:
@@ -299,12 +299,12 @@ namespace OpenRA.Mods.RA.Scripting
|
|||||||
}
|
}
|
||||||
|
|
||||||
[LuaGlobal]
|
[LuaGlobal]
|
||||||
public void AttackMove(Actor actor, CPos location)
|
public void AttackMove(Actor actor, CPos location, double nearEnough)
|
||||||
{
|
{
|
||||||
if (actor.HasTrait<AttackMove>())
|
if (actor.HasTrait<AttackMove>())
|
||||||
actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(location, 0)));
|
actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(location, (int)nearEnough)));
|
||||||
else
|
else
|
||||||
actor.QueueActivity(new Move.Move(location, 0));
|
actor.QueueActivity(new Move.Move(location, (int)nearEnough));
|
||||||
}
|
}
|
||||||
|
|
||||||
[LuaGlobal]
|
[LuaGlobal]
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ Actor.Teleport = function(actor, location)
|
|||||||
actor:QueueActivity(OpenRA.New("SimpleTeleport", { location }))
|
actor:QueueActivity(OpenRA.New("SimpleTeleport", { location }))
|
||||||
end
|
end
|
||||||
|
|
||||||
Actor.AttackMove = function(actor, location)
|
Actor.AttackMove = function(actor, location, nearEnough)
|
||||||
Internal.AttackMove(actor, location)
|
Internal.AttackMove(actor, location, nearEnough or 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
Actor.HeliFly = function(actor, position)
|
Actor.HeliFly = function(actor, position)
|
||||||
@@ -182,3 +182,21 @@ end
|
|||||||
Actor.ReturnToBase = function(actor, airfield)
|
Actor.ReturnToBase = function(actor, airfield)
|
||||||
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
|
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Actor.Patrol = function(actor, waypoints, wait, loop)
|
||||||
|
Utils.Do(waypoints, function(wpt)
|
||||||
|
Actor.AttackMove(actor, wpt.Location, 3)
|
||||||
|
Actor.Wait(actor, wait or 0)
|
||||||
|
end)
|
||||||
|
if loop or loop == nil then
|
||||||
|
Actor.CallFunc(actor, function() Actor.Patrol(actor, waypoints, wait, loop) end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Actor.PatrolUntil = function(actor, waypoints, wait, func)
|
||||||
|
if func == nil then error("No function specified", 2) end
|
||||||
|
Actor.Patrol(actor, waypoints, wait, false)
|
||||||
|
if not func(actor) then
|
||||||
|
Actor.CallFunc(actor, function() Actor.PatrolUntil(actor, waypoints, wait, func) end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@@ -59,3 +59,11 @@ end
|
|||||||
Team.Do = function(team, func)
|
Team.Do = function(team, func)
|
||||||
Utils.Do(team.Actors, func)
|
Utils.Do(team.Actors, func)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Team.Patrol = function(team, waypoints, wait, loop)
|
||||||
|
Team.Do(team, function(a) Actor.Patrol(a, waypoints, wait, loop) end)
|
||||||
|
end
|
||||||
|
|
||||||
|
Team.PatrolUntil = function(team, waypoints, wait, func)
|
||||||
|
Team.Do(team, function(a) Actor.PatrolUntil(a, waypoints, wait, func) end)
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user