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

