181 lines
4.2 KiB
Lua
181 lines
4.2 KiB
Lua
Actor = { }
|
|
|
|
Actor.Create = function(name, init)
|
|
if name == nil then error("No actor name specified", 2) end
|
|
if init.Owner == nil then error("No actor owner specified", 2) end
|
|
local td = OpenRA.New("TypeDictionary")
|
|
local addToWorld = true
|
|
for key, value in pairs(init) do
|
|
if key == "AddToWorld" then
|
|
addToWorld = value
|
|
else
|
|
td:Add(OpenRA.New(key .. "Init", { value }))
|
|
end
|
|
end
|
|
return World:CreateActor(addToWorld, name, td)
|
|
end
|
|
|
|
Actor.Turn = function(actor, facing)
|
|
actor:QueueActivity(OpenRA.New("Turn", { { facing, "Int32" } }))
|
|
end
|
|
|
|
Actor.Move = function(actor, location)
|
|
Actor.MoveNear(actor, location, 0)
|
|
end
|
|
|
|
Actor.MoveNear = function(actor, location, nearEnough)
|
|
actor:QueueActivity(OpenRA.New("Move", { location, WRange.FromCells(nearEnough) }))
|
|
end
|
|
|
|
Actor.ScriptedMove = function(actor, location)
|
|
if Actor.HasTrait(actor, "Helicopter") then
|
|
actor:QueueActivity(OpenRA.New("HeliFly", { location.CenterPosition }))
|
|
else
|
|
actor:QueueActivity(OpenRA.New("Move", { location }))
|
|
end
|
|
end
|
|
|
|
Actor.AfterMove = function(actor)
|
|
local heli = Actor.TraitOrDefault(actor, "Helicopter")
|
|
if heli ~= nil then
|
|
Actor.Turn(actor, heli.Info.InitialFacing)
|
|
Actor.HeliLand(actor, true)
|
|
end
|
|
end
|
|
|
|
Actor.Teleport = function(actor, location)
|
|
actor:QueueActivity(OpenRA.New("SimpleTeleport", { location }))
|
|
end
|
|
|
|
Actor.AttackMove = function(actor, location)
|
|
Internal.AttackMove(actor, location)
|
|
end
|
|
|
|
Actor.HeliFly = function(actor, position)
|
|
actor:QueueActivity(OpenRA.New("HeliFly", { position }))
|
|
end
|
|
|
|
Actor.HeliLand = function(actor, requireSpace)
|
|
actor:QueueActivity(OpenRA.New("HeliLand", { requireSpace }))
|
|
end
|
|
|
|
Actor.Fly = function(actor, position)
|
|
Internal.FlyToPos(actor, position)
|
|
end
|
|
|
|
Actor.FlyAttackActor = function(actor, targetActor)
|
|
Internal.FlyAttackActor(actor, targetActor)
|
|
end
|
|
|
|
Actor.FlyAttackCell = function(actor, location)
|
|
Internal.FlyAttackCell(actor, location)
|
|
end
|
|
|
|
Actor.FlyOffMap = function(actor)
|
|
actor:QueueActivity(OpenRA.New("FlyOffMap"))
|
|
end
|
|
|
|
Actor.Hunt = function(actor)
|
|
actor:QueueActivity(OpenRA.New("Hunt", { actor }))
|
|
end
|
|
|
|
Actor.UnloadCargo = function(actor, unloadAll)
|
|
actor:QueueActivity(OpenRA.New("UnloadCargo", { unloadAll }))
|
|
end
|
|
|
|
Actor.Harvest = function(actor)
|
|
actor:QueueActivity(OpenRA.New("FindResources"))
|
|
end
|
|
|
|
Actor.Scatter = function(actor)
|
|
local mobile = Actor.Trait(actor, "Mobile")
|
|
mobile:Nudge(actor, actor, true)
|
|
end
|
|
|
|
Actor.Wait = function(actor, period)
|
|
actor:QueueActivity(OpenRA.New("Wait", { { period, "Int32" } }))
|
|
end
|
|
|
|
Actor.WaitFor = function(actor, func)
|
|
Internal.WaitFor(actor, func)
|
|
end
|
|
|
|
Actor.CallFunc = function(actor, func)
|
|
Internal.CallFunc(actor, func)
|
|
end
|
|
|
|
Actor.DeployTransform = function(actor)
|
|
Actor.CallFunc(actor, function()
|
|
-- Queue the transform order
|
|
Actor.Trait(actor, "Transforms"):DeployTransform(true)
|
|
end)
|
|
end
|
|
|
|
Actor.RemoveSelf = function(actor)
|
|
actor:QueueActivity(OpenRA.New("RemoveSelf"))
|
|
end
|
|
|
|
Actor.Stop = function(actor)
|
|
actor:CancelActivity()
|
|
end
|
|
|
|
Actor.IsDead = function(actor)
|
|
return Internal.IsDead(actor)
|
|
end
|
|
|
|
Actor.IsInWorld = function(actor)
|
|
return actor.IsInWorld
|
|
end
|
|
|
|
Actor.Owner = function(actor)
|
|
return actor.Owner
|
|
end
|
|
|
|
Actor.Facing = function(actor)
|
|
return Actor.Trait(actor, "IFacing"):get_Facing()
|
|
end
|
|
|
|
Actor.IsIdle = function(actor)
|
|
return actor.IsIdle
|
|
end
|
|
|
|
Actor.SetStance = function(actor, stance)
|
|
Internal.SetUnitStance(actor, stance)
|
|
end
|
|
|
|
Actor.OnKilled = function(actor, eh)
|
|
Actor.Trait(actor, "LuaScriptEvents").OnKilled:Add(eh)
|
|
end
|
|
|
|
Actor.OnAddedToWorld = function(actor, eh)
|
|
Actor.Trait(actor, "LuaScriptEvents").OnAddedToWorld:Add(eh)
|
|
end
|
|
|
|
Actor.OnRemovedFromWorld = function(actor, eh)
|
|
Actor.Trait(actor, "LuaScriptEvents").OnRemovedFromWorld:Add(eh)
|
|
end
|
|
|
|
Actor.OnCaptured = function(actor, eh)
|
|
Actor.Trait(actor, "LuaScriptEvents").OnCaptured:Add(eh)
|
|
end
|
|
|
|
Actor.ActorsWithTrait = function(className)
|
|
local ret = { }
|
|
for item in Utils.Enumerate(Internal.ActorsWithTrait(className)) do
|
|
table.insert(ret, item.Actor)
|
|
end
|
|
return ret
|
|
end
|
|
|
|
Actor.HasTrait = function(actor, className)
|
|
return Internal.HasTrait(actor, className)
|
|
end
|
|
|
|
Actor.TraitOrDefault = function(actor, className)
|
|
return Internal.TraitOrDefault(actor, className)
|
|
end
|
|
|
|
Actor.Trait = function(actor, className)
|
|
return Internal.Trait(actor, className)
|
|
end
|