107 lines
2.2 KiB
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
|
|
|