|
|
|
|
@@ -27,10 +27,11 @@
|
|
|
|
|
-- **Supported Carriers:**
|
|
|
|
|
--
|
|
|
|
|
-- * [USS John C. Stennis](https://en.wikipedia.org/wiki/USS_John_C._Stennis) (CVN-74)
|
|
|
|
|
-- * [USS Theodore Roosevelt](https://en.wikipedia.org/wiki/USS_Theodore_Roosevelt_(CVN-71)) (CVN-71) [Super Carrier Module]
|
|
|
|
|
-- * [USS Abraham Lincoln](https://en.wikipedia.org/wiki/USS_Abraham_Lincoln_(CVN-72)) (CVN-72) [Super Carrier Module]
|
|
|
|
|
-- * [USS George Washington](https://en.wikipedia.org/wiki/USS_George_Washington_(CVN-73)) (CVN-73) [Super Carrier Module]
|
|
|
|
|
-- * [USS Harry S. Truman](https://en.wikipedia.org/wiki/USS_Harry_S._Truman) (CVN-75) [Super Carrier Module]
|
|
|
|
|
-- * [USS Theodore Roosevelt](https://en.wikipedia.org/wiki/USS_Theodore_Roosevelt_(CVN-71)) (CVN-71) [Super Carrier Module]
|
|
|
|
|
-- * [USS Abraham Lincoln](https://en.wikipedia.org/wiki/USS_Abraham_Lincoln_(CVN-72)) (CVN-72) [Super Carrier Module]
|
|
|
|
|
-- * [USS George Washington](https://en.wikipedia.org/wiki/USS_George_Washington_(CVN-73)) (CVN-73) [Super Carrier Module]
|
|
|
|
|
-- * [USS Harry S. Truman](https://en.wikipedia.org/wiki/USS_Harry_S._Truman) (CVN-75) [Super Carrier Module]
|
|
|
|
|
-- * [USS Forrestal](https://en.wikipedia.org/wiki/USS_Forrestal_(CV-59)) (CV-59) [Heatblur Carrier Module]
|
|
|
|
|
-- * [USS Tarawa](https://en.wikipedia.org/wiki/USS_Tarawa_(LHA-1)) (LHA-1) [**WIP**]
|
|
|
|
|
-- * [USS America](https://en.wikipedia.org/wiki/USS_America_(LHA-6)) (LHA-6) [**WIP**]
|
|
|
|
|
-- * [Juan Carlos I](https://en.wikipedia.org/wiki/Spanish_amphibious_assault_ship_Juan_Carlos_I) (L61) [**WIP**]
|
|
|
|
|
@@ -1295,6 +1296,7 @@ AIRBOSS.AircraftCarrier={
|
|
|
|
|
-- @field #string WASHINGTON USS George Washington (CVN-73) [Super Carrier Module]
|
|
|
|
|
-- @field #string STENNIS USS John C. Stennis (CVN-74)
|
|
|
|
|
-- @field #string TRUMAN USS Harry S. Truman (CVN-75) [Super Carrier Module]
|
|
|
|
|
-- @field #string FORRESTAL USS Forrestal (CV-59) [Heatblur Carrier Module]
|
|
|
|
|
-- @field #string VINSON USS Carl Vinson (CVN-70) [Obsolete]
|
|
|
|
|
-- @field #string TARAWA USS Tarawa (LHA-1)
|
|
|
|
|
-- @field #string AMERICA USS America (LHA-6)
|
|
|
|
|
@@ -1306,6 +1308,7 @@ AIRBOSS.CarrierType={
|
|
|
|
|
WASHINGTON="CVN_73",
|
|
|
|
|
TRUMAN="CVN_75",
|
|
|
|
|
STENNIS="Stennis",
|
|
|
|
|
FORRESTAL="Forrestal",
|
|
|
|
|
VINSON="VINSON",
|
|
|
|
|
TARAWA="LHA_Tarawa",
|
|
|
|
|
AMERICA="USS America LHA-6",
|
|
|
|
|
@@ -1723,7 +1726,7 @@ AIRBOSS.MenuF10Root=nil
|
|
|
|
|
|
|
|
|
|
--- Airboss class version.
|
|
|
|
|
-- @field #string version
|
|
|
|
|
AIRBOSS.version="1.1.6"
|
|
|
|
|
AIRBOSS.version="1.2.0"
|
|
|
|
|
|
|
|
|
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
-- TODO list
|
|
|
|
|
@@ -1974,6 +1977,8 @@ function AIRBOSS:New(carriername, alias)
|
|
|
|
|
self:_InitNimitz()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then
|
|
|
|
|
self:_InitNimitz()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then
|
|
|
|
|
self:_InitForrestal()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.VINSON then
|
|
|
|
|
-- TODO: Carl Vinson parameters.
|
|
|
|
|
self:_InitStennis()
|
|
|
|
|
@@ -2023,10 +2028,10 @@ function AIRBOSS:New(carriername, alias)
|
|
|
|
|
self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Blue, 45)
|
|
|
|
|
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
|
|
|
|
self:_GetZoneHolding(case, 1):SmokeZone(SMOKECOLOR.White, 45)
|
|
|
|
|
self:_GetZoneHolding(case, 2):SmokeZone(SMOKECOLOR.White, 45)
|
|
|
|
|
self:_GetZoneHolding(case, 2):SmokeZone(SMOKECOLOR.White, 45)
|
|
|
|
|
self:_GetZoneInitial(case):SmokeZone(SMOKECOLOR.Orange, 45)
|
|
|
|
|
self:_GetZoneCommence(case, 1):SmokeZone(SMOKECOLOR.Red, 45)
|
|
|
|
|
self:_GetZoneCommence(case, 2):SmokeZone(SMOKECOLOR.Red, 45)
|
|
|
|
|
self:_GetZoneCommence(case, 2):SmokeZone(SMOKECOLOR.Red, 45)
|
|
|
|
|
self:_GetZoneAbeamLandingSpot():SmokeZone(SMOKECOLOR.Red, 5)
|
|
|
|
|
self:_GetZoneLandingSpot():SmokeZone(SMOKECOLOR.Red, 5)
|
|
|
|
|
end
|
|
|
|
|
@@ -2041,7 +2046,7 @@ function AIRBOSS:New(carriername, alias)
|
|
|
|
|
local stern=self:_GetSternCoord()
|
|
|
|
|
|
|
|
|
|
-- Bow pos.
|
|
|
|
|
local bow=stern:Translate(self.carrierparam.totlength, hdg)
|
|
|
|
|
local bow=stern:Translate(self.carrierparam.totlength, hdg, true)
|
|
|
|
|
|
|
|
|
|
-- End of rwy.
|
|
|
|
|
local rwy=stern:Translate(self.carrierparam.rwylength, FB, true)
|
|
|
|
|
@@ -2059,31 +2064,31 @@ function AIRBOSS:New(carriername, alias)
|
|
|
|
|
bow:FlareYellow()
|
|
|
|
|
|
|
|
|
|
-- Runway half width = 10 m.
|
|
|
|
|
local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90)
|
|
|
|
|
local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90)
|
|
|
|
|
r1:FlareWhite()
|
|
|
|
|
r2:FlareWhite()
|
|
|
|
|
local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90, true)
|
|
|
|
|
local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90, true)
|
|
|
|
|
--r1:FlareWhite()
|
|
|
|
|
--r2:FlareWhite()
|
|
|
|
|
|
|
|
|
|
-- End of runway.
|
|
|
|
|
rwy:FlareRed()
|
|
|
|
|
|
|
|
|
|
-- Right 30 meters from stern.
|
|
|
|
|
local cR=stern:Translate(self.carrierparam.totwidthstarboard, hdg+90)
|
|
|
|
|
cR:FlareYellow()
|
|
|
|
|
local cR=stern:Translate(self.carrierparam.totwidthstarboard, hdg+90, true)
|
|
|
|
|
--cR:FlareYellow()
|
|
|
|
|
|
|
|
|
|
-- Left 40 meters from stern.
|
|
|
|
|
local cL=stern:Translate(self.carrierparam.totwidthport, hdg-90)
|
|
|
|
|
cL:FlareYellow()
|
|
|
|
|
local cL=stern:Translate(self.carrierparam.totwidthport, hdg-90, true)
|
|
|
|
|
--cL:FlareYellow()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Carrier specific.
|
|
|
|
|
if self.carrier:GetTypeName()~=AIRBOSS.CarrierType.TARAWA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.AMERICA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
|
|
|
|
|
-- Flare wires.
|
|
|
|
|
local w1=stern:Translate(self.carrierparam.wire1, FB)
|
|
|
|
|
local w2=stern:Translate(self.carrierparam.wire2, FB)
|
|
|
|
|
local w3=stern:Translate(self.carrierparam.wire3, FB)
|
|
|
|
|
local w4=stern:Translate(self.carrierparam.wire4, FB)
|
|
|
|
|
local w1=stern:Translate(self.carrierparam.wire1, FB, true)
|
|
|
|
|
local w2=stern:Translate(self.carrierparam.wire2, FB, true)
|
|
|
|
|
local w3=stern:Translate(self.carrierparam.wire3, FB, true)
|
|
|
|
|
local w4=stern:Translate(self.carrierparam.wire4, FB, true)
|
|
|
|
|
w1:FlareWhite()
|
|
|
|
|
w2:FlareYellow()
|
|
|
|
|
w3:FlareWhite()
|
|
|
|
|
@@ -4377,6 +4382,35 @@ function AIRBOSS:_InitNimitz()
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Init parameters for Forrestal class super carriers.
|
|
|
|
|
-- @param #AIRBOSS self
|
|
|
|
|
function AIRBOSS:_InitForrestal()
|
|
|
|
|
|
|
|
|
|
-- Init Nimitz as default.
|
|
|
|
|
self:_InitNimitz()
|
|
|
|
|
|
|
|
|
|
-- Carrier Parameters.
|
|
|
|
|
self.carrierparam.sterndist =-135.5
|
|
|
|
|
self.carrierparam.deckheight = 20 --20.1494 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\Database\USS_CVN_7X.lua
|
|
|
|
|
|
|
|
|
|
-- Total size of the carrier (approx as rectangle).
|
|
|
|
|
self.carrierparam.totlength=315 -- Wiki says 325 meters overall length.
|
|
|
|
|
self.carrierparam.totwidthport=45 -- Wiki says 73 meters overall beam.
|
|
|
|
|
self.carrierparam.totwidthstarboard=35
|
|
|
|
|
|
|
|
|
|
-- Landing runway.
|
|
|
|
|
self.carrierparam.rwyangle = -9.1359 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\scripts\USS_Nimitz_RunwaysAndRoutes.lua
|
|
|
|
|
self.carrierparam.rwylength = 212
|
|
|
|
|
self.carrierparam.rwywidth = 25
|
|
|
|
|
|
|
|
|
|
-- Wires.
|
|
|
|
|
self.carrierparam.wire1 = 44 -- Distance from stern to first wire. Original from Frank - 42
|
|
|
|
|
self.carrierparam.wire2 = 54 --51.5
|
|
|
|
|
self.carrierparam.wire3 = 64 --62
|
|
|
|
|
self.carrierparam.wire4 = 74 --72.5
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Init parameters for LHA-1 Tarawa carrier.
|
|
|
|
|
-- @param #AIRBOSS self
|
|
|
|
|
function AIRBOSS:_InitTarawa()
|
|
|
|
|
@@ -4978,7 +5012,7 @@ function AIRBOSS:_InitVoiceOvers()
|
|
|
|
|
duration=2.0,
|
|
|
|
|
subduration=5,
|
|
|
|
|
},
|
|
|
|
|
EXPECTSPOT5={
|
|
|
|
|
EXPECTSPOT5={
|
|
|
|
|
file="LSO-ExpectSpot5",
|
|
|
|
|
suffix="ogg",
|
|
|
|
|
loud=false,
|
|
|
|
|
@@ -5817,8 +5851,8 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
|
|
|
|
|
elseif skyhawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(600)
|
|
|
|
|
speed=UTILS.KnotsToMps(250)
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(800)
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(800)
|
|
|
|
|
speed=UTILS.KnotsToMps(300)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -5830,8 +5864,8 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
|
|
|
|
|
elseif skyhawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(600)
|
|
|
|
|
speed=UTILS.KnotsToMps(250)
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(800)
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(800)
|
|
|
|
|
speed=UTILS.KnotsToMps(300)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -5868,7 +5902,7 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
|
|
|
|
|
dist=UTILS.NMToMeters(1.2)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if goshawk then
|
|
|
|
|
if goshawk then
|
|
|
|
|
-- 0.9 to 1.1 NM per natops ch.4 page 48
|
|
|
|
|
dist=UTILS.NMToMeters(0.9)
|
|
|
|
|
else
|
|
|
|
|
@@ -5879,7 +5913,7 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
|
|
|
|
|
|
|
|
|
|
if hornet or tomcat then
|
|
|
|
|
alt=UTILS.FeetToMeters(500)
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
elseif goshawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(450)
|
|
|
|
|
elseif skyhawk then
|
|
|
|
|
alt=UTILS.FeetToMeters(500)
|
|
|
|
|
@@ -6381,8 +6415,8 @@ function AIRBOSS:_MarshalPlayer(playerData, stack)
|
|
|
|
|
-- Set stack flag.
|
|
|
|
|
flight.flag=stack
|
|
|
|
|
|
|
|
|
|
-- Trigger Marshal event.
|
|
|
|
|
self:Marshal(flight)
|
|
|
|
|
-- Trigger Marshal event.
|
|
|
|
|
self:Marshal(flight)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
@@ -9640,7 +9674,7 @@ function AIRBOSS:_Bullseye(playerData)
|
|
|
|
|
self:_PlayerHint(playerData)
|
|
|
|
|
|
|
|
|
|
-- LSO expect spot 5 or 7.5 call
|
|
|
|
|
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, nil, nil, nil, true)
|
|
|
|
|
elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, nil, nil, nil, true)
|
|
|
|
|
@@ -9825,7 +9859,7 @@ function AIRBOSS:_Abeam(playerData)
|
|
|
|
|
self:RadioTransmission(self.LSORadio, self.LSOCall.PADDLESCONTACT, nil, nil, nil, true)
|
|
|
|
|
|
|
|
|
|
-- LSO expect spot 5 or 7.5 call
|
|
|
|
|
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, false, 5, nil, true)
|
|
|
|
|
elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, false, 5, nil, true)
|
|
|
|
|
@@ -10215,25 +10249,25 @@ function AIRBOSS:_Groove(playerData)
|
|
|
|
|
-- Distance in NM.
|
|
|
|
|
local d=UTILS.MetersToNM(rho)
|
|
|
|
|
|
|
|
|
|
-- Drift on lineup.
|
|
|
|
|
if rho>=RAR and rho<=RIM then
|
|
|
|
|
if gd.LUE>0.22 and lineupError<-0.22 then
|
|
|
|
|
env.info" Drift Right across centre ==> DR-"
|
|
|
|
|
gd.Drift=" DR"
|
|
|
|
|
self:T(self.lid..string.format("Got Drift Right across centre step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE<-0.22 and lineupError>0.22 then
|
|
|
|
|
env.info" Drift Left ==> DL-"
|
|
|
|
|
gd.Drift=" DL"
|
|
|
|
|
self:T(self.lid..string.format("Got Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE>0.13 and lineupError<-0.14 then
|
|
|
|
|
env.info" Little Drift Right across centre ==> (DR-)"
|
|
|
|
|
gd.Drift=" (DR)"
|
|
|
|
|
self:T(self.lid..string.format("Got Little Drift Right across centre at step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE<-0.13 and lineupError>0.14 then
|
|
|
|
|
env.info" Little Drift Left across centre ==> (DL-)"
|
|
|
|
|
gd.Drift=" (DL)"
|
|
|
|
|
self:E(self.lid..string.format("Got Little Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
end
|
|
|
|
|
-- Drift on lineup.
|
|
|
|
|
if rho>=RAR and rho<=RIM then
|
|
|
|
|
if gd.LUE>0.22 and lineupError<-0.22 then
|
|
|
|
|
env.info" Drift Right across centre ==> DR-"
|
|
|
|
|
gd.Drift=" DR"
|
|
|
|
|
self:T(self.lid..string.format("Got Drift Right across centre step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE<-0.22 and lineupError>0.22 then
|
|
|
|
|
env.info" Drift Left ==> DL-"
|
|
|
|
|
gd.Drift=" DL"
|
|
|
|
|
self:T(self.lid..string.format("Got Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE>0.13 and lineupError<-0.14 then
|
|
|
|
|
env.info" Little Drift Right across centre ==> (DR-)"
|
|
|
|
|
gd.Drift=" (DR)"
|
|
|
|
|
self:T(self.lid..string.format("Got Little Drift Right across centre at step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
elseif gd.LUE<-0.13 and lineupError>0.14 then
|
|
|
|
|
env.info" Little Drift Left across centre ==> (DL-)"
|
|
|
|
|
gd.Drift=" (DL)"
|
|
|
|
|
self:E(self.lid..string.format("Got Little Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Update max deviation of line up error.
|
|
|
|
|
@@ -10544,6 +10578,9 @@ function AIRBOSS:_GetSternCoord()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.STENNIS then
|
|
|
|
|
-- Stennis: translate 7 meters starboard wrt Final bearing.
|
|
|
|
|
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7, FB+90, true, true)
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then
|
|
|
|
|
-- Forrestal
|
|
|
|
|
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7.5, FB+90, true, true)
|
|
|
|
|
else
|
|
|
|
|
-- Nimitz SC: translate 8 meters starboard wrt Final bearing.
|
|
|
|
|
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(9.5, FB+90, true, true)
|
|
|
|
|
@@ -10579,7 +10616,7 @@ function AIRBOSS:_GetWire(Lcoord, dc)
|
|
|
|
|
|
|
|
|
|
-- Multiplayer wire correction.
|
|
|
|
|
if self.mpWireCorrection then
|
|
|
|
|
d=d-self.mpWireCorrection
|
|
|
|
|
d=d-self.mpWireCorrection
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Shift wires from stern to their correct position.
|
|
|
|
|
@@ -10672,7 +10709,7 @@ function AIRBOSS:_Trapped(playerData)
|
|
|
|
|
elseif playerData.actype==AIRBOSS.AircraftCarrier.A4EC then
|
|
|
|
|
-- A-4E gets slowed down much faster the the F/A-18C!
|
|
|
|
|
dcorr=56
|
|
|
|
|
elseif playerData.actype==AIRBOSS.AircraftCarrier.T45C then
|
|
|
|
|
elseif playerData.actype==AIRBOSS.AircraftCarrier.T45C then
|
|
|
|
|
-- T-45 also gets slowed down much faster the the F/A-18C.
|
|
|
|
|
dcorr=56
|
|
|
|
|
end
|
|
|
|
|
@@ -11303,7 +11340,7 @@ function AIRBOSS:_GetZoneHolding(case, stack)
|
|
|
|
|
-- So stay 0-5 NM (+1 NM error margin) port of carrier.
|
|
|
|
|
self.zoneHolding=self.zoneHolding or ZONE_POLYGON_BASE:New("CASE II/III Holding Zone")
|
|
|
|
|
|
|
|
|
|
self.zoneHolding:UpdateFromVec2(p)
|
|
|
|
|
self.zoneHolding:UpdateFromVec2(p)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return self.zoneHolding
|
|
|
|
|
@@ -11349,12 +11386,12 @@ function AIRBOSS:_GetZoneCommence(case, stack)
|
|
|
|
|
-- Create holding zone.
|
|
|
|
|
self.zoneCommence=self.zoneCommence or ZONE_RADIUS:New("CASE I Commence Zone")
|
|
|
|
|
|
|
|
|
|
self.zoneCommence:UpdateFromVec2(Three:GetVec2(), R)
|
|
|
|
|
self.zoneCommence:UpdateFromVec2(Three:GetVec2(), R)
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
-- Case II/III
|
|
|
|
|
|
|
|
|
|
stack=stack or 1
|
|
|
|
|
stack=stack or 1
|
|
|
|
|
|
|
|
|
|
-- Start point at 21 NM for stack=1.
|
|
|
|
|
local l=20+stack
|
|
|
|
|
@@ -11382,7 +11419,7 @@ function AIRBOSS:_GetZoneCommence(case, stack)
|
|
|
|
|
-- Zone polygon.
|
|
|
|
|
self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone")
|
|
|
|
|
|
|
|
|
|
self.zoneCommence:UpdateFromVec2(p)
|
|
|
|
|
self.zoneCommence:UpdateFromVec2(p)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -11642,7 +11679,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
|
|
|
|
|
if self.carriertype==AIRBOSS.CarrierType.TARAWA then
|
|
|
|
|
|
|
|
|
|
-- Landing 100 ft abeam, 120 ft alt.
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
|
|
|
|
|
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90)
|
|
|
|
|
|
|
|
|
|
-- Alitude 120 ft.
|
|
|
|
|
@@ -11650,7 +11687,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.AMERICA then
|
|
|
|
|
|
|
|
|
|
-- Landing 100 ft abeam, 120 ft alt. To allow adjustments to match different deck configurations.
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
|
|
|
|
|
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90)
|
|
|
|
|
|
|
|
|
|
-- Alitude 120 ft.
|
|
|
|
|
@@ -11659,7 +11696,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
|
|
|
|
|
elseif self.carriertype==AIRBOSS.CarrierType.JCARLOS then
|
|
|
|
|
|
|
|
|
|
-- Landing 100 ft abeam, 120 ft alt.
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-100, true, true)
|
|
|
|
|
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-100, true, true)
|
|
|
|
|
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-100)
|
|
|
|
|
|
|
|
|
|
-- Alitude 120 ft.
|
|
|
|
|
@@ -12295,17 +12332,17 @@ function AIRBOSS:_LSOgrade(playerData)
|
|
|
|
|
G="Unicorn"
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
-- Add AV-8B Harrier devation allowances due to lower groundspeed and 3x conventional groove time, this allows to maintain LSO tolerances while respecting the deviations are not unsafe. (WIP requires feedback)
|
|
|
|
|
-- Add AV-8B Harrier devation allowances due to lower groundspeed and 3x conventional groove time, this allows to maintain LSO tolerances while respecting the deviations are not unsafe. (WIP requires feedback)
|
|
|
|
|
-- Large devaitions still result in a No Grade, A Unicorn still requires a clean pass with no deviation.
|
|
|
|
|
if nL>3 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
if nL>3 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
-- Larger deviations ==> "No grade" 2.0 points.
|
|
|
|
|
grade="--"
|
|
|
|
|
points=2.0
|
|
|
|
|
elseif nN>2 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
elseif nN>2 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
|
|
|
|
|
-- Only average deviations ==> "Fair Pass" Pass with average deviations and corrections.
|
|
|
|
|
grade="(OK)"
|
|
|
|
|
points=3.0
|
|
|
|
|
elseif nL>0 then
|
|
|
|
|
elseif nL>0 then
|
|
|
|
|
-- Larger deviations ==> "No grade" 2.0 points.
|
|
|
|
|
grade="--"
|
|
|
|
|
points=2.0
|
|
|
|
|
@@ -12433,29 +12470,29 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|
|
|
|
--Angled Approach.
|
|
|
|
|
local P=nil
|
|
|
|
|
if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=4.0 and playerData.case<3 then
|
|
|
|
|
if LUE>self.lue.RIGHT then
|
|
|
|
|
P=underline("AA")
|
|
|
|
|
elseif
|
|
|
|
|
LUE>self.lue.RightMed then
|
|
|
|
|
P="AA "
|
|
|
|
|
elseif
|
|
|
|
|
LUE>self.lue.Right then
|
|
|
|
|
P=little("AA")
|
|
|
|
|
end
|
|
|
|
|
if LUE>self.lue.RIGHT then
|
|
|
|
|
P=underline("AA")
|
|
|
|
|
elseif
|
|
|
|
|
LUE>self.lue.RightMed then
|
|
|
|
|
P="AA "
|
|
|
|
|
elseif
|
|
|
|
|
LUE>self.lue.Right then
|
|
|
|
|
P=little("AA")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--Overshoot Start.
|
|
|
|
|
local O=nil
|
|
|
|
|
if step==AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
if LUE<self.lue.LEFT then
|
|
|
|
|
O=underline("OS")
|
|
|
|
|
elseif
|
|
|
|
|
LUE<self.lue.Left then
|
|
|
|
|
O="OS"
|
|
|
|
|
elseif
|
|
|
|
|
LUE<self.lue._min then
|
|
|
|
|
O=little("OS")
|
|
|
|
|
end
|
|
|
|
|
if LUE<self.lue.LEFT then
|
|
|
|
|
O=underline("OS")
|
|
|
|
|
elseif
|
|
|
|
|
LUE<self.lue.Left then
|
|
|
|
|
O="OS"
|
|
|
|
|
elseif
|
|
|
|
|
LUE<self.lue._min then
|
|
|
|
|
O=little("OS")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Speed via AoA. Depends on aircraft type.
|
|
|
|
|
@@ -12499,21 +12536,21 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|
|
|
|
elseif LUE>self.lue._max then
|
|
|
|
|
D=little("LUL")
|
|
|
|
|
elseif playerData.case<3 then
|
|
|
|
|
if LUE<self.lue.LEFT and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D=underline("LUR")
|
|
|
|
|
elseif LUE<self.lue.Left and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D="LUR"
|
|
|
|
|
elseif LUE<self.lue._min and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D=little("LUR")
|
|
|
|
|
end
|
|
|
|
|
if LUE<self.lue.LEFT and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D=underline("LUR")
|
|
|
|
|
elseif LUE<self.lue.Left and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D="LUR"
|
|
|
|
|
elseif LUE<self.lue._min and step~=AIRBOSS.PatternStep.GROOVE_XX then
|
|
|
|
|
D=little("LUR")
|
|
|
|
|
end
|
|
|
|
|
elseif playerData.case==3 then
|
|
|
|
|
if LUE<self.lue.LEFT then
|
|
|
|
|
D=underline("LUR")
|
|
|
|
|
elseif LUE<self.lue.Left then
|
|
|
|
|
D="LUR"
|
|
|
|
|
elseif LUE<self.lue._min then
|
|
|
|
|
D=little("LUR")
|
|
|
|
|
end
|
|
|
|
|
if LUE<self.lue.LEFT then
|
|
|
|
|
D=underline("LUR")
|
|
|
|
|
elseif LUE<self.lue.Left then
|
|
|
|
|
D="LUR"
|
|
|
|
|
elseif LUE<self.lue._min then
|
|
|
|
|
D=little("LUR")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Compile.
|
|
|
|
|
@@ -12546,7 +12583,7 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
|
|
|
|
|
--Drift in Lineup
|
|
|
|
|
if fdata.Drift then
|
|
|
|
|
G=G..fdata.Drift
|
|
|
|
|
n=n -- Drift doesn't affect score, advisory only.
|
|
|
|
|
n=n -- Drift doesn't affect score, advisory only.
|
|
|
|
|
end
|
|
|
|
|
-- Overshoot.
|
|
|
|
|
if O then
|
|
|
|
|
@@ -14818,8 +14855,8 @@ end
|
|
|
|
|
-- @param #table param Parameters.
|
|
|
|
|
-- @param #number time Time.
|
|
|
|
|
function AIRBOSS._CheckRadioQueueT(param, time)
|
|
|
|
|
AIRBOSS._CheckRadioQueue(param.airboss, param.radioqueue, param.name)
|
|
|
|
|
return time+0.05
|
|
|
|
|
AIRBOSS._CheckRadioQueue(param.airboss, param.radioqueue, param.name)
|
|
|
|
|
return time+0.05
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Radio queue item.
|
|
|
|
|
@@ -14843,15 +14880,15 @@ function AIRBOSS:_CheckRadioQueue(radioqueue, name)
|
|
|
|
|
-- Check if queue is empty.
|
|
|
|
|
if #radioqueue==0 then
|
|
|
|
|
|
|
|
|
|
if name=="LSO" then
|
|
|
|
|
self:T(self.lid..string.format("Stopping LSO radio queue."))
|
|
|
|
|
self.radiotimer:Stop(self.RQLid)
|
|
|
|
|
self.RQLid=nil
|
|
|
|
|
elseif name=="MARSHAL" then
|
|
|
|
|
self:T(self.lid..string.format("Stopping Marshal radio queue."))
|
|
|
|
|
self.radiotimer:Stop(self.RQMid)
|
|
|
|
|
self.RQMid=nil
|
|
|
|
|
end
|
|
|
|
|
if name=="LSO" then
|
|
|
|
|
self:T(self.lid..string.format("Stopping LSO radio queue."))
|
|
|
|
|
self.radiotimer:Stop(self.RQLid)
|
|
|
|
|
self.RQLid=nil
|
|
|
|
|
elseif name=="MARSHAL" then
|
|
|
|
|
self:T(self.lid..string.format("Stopping Marshal radio queue."))
|
|
|
|
|
self.radiotimer:Stop(self.RQMid)
|
|
|
|
|
self.RQMid=nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
@@ -14993,11 +15030,11 @@ function AIRBOSS:RadioTransmission(radio, call, loud, delay, interval, click, pi
|
|
|
|
|
|
|
|
|
|
caller="LSOCall"
|
|
|
|
|
|
|
|
|
|
-- Schedule radio queue checks.
|
|
|
|
|
if not self.RQLid then
|
|
|
|
|
-- Schedule radio queue checks.
|
|
|
|
|
if not self.RQLid then
|
|
|
|
|
self:T(self.lid..string.format("Starting LSO radio queue."))
|
|
|
|
|
self.RQLid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQLSO, "LSO"}, 0.02, 0.05)
|
|
|
|
|
end
|
|
|
|
|
self.RQLid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQLSO, "LSO"}, 0.02, 0.05)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
elseif radio.alias=="MARSHAL" then
|
|
|
|
|
|
|
|
|
|
@@ -15005,10 +15042,10 @@ function AIRBOSS:RadioTransmission(radio, call, loud, delay, interval, click, pi
|
|
|
|
|
|
|
|
|
|
caller="MarshalCall"
|
|
|
|
|
|
|
|
|
|
if not self.RQMid then
|
|
|
|
|
self:T(self.lid..string.format("Starting Marhal radio queue."))
|
|
|
|
|
self.RQMid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQMarshal, "MARSHAL"}, 0.02, 0.05)
|
|
|
|
|
end
|
|
|
|
|
if not self.RQMid then
|
|
|
|
|
self:T(self.lid..string.format("Starting Marhal radio queue."))
|
|
|
|
|
self.RQMid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQMarshal, "MARSHAL"}, 0.02, 0.05)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -16175,9 +16212,9 @@ function AIRBOSS:_SkipperStartRecovery(_unitName, case)
|
|
|
|
|
|
|
|
|
|
-- Inform player.
|
|
|
|
|
local text=string.format("affirm, Case %d recovery will start in 5 min for %d min. Wind on deck %d knots. U-turn=%s.", case, self.skipperTime, self.skipperSpeed, tostring(self.skipperUturn))
|
|
|
|
|
if case>1 then
|
|
|
|
|
text=text..string.format(" Marshal radial %d°.", self.skipperOffset)
|
|
|
|
|
end
|
|
|
|
|
if case>1 then
|
|
|
|
|
text=text..string.format(" Marshal radial %d°.", self.skipperOffset)
|
|
|
|
|
end
|
|
|
|
|
if self:IsRecovering() then
|
|
|
|
|
text="negative, carrier is already recovering."
|
|
|
|
|
self:MessageToPlayer(playerData, text, "AIRBOSS")
|
|
|
|
|
@@ -18028,12 +18065,12 @@ function AIRBOSS:_SaveTrapSheet(playerData, grade)
|
|
|
|
|
for i=1,9999 do
|
|
|
|
|
|
|
|
|
|
-- Create file name
|
|
|
|
|
if self.trapprefix then
|
|
|
|
|
filename=string.format("%s_%s-%04d.csv", self.trapprefix, playerData.actype, i)
|
|
|
|
|
else
|
|
|
|
|
local name=UTILS.ReplaceIllegalCharacters(playerData.name, "_")
|
|
|
|
|
filename=string.format("AIRBOSS-%s_Trapsheet-%s_%s-%04d.csv", self.alias, name, playerData.actype, i)
|
|
|
|
|
end
|
|
|
|
|
if self.trapprefix then
|
|
|
|
|
filename=string.format("%s_%s-%04d.csv", self.trapprefix, playerData.actype, i)
|
|
|
|
|
else
|
|
|
|
|
local name=UTILS.ReplaceIllegalCharacters(playerData.name, "_")
|
|
|
|
|
filename=string.format("AIRBOSS-%s_Trapsheet-%s_%s-%04d.csv", self.alias, name, playerData.actype, i)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Set path.
|
|
|
|
|
if path~=nil then
|
|
|
|
|
|