61 lines
1.4 KiB
Lua
61 lines
1.4 KiB
Lua
Team = { }
|
|
|
|
Team.New = function(actors)
|
|
local team = { }
|
|
team.Actors = actors
|
|
team.OnAllKilled = { }
|
|
team.OnAnyKilled = { }
|
|
team.OnAllRemovedFromWorld = { }
|
|
team.OnAnyRemovedFromWorld = { }
|
|
Team.AddActorEventHandlers(team)
|
|
return team
|
|
end
|
|
|
|
Team.AddActorEventHandlers = function(team)
|
|
for i, actor in ipairs(team.Actors) do
|
|
|
|
Actor.OnKilled(actor, function()
|
|
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
|
|
end)
|
|
end
|
|
end
|
|
|
|
Team.InvokeHandlers = function(event)
|
|
for i, handler in ipairs(event) do
|
|
handler()
|
|
end
|
|
end
|
|
|
|
Team.AllAreDead = function(team)
|
|
return Utils.All(team.Actors, Actor.IsDead)
|
|
end
|
|
|
|
Team.AnyAreDead = function(team)
|
|
return Utils.Any(team.Actors, Actor.IsDead)
|
|
end
|
|
|
|
Team.AllAreInWorld = function(team)
|
|
return Utils.All(team.Actors, Actor.IsInWorld)
|
|
end
|
|
|
|
Team.AnyAreInWorld = function(team)
|
|
return Utils.Any(team.Actors, Actor.IsInWorld)
|
|
end
|
|
|
|
Team.AddEventHandler = function(event, func)
|
|
table.insert(event, func)
|
|
end
|
|
|
|
Team.Contains = function(team, actor)
|
|
return Utils.Any(team.Actors, function(a) return a == actor end)
|
|
end
|
|
|
|
Team.Do = function(team, func)
|
|
Utils.Do(team.Actors, func)
|
|
end |