Add Team.Patrol and Actor.Patrol. Fixes #4491.

This commit is contained in:
Oliver Brakmann
2014-01-28 23:06:25 +01:00
parent 43e386a48d
commit 5322096dc4
3 changed files with 33 additions and 7 deletions

View File

@@ -47,8 +47,8 @@ Actor.Teleport = function(actor, location)
actor:QueueActivity(OpenRA.New("SimpleTeleport", { location }))
end
Actor.AttackMove = function(actor, location)
Internal.AttackMove(actor, location)
Actor.AttackMove = function(actor, location, nearEnough)
Internal.AttackMove(actor, location, nearEnough or 0)
end
Actor.HeliFly = function(actor, position)
@@ -182,3 +182,21 @@ end
Actor.ReturnToBase = function(actor, airfield)
actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield }))
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

View File

@@ -18,7 +18,7 @@ Team.AddActorEventHandlers = function(team)
Team.InvokeHandlers(team.OnAnyKilled)
if Team.AllAreDead(team) then Team.InvokeHandlers(team.OnAllKilled) end
end)
Actor.OnRemovedFromWorld(actor, function()
Team.InvokeHandlers(team.OnAnyRemovedFromWorld)
if not Team.AnyAreInWorld(team) then Team.InvokeHandlers(team.OnAllRemovedFromWorld) end
@@ -58,4 +58,12 @@ end
Team.Do = function(team, 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