115 lines
1.8 KiB
Lua
115 lines
1.8 KiB
Lua
include("../scripts/ai/tpl/generic.lua") -- Simple create function.
|
|
|
|
-- Shouldn't think, should only obey orders.
|
|
atk_think = false
|
|
command = true
|
|
|
|
function create(master)
|
|
mem.escort = master
|
|
mem.carrier = true
|
|
attack_choose()
|
|
end
|
|
|
|
-- Just tries to guard mem.escort.
|
|
function idle()
|
|
ai.pushtask(0, "escort")
|
|
end
|
|
|
|
-- Escorts the target.
|
|
function escort()
|
|
target = mem.escort
|
|
|
|
-- Will just float without a target to escort.
|
|
if target == nil then
|
|
return
|
|
end
|
|
|
|
dir = ai.face(target)
|
|
dist = ai.dist(ai.pos(target))
|
|
bdist = ai.minbrakedist()
|
|
|
|
-- Close enough.
|
|
if ai.isstopped() and dist < 300 then
|
|
return
|
|
|
|
-- Brake.
|
|
elseif dist+100 < bdist then
|
|
ai.pushtask(0, "brake")
|
|
|
|
-- Must approach.
|
|
elseif dir < 10 and dist > 300 then
|
|
ai.accel()
|
|
end
|
|
end
|
|
|
|
-- Just brakes.
|
|
function brake()
|
|
ai.brake()
|
|
if ai.isstopped() then
|
|
ai.poptask()
|
|
end
|
|
end
|
|
|
|
-- Holds position.
|
|
function hold()
|
|
if not ai.isstopped() then
|
|
ai.brake()
|
|
end
|
|
end
|
|
|
|
-- Tries to fly back to carrier.
|
|
function flyback()
|
|
target = mem.escort
|
|
|
|
dir = ai.face(target)
|
|
dist = ai.dist(ai.pos(target))
|
|
bdist = ai.minbrakedist()
|
|
|
|
-- Try to brake.
|
|
if not ai.isstopped() and dist < bdist then
|
|
ai.pushtask(0, "brake")
|
|
|
|
-- Try to dock.
|
|
elseif ai.isstopped() and dist < 30 then
|
|
ai.dock(target)
|
|
|
|
-- Far away, must approach.
|
|
elseif dir < 10 then
|
|
ai.accel()
|
|
end
|
|
end
|
|
|
|
--[[
|
|
-- Escort commands.
|
|
--]]
|
|
--Attack target.
|
|
function e_attack(target)
|
|
if command then
|
|
ai.pushtask(0, "attack", target)
|
|
end
|
|
end
|
|
|
|
-- Hold position.
|
|
function e_hold()
|
|
if command then
|
|
ai.pushtask(0, "hold")
|
|
end
|
|
end
|
|
|
|
-- Return to carrier.
|
|
function e_return()
|
|
if command and mem.carrier then
|
|
ai.pushtask(0, "flyback")
|
|
end
|
|
end
|
|
|
|
-- Clear orders.
|
|
function e_clear()
|
|
if command then
|
|
while ai.taskname() ~= "none" do
|
|
ai.poptask()
|
|
end
|
|
end
|
|
end
|
|
|