mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-24 12:05:27 +00:00
AIRBOSS v0.4.3
This commit is contained in:
@@ -20,13 +20,14 @@
|
|||||||
-- **PLEASE NOTE** that his class is work in progress and in an **alpha** stage and very much work in progress.
|
-- **PLEASE NOTE** that his class is work in progress and in an **alpha** stage and very much work in progress.
|
||||||
--
|
--
|
||||||
-- At the moment, parameters are optimized for F/A-18C Hornet as aircraft and USS John C. Stennis as carrier.
|
-- At the moment, parameters are optimized for F/A-18C Hornet as aircraft and USS John C. Stennis as carrier.
|
||||||
-- The community mod A-4E is also supported in priciple but needs further tweaking of parameters suche as on speed AoA values.
|
-- The community A-4E-C mod is also supported in priciple but needs further tweaking of parameters suche as on speed AoA values.
|
||||||
|
--
|
||||||
-- Other aircraft and carriers **might** be possible in future but would need a different set of optimized parameters.
|
-- Other aircraft and carriers **might** be possible in future but would need a different set of optimized parameters.
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
-- ### Author: **funkyfranky**
|
-- ### Author: **funkyfranky**
|
||||||
-- ### Co-author: **Bankler** (Carrier trainer idea and script)
|
-- ### Special Thanks To: **Bankler** (Carrier trainer idea and script)
|
||||||
--
|
--
|
||||||
-- @module Ops.Airboss
|
-- @module Ops.Airboss
|
||||||
-- @image MOOSE.JPG
|
-- @image MOOSE.JPG
|
||||||
@@ -47,7 +48,6 @@
|
|||||||
-- @field #number ICLSchannel ICLS channel.
|
-- @field #number ICLSchannel ICLS channel.
|
||||||
-- @field Core.Radio#RADIO LSOradio Radio for LSO calls.
|
-- @field Core.Radio#RADIO LSOradio Radio for LSO calls.
|
||||||
-- @field Core.Radio#RADIO Carrierradio Radio for carrier calls.
|
-- @field Core.Radio#RADIO Carrierradio Radio for carrier calls.
|
||||||
-- @field #AIRBOSS.RadioCalls radiocall LSO and Airboss call sound files and texts.
|
|
||||||
-- @field Core.Scheduler#SCHEDULER radiotimer Radio queue scheduler.
|
-- @field Core.Scheduler#SCHEDULER radiotimer Radio queue scheduler.
|
||||||
-- @field Core.Zone#ZONE_UNIT zoneCCA Carrier controlled area (CCA), i.e. a zone of 50 NM radius around the carrier.
|
-- @field Core.Zone#ZONE_UNIT zoneCCA Carrier controlled area (CCA), i.e. a zone of 50 NM radius around the carrier.
|
||||||
-- @field Core.Zone#ZONE_UNIT zoneCCZ Carrier controlled zone (CCZ), i.e. a zone of 5 NM radius around the carrier.
|
-- @field Core.Zone#ZONE_UNIT zoneCCZ Carrier controlled zone (CCZ), i.e. a zone of 5 NM radius around the carrier.
|
||||||
@@ -132,7 +132,6 @@ AIRBOSS = {
|
|||||||
LSOfreq = nil,
|
LSOfreq = nil,
|
||||||
Carrierradio = nil,
|
Carrierradio = nil,
|
||||||
Carrierfreq = nil,
|
Carrierfreq = nil,
|
||||||
radiocall = {},
|
|
||||||
radiotimer = nil,
|
radiotimer = nil,
|
||||||
zoneCCA = nil,
|
zoneCCA = nil,
|
||||||
zoneCCZ = nil,
|
zoneCCZ = nil,
|
||||||
@@ -258,99 +257,194 @@ AIRBOSS.PatternStep={
|
|||||||
|
|
||||||
--- Radio sound file and subtitle.
|
--- Radio sound file and subtitle.
|
||||||
-- @type AIRBOSS.RadioSound
|
-- @type AIRBOSS.RadioSound
|
||||||
-- @field #string normal Sound file normal.
|
-- @field #string file Sound file name without suffix.
|
||||||
-- @field #string louder Sound file loud.
|
-- @field #string suffix File suffix/extention, e.g. "ogg".
|
||||||
|
-- @field #boolean loud Loud version of sound file available.
|
||||||
-- @field #string subtitle Subtitle displayed during transmission.
|
-- @field #string subtitle Subtitle displayed during transmission.
|
||||||
-- @field #number duration Duration in seconds the subtitle is displayed.
|
-- @field #number duration Duration of the sound in seconds. This is also the duration the subtitle is displayed.
|
||||||
|
|
||||||
--- LSO and Airboss radio calls.
|
--- LSO radio calls.
|
||||||
-- @type AIRBOSS.RadioCalls
|
-- @type AIRBOSS.LSOCall
|
||||||
-- @field #AIRBOSS.RadioSound RIGHTFORLINEUP "Right for line up!" call.
|
-- @field #AIRBOSS.RadioSound RIGHTFORLINEUP "Right for line up!" call.
|
||||||
-- @field #AIRBOSS.RadioSound COMELEFT "Come left!" call.
|
-- @field #AIRBOSS.RadioSound COMELEFT "Come left!" call.
|
||||||
-- @field #AIRBOSS.RadioSound HIGH "You're high!" call.
|
-- @field #AIRBOSS.RadioSound HIGH "You're high!" call.
|
||||||
-- @field #AIRBOSS.RadioSound POWER Sound file "Power!" call.
|
-- @field #AIRBOSS.RadioSound POWER "Power!" call.
|
||||||
-- @field #AIRBOSS.RadioSound SLOW Sound file "You're slow!" call.
|
-- @field #AIRBOSS.RadioSound CALLTHEBALL "Call the Ball"
|
||||||
-- @field #AIRBOSS.RadioSound FAST Sound file "You're fast!" call.
|
-- @field #AIRBOSS.RadioSound ROGERBALL "Roger ball" call (actually from pilot).
|
||||||
-- @field #AIRBOSS.RadioSound CALLTHEBALL Sound file "Call the ball." call.
|
-- @field #AIRBOSS.RadioSound WAVEOFF "Wafe off" call
|
||||||
-- @field #AIRBOSS.RadioSound ROGERBALL "Roger, ball." call.
|
-- @field #AIRBOSS.RadioSound BOLTER "Bolter, Bolter" call
|
||||||
-- @field #AIRBOSS.RadioSound WAVEOFF "Wave off!" call.
|
|
||||||
-- @field #AIRBOSS.RadioSound BOLTER "Bolter, bolter!" call.
|
|
||||||
-- @field #AIRBOSS.RadioSound LONGINGROOVE "You're long in the groove. Depart and re-enter." call.
|
-- @field #AIRBOSS.RadioSound LONGINGROOVE "You're long in the groove. Depart and re-enter." call.
|
||||||
|
-- @field #AIRBOSS.RadioSound N1 "One" call.
|
||||||
--- Default radio call sound files.
|
-- @field #AIRBOSS.RadioSound N2 "Two" call.
|
||||||
-- @type AIRBOSS.Soundfile
|
-- @field #AIRBOSS.RadioSound N9 "Nine" call.
|
||||||
-- @field #AIRBOSS.RadioSound RIGHTFORLINEUP
|
AIRBOSS.LSOCall={
|
||||||
-- @field #AIRBOSS.RadioSound COMELEFT
|
|
||||||
-- @field #AIRBOSS.RadioSound HIGH
|
|
||||||
-- @field #AIRBOSS.RadioSound POWER
|
|
||||||
-- @field #AIRBOSS.RadioSound CALLTHEBALL
|
|
||||||
-- @field #AIRBOSS.RadioSound ROGERBALL
|
|
||||||
-- @field #AIRBOSS.RadioSound WAVEOFF
|
|
||||||
-- @field #AIRBOSS.RadioSound BOLTER
|
|
||||||
-- @field #AIRBOSS.RadioSound LONGINGROOVE
|
|
||||||
AIRBOSS.Soundfile={
|
|
||||||
RIGHTFORLINEUP={
|
RIGHTFORLINEUP={
|
||||||
normal="LSO - RightLineUp(S).ogg",
|
file="LSO-RightForLineup",
|
||||||
louder="LSO - RightLineUp(L).ogg",
|
suffix="ogg",
|
||||||
subtitle="Right for line up.",
|
loud=true,
|
||||||
duration=1.5,
|
subtitle="Right for line up",
|
||||||
|
duration=1.0,
|
||||||
},
|
},
|
||||||
COMELEFT={
|
COMELEFT={
|
||||||
normal="LSO - ComeLeft(S).ogg",
|
file="LSO-ComeLeft",
|
||||||
louder="LSO - ComeLeft(L).ogg",
|
suffix="ogg",
|
||||||
subtitle="Come left.",
|
loud=true,
|
||||||
duration=1,
|
subtitle="Come left",
|
||||||
|
duration=0.8,
|
||||||
},
|
},
|
||||||
HIGH={
|
HIGH={
|
||||||
normal="LSO - High(S).ogg",
|
file="LSO-High",
|
||||||
louder="LSO - High(L).ogg",
|
loud=true,
|
||||||
subtitle="You're high.",
|
subtitle="You're high",
|
||||||
duration=1,
|
duration=0.9,
|
||||||
|
},
|
||||||
|
LOW={
|
||||||
|
file="LSO-Low",
|
||||||
|
loud=true,
|
||||||
|
subtitle="You're low",
|
||||||
|
duration=0.6,
|
||||||
},
|
},
|
||||||
POWER={
|
POWER={
|
||||||
normal="LSO - Power(S).ogg",
|
file="LSO-Power",
|
||||||
louder="LSO - Power(L).ogg",
|
suffix="ogg",
|
||||||
subtitle="Power.",
|
loud=true,
|
||||||
duration=1,
|
subtitle="Power",
|
||||||
|
duration=0.6,
|
||||||
},
|
},
|
||||||
SLOW={
|
SLOW={
|
||||||
normal="LSO-Slow-Normal.ogg",
|
file="LSO-Slow",
|
||||||
louder="LSO-Slow-Loud.ogg",
|
suffix="ogg",
|
||||||
subtitle="You're slow.",
|
loud=true,
|
||||||
duration=1,
|
subtitle="You're slow",
|
||||||
|
duration=0.9,
|
||||||
},
|
},
|
||||||
FAST={
|
FAST={
|
||||||
normal="LSO-Fast-Normal.ogg",
|
file="LSO-Fast",
|
||||||
louder="LSO-Fast-Loud.ogg",
|
suffix="ogg",
|
||||||
subtitle="You're fast.",
|
loud=true,
|
||||||
duration=1,
|
subtitle="You're fast",
|
||||||
|
duration=0.9,
|
||||||
},
|
},
|
||||||
CALLTHEBALL={
|
CALLTHEBALL={
|
||||||
normal="LSO - Call the Ball.ogg",
|
file="LSO-CallTheBall",
|
||||||
louder="LSO - Call the Ball.ogg",
|
suffix="ogg",
|
||||||
subtitle="Call the ball.",
|
louder=false,
|
||||||
duration=3,
|
subtitle="Call the ball",
|
||||||
|
duration=0.7,
|
||||||
},
|
},
|
||||||
ROGERBALL={
|
ROGERBALL={
|
||||||
normal="LSO - Roger.ogg",
|
file="LSO-RogerBall",
|
||||||
subtitle="Roger ball!",
|
suffix="ogg",
|
||||||
duration=1.2,
|
louder=false,
|
||||||
|
subtitle="Roger ball",
|
||||||
|
duration=0.7,
|
||||||
},
|
},
|
||||||
WAVEOFF={
|
WAVEOFF={
|
||||||
normal="LSO - WaveOff.ogg",
|
file="LSO-WaveOff",
|
||||||
subtitle="Wave off!",
|
suffix="ogg",
|
||||||
duration=1,
|
louder=false,
|
||||||
|
subtitle="Wave off",
|
||||||
|
duration=0.7,
|
||||||
},
|
},
|
||||||
BOLTER={
|
BOLTER={
|
||||||
normal="LSO - Bolter.ogg",
|
file="LSO-BolterBolter",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
subtitle="Bolter, Bolter!",
|
subtitle="Bolter, Bolter!",
|
||||||
duration=1.5,
|
duration=1.0,
|
||||||
},
|
},
|
||||||
LONGINGROOVE={
|
LONGINGROOVE={
|
||||||
normal="LSO - Long in Groove.ogg",
|
file="LSO-LonInTheGroove",
|
||||||
subtitle="You're long in the groove. Depart and re-enter.",
|
suffix="ogg",
|
||||||
duration=3,
|
louder=false,
|
||||||
}
|
subtitle="You're long in the groove",
|
||||||
|
duration=1.3,
|
||||||
|
},
|
||||||
|
DEPARTANDREENTER={
|
||||||
|
file="LSO-DepartAndReenter",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="Depart and re-enter",
|
||||||
|
duration=1.3,
|
||||||
|
},
|
||||||
|
PADDLESCONTACT={
|
||||||
|
file="LSO-PaddlesContact",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="Paddles, contact",
|
||||||
|
duration=1.0,
|
||||||
|
},
|
||||||
|
N1={
|
||||||
|
file="LSO-N1",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.3,
|
||||||
|
},
|
||||||
|
N2={
|
||||||
|
file="LSO-N2",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.3,
|
||||||
|
},
|
||||||
|
N3={
|
||||||
|
file="LSO-N3",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.4,
|
||||||
|
},
|
||||||
|
N4={
|
||||||
|
file="LSO-N4",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.4,
|
||||||
|
},
|
||||||
|
N5={
|
||||||
|
file="LSO-N5",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.4,
|
||||||
|
},
|
||||||
|
N6={
|
||||||
|
file="LSO-N6",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.6,
|
||||||
|
},
|
||||||
|
N7={
|
||||||
|
file="LSO-N7",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.6,
|
||||||
|
},
|
||||||
|
N8={
|
||||||
|
file="LSO-N8",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.4,
|
||||||
|
},
|
||||||
|
N9={
|
||||||
|
file="LSO-N9",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.5,
|
||||||
|
},
|
||||||
|
N0={
|
||||||
|
file="LSO-N0",
|
||||||
|
suffix="ogg",
|
||||||
|
louder=false,
|
||||||
|
subtitle="",
|
||||||
|
duration=0.4,
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
--- Difficulty level.
|
--- Difficulty level.
|
||||||
@@ -366,8 +460,8 @@ AIRBOSS.Difficulty={
|
|||||||
|
|
||||||
--- Recovery time.
|
--- Recovery time.
|
||||||
-- @type AIRBOSS.Recovery
|
-- @type AIRBOSS.Recovery
|
||||||
-- @field #number START Start of recovery.
|
-- @field #number START Start of recovery in seconds of abs time.
|
||||||
-- @field #number STOP End of recovery.
|
-- @field #number STOP End of recovery in seconds of abs time.
|
||||||
-- @field #number CASE Recovery case (1-3) of that time slot.
|
-- @field #number CASE Recovery case (1-3) of that time slot.
|
||||||
|
|
||||||
--- Groove position.
|
--- Groove position.
|
||||||
@@ -438,7 +532,7 @@ AIRBOSS.GroovePos={
|
|||||||
-- @field #boolean player If true, flight is a human player.
|
-- @field #boolean player If true, flight is a human player.
|
||||||
-- @field #string actype Aircraft type name.
|
-- @field #string actype Aircraft type name.
|
||||||
-- @field #table onboardnumbers Onboard numbers of aircraft in the group.
|
-- @field #table onboardnumbers Onboard numbers of aircraft in the group.
|
||||||
-- @field #number onboard Onboard number of player or fist unit in group.
|
-- @field #string onboard Onboard number of player or first unit in group.
|
||||||
-- @field #number case Recovery case of flight.
|
-- @field #number case Recovery case of flight.
|
||||||
-- @field #string seclead Name of section lead.
|
-- @field #string seclead Name of section lead.
|
||||||
-- @field #table section Other human flight groups belonging to this flight. This flight is the lead.
|
-- @field #table section Other human flight groups belonging to this flight. This flight is the lead.
|
||||||
@@ -473,7 +567,7 @@ AIRBOSS.MenuF10={}
|
|||||||
|
|
||||||
--- Airboss class version.
|
--- Airboss class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
AIRBOSS.version="0.4.2"
|
AIRBOSS.version="0.4.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@@ -620,11 +714,14 @@ function AIRBOSS:New(carriername, alias)
|
|||||||
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
-- Init default sound files.
|
-- Init default sound files.
|
||||||
for _name,_sound in pairs(AIRBOSS.Soundfile) do
|
for _name,_sound in pairs(AIRBOSS.LSOCall) do
|
||||||
local sound=_sound --#AIRBOSS.RadioSound
|
local sound=_sound --#AIRBOSS.RadioSound
|
||||||
self.radiocall[_name]=sound
|
local text=string.format()
|
||||||
|
sound.subtitle=1
|
||||||
|
sound.louder=1
|
||||||
|
--self.radiocall[_name]=sound
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Debug:
|
-- Debug:
|
||||||
@@ -632,6 +729,7 @@ function AIRBOSS:New(carriername, alias)
|
|||||||
for _name,_sound in pairs(self.radiocall) do
|
for _name,_sound in pairs(self.radiocall) do
|
||||||
self:T{name=_name,sound=_sound}
|
self:T{name=_name,sound=_sound}
|
||||||
end
|
end
|
||||||
|
]]
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
--- FSM Transitions ---
|
--- FSM Transitions ---
|
||||||
@@ -1072,74 +1170,6 @@ function AIRBOSS:_CheckRecoveryTimes()
|
|||||||
|
|
||||||
-- Debug output.
|
-- Debug output.
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
-- Check if a recovery time was set.
|
|
||||||
if #self.recoverytime==0 then
|
|
||||||
|
|
||||||
-- If no recovery times have been specified, we assume any time is okay.
|
|
||||||
self:I("FF Start recovery. No recovery time set!")
|
|
||||||
if not self:IsRecovering() then
|
|
||||||
-- Give command to recover!
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
-- Do nothing.
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
-- Selected recovery event if any.
|
|
||||||
local recovery=nil --#AIRBOSS.Recovery
|
|
||||||
|
|
||||||
for i,_rtime in pairs(self.recoverytime) do
|
|
||||||
local rtime=_rtime --#AIRBOSS.Recovery
|
|
||||||
|
|
||||||
if abstime>=rtime.START and abstime<=rtime.STOP then
|
|
||||||
|
|
||||||
-- This is a valid time slot. Do not touch recovery again!
|
|
||||||
recovery=rtime
|
|
||||||
|
|
||||||
elseif abstime>rtime.STOP then
|
|
||||||
-- Stop time has already passed.
|
|
||||||
-- We do not remove the time sind the above #recovery check would fail by automatically setting case 1 always!
|
|
||||||
--table.insert(remove, i)
|
|
||||||
elseif abstime<rtime.START then
|
|
||||||
-- This recovery time is in the future.
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--TODO: Remove past recovery times from list? If so, #recovery will fail!
|
|
||||||
|
|
||||||
local recover=false
|
|
||||||
|
|
||||||
if recovery then
|
|
||||||
-- We are inside a recovery time window.
|
|
||||||
if self:IsRecovering() then
|
|
||||||
-- Do nothing, i.e. keep recovering.
|
|
||||||
recovery=nil
|
|
||||||
elseif self:IsIdle() then
|
|
||||||
self:I(self.lid..string.format("Starting case %d recovery."))
|
|
||||||
end
|
|
||||||
else
|
|
||||||
-- At this point, there is not recovery set.
|
|
||||||
if self:IsRecovering() then
|
|
||||||
-- Stop recovery and switch to idle.
|
|
||||||
self:I(self.lid.."Stopping recovery.")
|
|
||||||
recover=false
|
|
||||||
elseif self:IsIdle() then
|
|
||||||
-- Nothing to do.
|
|
||||||
recover=nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return recovery
|
|
||||||
end
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -1369,31 +1399,32 @@ function AIRBOSS:_GetAircraftAoA(playerData)
|
|||||||
local skyhawk=playerData.actype==AIRBOSS.AircraftCarrier.A4EC
|
local skyhawk=playerData.actype==AIRBOSS.AircraftCarrier.A4EC
|
||||||
local harrier=playerData.actype==AIRBOSS.AircraftCarrier.AV8B
|
local harrier=playerData.actype==AIRBOSS.AircraftCarrier.AV8B
|
||||||
|
|
||||||
local aoa -- #AIRBOSS.AircraftAoA
|
local aoa={} -- #AIRBOSS.AircraftAoA
|
||||||
|
|
||||||
if hornet then
|
if hornet then
|
||||||
|
-- F/A-18C Hornet parameters
|
||||||
aoa.Slow=9.3
|
aoa.Slow=9.3
|
||||||
aoa.OnSpeedMax=8.8
|
aoa.OnSpeedMax=8.8
|
||||||
aoa.OnSpeed=8.1
|
aoa.OnSpeed=8.1
|
||||||
aoa.OnSpeedMin=7.4
|
aoa.OnSpeedMin=7.4
|
||||||
aoa.Fast=6.9
|
aoa.Fast=6.9
|
||||||
elseif skyhawk then
|
elseif skyhawk then
|
||||||
-- TODO: A-4 parameters! On speed AoA?
|
-- A-4-E parameters from https://forums.eagle.ru/showpost.php?p=3703467&postcount=390
|
||||||
aoa.Slow=9.3
|
aoa.Slow=18.5
|
||||||
aoa.OnSpeedMax=8.8
|
aoa.OnSpeedMax=18.0
|
||||||
aoa.OnSpeed=8.1
|
aoa.OnSpeed=17.5
|
||||||
aoa.OnSpeedMin=7.4
|
aoa.OnSpeedMin=17.0
|
||||||
aoa.Fast=6.9
|
aoa.Fast=16.5
|
||||||
elseif harrier then
|
elseif harrier then
|
||||||
-- TODO: AV-8B parameters! On speed AoA?
|
-- TODO: AV-8B parameters! On speed AoA?
|
||||||
aoa.Slow=13.0
|
aoa.Slow=13.0
|
||||||
aoa.OnSpeedMax=12
|
aoa.OnSpeedMax=12.0
|
||||||
aoa.OnSpeed=11
|
aoa.OnSpeed=11.0
|
||||||
aoa.OnSpeedMin=10
|
aoa.OnSpeedMin=10.0
|
||||||
aoa.Fast=9.0
|
aoa.Fast=9.0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return aoa
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Get optimal aircraft flight parameters at checkpoint.
|
--- Get optimal aircraft flight parameters at checkpoint.
|
||||||
@@ -1680,14 +1711,14 @@ function AIRBOSS:_ScanCarrierZone()
|
|||||||
-- Send AI to marshal stack.
|
-- Send AI to marshal stack.
|
||||||
self:_MarshalAI(knownflight, stack)
|
self:_MarshalAI(knownflight, stack)
|
||||||
|
|
||||||
-- Add group to marshal stack queue
|
-- Add group to marshal stack queue.
|
||||||
self:_AddMarshallGroup(knownflight, stack)
|
self:_AddMarshallGroup(knownflight, stack)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
self:I(self.lid..string.format("New flight group %s of type %s detected inside CCA.", groupname, actype))
|
-- Unknown new flight. Create a new flight group.
|
||||||
self:_CreateFlightGroup(group)
|
self:_CreateFlightGroup(group)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1902,7 +1933,7 @@ function AIRBOSS:_AddMarshallGroup(flight, stack)
|
|||||||
|
|
||||||
-- Marshal message.
|
-- Marshal message.
|
||||||
-- TODO: Get charlie time estimate.
|
-- TODO: Get charlie time estimate.
|
||||||
local text=string.format("%s, Case %d, BRC is %03d, hold at %d. Expected Charlie Time XX.\n", flight.onboard, flight.case, brc, alt)
|
local text=string.format("Case %d, BRC is %03d, hold at %d. Expected Charlie Time XX.\n", flight.case, brc, alt)
|
||||||
text=text..string.format("Altimeter %.2f. Report see me.", P)
|
text=text..string.format("Altimeter %.2f. Report see me.", P)
|
||||||
|
|
||||||
-- Message to all players.
|
-- Message to all players.
|
||||||
@@ -2120,7 +2151,7 @@ end
|
|||||||
function AIRBOSS:_CreateFlightGroup(group)
|
function AIRBOSS:_CreateFlightGroup(group)
|
||||||
|
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
self:I(self.lid..string.format("Creating new flight for group %s.", group:GetName()))
|
self:I(self.lid..string.format("Creating new flight for group %s of aircraft type %s.", group:GetName(), group:GetTypeName()))
|
||||||
|
|
||||||
-- New flight.
|
-- New flight.
|
||||||
local flight={} --#AIRBOSS.Flightitem
|
local flight={} --#AIRBOSS.Flightitem
|
||||||
@@ -2443,6 +2474,10 @@ function AIRBOSS:_CheckPlayerStatus()
|
|||||||
|
|
||||||
-- Nothing to do here at the moment.
|
-- Nothing to do here at the moment.
|
||||||
|
|
||||||
|
elseif playerData.step==AIRBOSS.PatternStep.SPINNING then
|
||||||
|
|
||||||
|
-- Might still be better to stay in commencing?
|
||||||
|
|
||||||
elseif playerData.step==AIRBOSS.PatternStep.HOLDING then
|
elseif playerData.step==AIRBOSS.PatternStep.HOLDING then
|
||||||
|
|
||||||
-- CASE I/II/III: In holding pattern.
|
-- CASE I/II/III: In holding pattern.
|
||||||
@@ -2541,7 +2576,7 @@ function AIRBOSS:_CheckPlayerStatus()
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
self:E(self.lid..string.format("ERROR: unknown player step %s", tostring(playerData.step)))
|
self:E(self.lid..string.format("ERROR: Unknown player step %s. Please report!", tostring(playerData.step)))
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2605,6 +2640,9 @@ function AIRBOSS:OnEventBirth(EventData)
|
|||||||
--self:RadioTransmission(self.LSOradio, self.radiocall["LONGINGROOVE"], false, 5)
|
--self:RadioTransmission(self.LSOradio, self.radiocall["LONGINGROOVE"], false, 5)
|
||||||
--self:RadioTransmission(self.LSOradio, self.radiocall.LONGINGROOVE, false, 20)
|
--self:RadioTransmission(self.LSOradio, self.radiocall.LONGINGROOVE, false, 20)
|
||||||
|
|
||||||
|
|
||||||
|
self:_Number2Sound(self.LSOradio, "129", 10)
|
||||||
|
|
||||||
if self.Debug then
|
if self.Debug then
|
||||||
--self:_MarkCase23Zones(_unit:GetName())
|
--self:_MarkCase23Zones(_unit:GetName())
|
||||||
end
|
end
|
||||||
@@ -3278,7 +3316,7 @@ function AIRBOSS:_CheckForLongDownwind(playerData)
|
|||||||
if X<limit then --and relhead<45 then
|
if X<limit then --and relhead<45 then
|
||||||
|
|
||||||
-- Sound output.
|
-- Sound output.
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.LONGINGROOVE)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.LONGINGROOVE)
|
||||||
|
|
||||||
-- Debrief.
|
-- Debrief.
|
||||||
self:_AddToDebrief(playerData, "Long in the groove - Pattern Wave Off!")
|
self:_AddToDebrief(playerData, "Long in the groove - Pattern Wave Off!")
|
||||||
@@ -3323,8 +3361,7 @@ function AIRBOSS:_Abeam(playerData)
|
|||||||
local hintDist, debriefDist=self:_DistanceCheck(playerData, dist) --math.abs(Z)
|
local hintDist, debriefDist=self:_DistanceCheck(playerData, dist) --math.abs(Z)
|
||||||
|
|
||||||
-- Paddles contact.
|
-- Paddles contact.
|
||||||
-- TODO: radio message.
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.PADDLESCONTACT)
|
||||||
self:MessageToPlayer(playerData, "Paddles, contact.", "LSO", "")
|
|
||||||
|
|
||||||
-- Message to player.
|
-- Message to player.
|
||||||
if playerData.difficulty~=AIRBOSS.Difficulty.HARD then
|
if playerData.difficulty~=AIRBOSS.Difficulty.HARD then
|
||||||
@@ -3553,7 +3590,7 @@ function AIRBOSS:_Groove(playerData)
|
|||||||
if rho<=RXX and playerData.step==AIRBOSS.PatternStep.GROOVE_XX then
|
if rho<=RXX and playerData.step==AIRBOSS.PatternStep.GROOVE_XX then
|
||||||
|
|
||||||
-- LSO "Call the ball" call.
|
-- LSO "Call the ball" call.
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.CALLTHEBALL)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.CALLTHEBALL)
|
||||||
playerData.Tlso=timer.getTime()
|
playerData.Tlso=timer.getTime()
|
||||||
|
|
||||||
-- Store data.
|
-- Store data.
|
||||||
@@ -3565,7 +3602,7 @@ function AIRBOSS:_Groove(playerData)
|
|||||||
elseif rho<=RRB and playerData.step==AIRBOSS.PatternStep.GROOVE_RB then
|
elseif rho<=RRB and playerData.step==AIRBOSS.PatternStep.GROOVE_RB then
|
||||||
|
|
||||||
-- Pilot: "Roger ball" call.
|
-- Pilot: "Roger ball" call.
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.ROGERBALL)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.ROGERBALL)
|
||||||
playerData.Tlso=timer.getTime()+1
|
playerData.Tlso=timer.getTime()+1
|
||||||
|
|
||||||
-- Store data.
|
-- Store data.
|
||||||
@@ -3607,7 +3644,7 @@ function AIRBOSS:_Groove(playerData)
|
|||||||
if waveoff then
|
if waveoff then
|
||||||
|
|
||||||
-- LSO Wave off!
|
-- LSO Wave off!
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.WAVEOFF)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.WAVEOFF)
|
||||||
playerData.Tlso=timer.getTime()
|
playerData.Tlso=timer.getTime()
|
||||||
|
|
||||||
-- Player was waved off!
|
-- Player was waved off!
|
||||||
@@ -4467,27 +4504,20 @@ function AIRBOSS:_LSOadvice(playerData, glideslopeError, lineupError)
|
|||||||
-- Player group.
|
-- Player group.
|
||||||
local player=playerData.unit:GetGroup()
|
local player=playerData.unit:GetGroup()
|
||||||
|
|
||||||
-- Init delay.
|
|
||||||
local delay=0
|
|
||||||
|
|
||||||
-- Glideslope high/low calls.
|
-- Glideslope high/low calls.
|
||||||
local text=""
|
local text=""
|
||||||
if glideslopeError>1 then
|
if glideslopeError>1 then
|
||||||
-- "You're high!"
|
-- "You're high!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.HIGH, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.HIGH, true)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif glideslopeError>0.5 then
|
elseif glideslopeError>0.5 then
|
||||||
-- "You're a little high."
|
-- "You're a little high."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.HIGH, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.HIGH, false)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif glideslopeError<-1.0 then
|
elseif glideslopeError<-1.0 then
|
||||||
-- "Power!"
|
-- "Power!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.POWER, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.POWER, true)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif glideslopeError<-0.5 then
|
elseif glideslopeError<-0.5 then
|
||||||
-- "You're a little low."
|
-- "You're a little low."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.POWER, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.POWER, false)
|
||||||
--delay=delay+1.5
|
|
||||||
else
|
else
|
||||||
text="Good altitude."
|
text="Good altitude."
|
||||||
end
|
end
|
||||||
@@ -4498,20 +4528,16 @@ function AIRBOSS:_LSOadvice(playerData, glideslopeError, lineupError)
|
|||||||
-- Lineup left/right calls.
|
-- Lineup left/right calls.
|
||||||
if lineupError<-3 then
|
if lineupError<-3 then
|
||||||
-- "Come left!"
|
-- "Come left!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.COMELEFT, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.COMELEFT, true)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif lineupError<-1 then
|
elseif lineupError<-1 then
|
||||||
-- "Come left."
|
-- "Come left."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.COMELEFT, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.COMELEFT, false)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif lineupError>3 then
|
elseif lineupError>3 then
|
||||||
-- "Right for lineup!"
|
-- "Right for lineup!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.RIGHTFORLINEUP, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.RIGHTFORLINEUP, true)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif lineupError>1 then
|
elseif lineupError>1 then
|
||||||
-- "Right for lineup."
|
-- "Right for lineup."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.RIGHTFORLINEUP, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.RIGHTFORLINEUP, false)
|
||||||
--delay=delay+1.5
|
|
||||||
else
|
else
|
||||||
text=text.."Good lineup."
|
text=text.."Good lineup."
|
||||||
end
|
end
|
||||||
@@ -4527,22 +4553,18 @@ function AIRBOSS:_LSOadvice(playerData, glideslopeError, lineupError)
|
|||||||
-- Rate aoa.
|
-- Rate aoa.
|
||||||
if aoa>=aircraftaoa.Slow then
|
if aoa>=aircraftaoa.Slow then
|
||||||
-- "Your're slow!"
|
-- "Your're slow!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.SLOW, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.SLOW, true)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif aoa>=aircraftaoa.OnSpeedMax and aoa<aircraftaoa.Slow then
|
elseif aoa>=aircraftaoa.OnSpeedMax and aoa<aircraftaoa.Slow then
|
||||||
-- "Your're a little slow."
|
-- "Your're a little slow."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.SLOW, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.SLOW, false)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif aoa>=aircraftaoa.OnSpeedMin and aoa<aircraftaoa.OnSpeedMax then
|
elseif aoa>=aircraftaoa.OnSpeedMin and aoa<aircraftaoa.OnSpeedMax then
|
||||||
text=text.."You're on speed."
|
text=text.."You're on speed."
|
||||||
elseif aoa>=aircraftaoa.Fast and aoa<aircraftaoa.OnSpeedMin then
|
elseif aoa>=aircraftaoa.Fast and aoa<aircraftaoa.OnSpeedMin then
|
||||||
-- "You're a little fast."
|
-- "You're a little fast."
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.FAST, false, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.FAST, false)
|
||||||
--delay=delay+1.5
|
|
||||||
elseif aoa<aircraftaoa.Fast then
|
elseif aoa<aircraftaoa.Fast then
|
||||||
-- "You're fast!"
|
-- "You're fast!"
|
||||||
self:RadioTransmission(self.LSOradio, self.radiocall.FAST, true, delay)
|
self:RadioTransmission(self.LSOradio, AIRBOSS.LSOCall.FAST, true)
|
||||||
--delay=delay+1.5
|
|
||||||
else
|
else
|
||||||
text=text.."Unknown AoA state."
|
text=text.."Unknown AoA state."
|
||||||
end
|
end
|
||||||
@@ -5570,12 +5592,22 @@ function AIRBOSS:RadioTransmit(radio, call, loud, delay)
|
|||||||
|
|
||||||
if (delay==nil) or (delay and delay==0) then
|
if (delay==nil) or (delay and delay==0) then
|
||||||
|
|
||||||
local filename
|
-- Construct file name and subtitle.
|
||||||
|
local filename=call.file
|
||||||
|
local subtitle=call.subtitle
|
||||||
if loud then
|
if loud then
|
||||||
filename=call.louder
|
if call.loud then
|
||||||
|
filename=filename.."_Loud"
|
||||||
|
end
|
||||||
|
if subtitle and subtitle~="" then
|
||||||
|
subtitle=subtitle.."!"
|
||||||
|
end
|
||||||
else
|
else
|
||||||
filename=call.normal
|
if subtitle and subtitle~="" then
|
||||||
|
subtitle=subtitle.."."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
filename=filename.."."..call.suffix
|
||||||
|
|
||||||
-- New transmission.
|
-- New transmission.
|
||||||
radio:NewUnitTransmission(filename, call.subtitle, call.duration, radio.Frequency/1000000, radio.Modulation, false)
|
radio:NewUnitTransmission(filename, call.subtitle, call.duration, radio.Frequency/1000000, radio.Modulation, false)
|
||||||
@@ -5583,13 +5615,14 @@ function AIRBOSS:RadioTransmit(radio, call, loud, delay)
|
|||||||
-- Broadcast message.
|
-- Broadcast message.
|
||||||
radio:Broadcast(true)
|
radio:Broadcast(true)
|
||||||
|
|
||||||
-- "Subtitle".
|
-- Message "Subtitle" to all players.
|
||||||
self:MessageToAll(call.subtitle, radio:GetAlias(), "", call.duration)
|
self:MessageToAll(subtitle, radio:GetAlias(), "", call.duration)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
-- Scheduled transmission.
|
-- Scheduled transmission.
|
||||||
SCHEDULER:New(nil, self.RadioTransmission, {self, radio, call, loud}, delay)
|
SCHEDULER:New(nil, self.RadioTransmission, {self, radio, call, loud}, delay)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -5620,6 +5653,11 @@ function AIRBOSS:MessageToPlayer(playerData, message, sender, receiver, duration
|
|||||||
end
|
end
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
|
|
||||||
|
-- TODO: Test! Need to make this better!.
|
||||||
|
if receiver==playerData.onboard then
|
||||||
|
self:_Number2Sound(self.LSOradio, receiver, delay)
|
||||||
|
end
|
||||||
|
|
||||||
if delay and delay>0 then
|
if delay and delay>0 then
|
||||||
SCHEDULER:New(nil, self.MessageToPlayer, {self, playerData, message, sender, receiver, duration, clear}, delay)
|
SCHEDULER:New(nil, self.MessageToPlayer, {self, playerData, message, sender, receiver, duration, clear}, delay)
|
||||||
else
|
else
|
||||||
@@ -5652,6 +5690,69 @@ function AIRBOSS:MessageToAll(message, sender, receiver, duration, clear, delay)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Convert a number (as string) into a radio message.
|
||||||
|
-- E.g. for board number or headings.
|
||||||
|
-- @param #AIRBOSS self
|
||||||
|
-- @param Core.Radio#RADIO radio Radio used for transmission.
|
||||||
|
-- @param #string number Number string, e.g. "032" or "183".
|
||||||
|
-- @param #number delay Delay before transmission in seconds.
|
||||||
|
function AIRBOSS:_Number2Sound(radio, number, delay)
|
||||||
|
|
||||||
|
--- Split string into characters.
|
||||||
|
local function _split(str)
|
||||||
|
local chars={}
|
||||||
|
for i=1,#str do
|
||||||
|
local c=str:sub(i,i)
|
||||||
|
table.insert(chars, c)
|
||||||
|
end
|
||||||
|
return chars
|
||||||
|
end
|
||||||
|
|
||||||
|
local alias=radio:GetAlias()
|
||||||
|
local sender=""
|
||||||
|
if alias=="LSO" then
|
||||||
|
sender="LSOCall"
|
||||||
|
elseif alias=="MARSHAL" then
|
||||||
|
sender="MarshalCall"
|
||||||
|
elseif alias=="AIRBOSS" then
|
||||||
|
sender="AirbossCall"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Split string into characters.
|
||||||
|
local numbers=_split(number)
|
||||||
|
|
||||||
|
for i=1,#numbers do
|
||||||
|
|
||||||
|
-- Current number
|
||||||
|
local n=numbers[i]
|
||||||
|
|
||||||
|
if n=="0" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N0, false, delay)
|
||||||
|
elseif n=="1" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N1, false, delay)
|
||||||
|
elseif n=="2" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N2, false, delay)
|
||||||
|
elseif n=="3" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N3, false, delay)
|
||||||
|
elseif n=="4" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N4, false, delay)
|
||||||
|
elseif n=="5" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N5, false, delay)
|
||||||
|
elseif n=="6" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N6, false, delay)
|
||||||
|
elseif n=="7" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N7, false, delay)
|
||||||
|
elseif n=="8" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N8, false, delay)
|
||||||
|
elseif n=="9" then
|
||||||
|
self:RadioTransmission(radio, AIRBOSS[sender].N9, false, delay)
|
||||||
|
else
|
||||||
|
self:E(self.lid..string.format("ERROR: Unknown number %s", tostring(n)))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- RADIO MENU Functions
|
-- RADIO MENU Functions
|
||||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -6539,25 +6640,25 @@ function AIRBOSS:_MarkCase23Zones(_unitName, flare)
|
|||||||
else
|
else
|
||||||
|
|
||||||
-- Case I/II: Initial
|
-- Case I/II: Initial
|
||||||
if case==1 or case==2 or self.Debug then
|
if case==1 or case==2 then
|
||||||
text=text.."* initial with WHITE smoke\n"
|
text=text.."* initial with WHITE smoke\n"
|
||||||
self.zoneInitial:SmokeZone(SMOKECOLOR.White, 45)
|
self.zoneInitial:SmokeZone(SMOKECOLOR.White, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Case II/III: Approach Corridor
|
-- Case II/III: Approach Corridor
|
||||||
if case==2 or case==3 or self.Debug then
|
if case==2 or case==3 then
|
||||||
text=text.."* approach corridor with GREEN smoke\n"
|
text=text.."* approach corridor with GREEN smoke\n"
|
||||||
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Case II/III: platform
|
-- Case II/III: platform
|
||||||
if case==2 or case==3 or self.Debug then
|
if case==2 or case==3 then
|
||||||
text=text.."* platform with RED smoke\n"
|
text=text.."* platform with RED smoke\n"
|
||||||
self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Red, 45)
|
self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Red, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Case II/III: arc in/out if offset>0.
|
-- Case II/III: arc in/out if offset>0.
|
||||||
if case==2 or case==3 or self.Debug then
|
if case==2 or case==3 then
|
||||||
if math.abs(self.holdingoffset)>0 then
|
if math.abs(self.holdingoffset)>0 then
|
||||||
self:_GetZoneArcIn(case):SmokeZone(SMOKECOLOR.Red, 45)
|
self:_GetZoneArcIn(case):SmokeZone(SMOKECOLOR.Red, 45)
|
||||||
text=text.."* arc turn in with YELLOW flares\n"
|
text=text.."* arc turn in with YELLOW flares\n"
|
||||||
@@ -6567,13 +6668,13 @@ function AIRBOSS:_MarkCase23Zones(_unitName, flare)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Case III: dirty up
|
-- Case III: dirty up
|
||||||
if case==3 or self.Debug then
|
if case==3 then
|
||||||
text=text.."* dirty up with ORANGE flares\n"
|
text=text.."* dirty up with ORANGE flares\n"
|
||||||
self:_GetZoneDirtyUp(case):SmokeZone(SMOKECOLOR.Orange, 45)
|
self:_GetZoneDirtyUp(case):SmokeZone(SMOKECOLOR.Orange, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Case III: dirty up
|
-- Case III: dirty up
|
||||||
if case==3 or self.Debug then
|
if case==3 then
|
||||||
text=text.."* bullseye with BLUE smoke\n"
|
text=text.."* bullseye with BLUE smoke\n"
|
||||||
self:_GetZoneBullseye(case):SmokeZone(SMOKECOLOR.Blue, 45)
|
self:_GetZoneBullseye(case):SmokeZone(SMOKECOLOR.Blue, 45)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user