Lephisto/scripts/ai/include/attack_bomber.lua

107 lines
2.2 KiB
Lua

--[[
-- Attack functions for bombers.
--]]
--[[
-- Bombers don't really thing, they lock on until target is dead.
--]]
function atk_b_think()
-- No thinking atm.
end
--[[
-- Attack the current target, task pops when target is dead.
--
-- Specialized for bomber type craft. AI will try to shoot missiles and such
-- until out and then they will melee.
--]]
function atk_b()
target = ai.targetid()
ai.hostile(target) -- Mark as hostile.
-- Make sure pilot exists.
if not ai.exists(target) then
ai.poptask()
return
end
ai.settarget(target)
-- Get stats about enemy.
dist = ai.dist(ai.pos(target)) -- Get distance.
-- Get bombing tool.
secondary, special = ai.secondary("Launcher")
if secondary ~= "Launcher" or special == "Dumb" then -- No launcher, must melee.
range = ai.getweaprange()
-- Must approach.
if dist > range then
dir = ai.face(target)
if dir < 10 then
ai.accel()
end
-- Time to shoot!
else
dir = ai.aim(target) -- We aim instead of face.
-- Fire secondary.
if dir < 10 or special == "Turret" then
ai.shoot(1)
end
-- Fire primary.
if dir < 10 or ai.hasturrets() then
ai.shoot()
end
end
return -- No need to do ranged attack calculations.
end
-- Get ranges relative to bombing weapon of choice.
bombrange = ai.getweaprange(1)
backoff = bombrange / 4
if dist > bombrange then
dir = ai.face(target)
if dir < 10 then
ai.accel()
end
-- In bombing range.
elseif dist > backoff then
dir = ai.face(target)
-- Shoot missiles if in range.
if secondary == "Launcher" and
dist < ai.getweaprange(1) then
-- More lenient with aiming.
if special == "Smart" and dir < 30 then
ai.shoot(2)
-- Non-smart miss more.
elseif dir < 10 then
ai.shoot(2)
end
end
-- We don't apprauch, we try to stay away from melee.
-- Time to break attack and get back to bomb.
else
range = ai.getweaprange()
-- Flee
ai.face(target, true)
ai.accel()
-- Fire turret if being chased.
if dist < range and ai.hasturrets() then
ai.shoot()
end
end
end