Merge branch 'master' into develop

This commit is contained in:
Frank 2021-02-28 23:26:48 +01:00
commit 663a59bd71

View File

@ -1706,7 +1706,7 @@ AIRBOSS.MenuF10Root=nil
--- Airboss class version. --- Airboss class version.
-- @field #string version -- @field #string version
AIRBOSS.version="1.1.5" AIRBOSS.version="1.1.6"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO list -- TODO list
@ -1940,7 +1940,7 @@ function AIRBOSS:New(carriername, alias)
-- Welcome players. -- Welcome players.
self:SetWelcomePlayers(true) self:SetWelcomePlayers(true)
-- Coordinates -- Coordinates
self.landingcoord=COORDINATE:New(0,0,0) --Core.Point#COORDINATE self.landingcoord=COORDINATE:New(0,0,0) --Core.Point#COORDINATE
self.sterncoord=COORDINATE:New(0, 0, 0) --Core.Point#COORDINATE self.sterncoord=COORDINATE:New(0, 0, 0) --Core.Point#COORDINATE
@ -1952,11 +1952,11 @@ function AIRBOSS:New(carriername, alias)
elseif self.carriertype==AIRBOSS.CarrierType.ROOSEVELT then elseif self.carriertype==AIRBOSS.CarrierType.ROOSEVELT then
self:_InitNimitz() self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.LINCOLN then elseif self.carriertype==AIRBOSS.CarrierType.LINCOLN then
self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.WASHINGTON then
self:_InitNimitz() self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then elseif self.carriertype==AIRBOSS.CarrierType.WASHINGTON then
self:_InitNimitz() self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then
self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.VINSON then elseif self.carriertype==AIRBOSS.CarrierType.VINSON then
-- TODO: Carl Vinson parameters. -- TODO: Carl Vinson parameters.
self:_InitStennis() self:_InitStennis()
@ -1994,7 +1994,7 @@ function AIRBOSS:New(carriername, alias)
self:_GetZoneGroove():SmokeZone(SMOKECOLOR.Red, 5) self:_GetZoneGroove():SmokeZone(SMOKECOLOR.Red, 5)
self:_GetZoneLineup():SmokeZone(SMOKECOLOR.Green, 5) self:_GetZoneLineup():SmokeZone(SMOKECOLOR.Green, 5)
self:_GetZoneBullseye(case):SmokeZone(SMOKECOLOR.White, 45) self:_GetZoneBullseye(case):SmokeZone(SMOKECOLOR.White, 45)
self:_GetZoneDirtyUp(case):SmokeZone(SMOKECOLOR.Orange, 45) self:_GetZoneDirtyUp(case):SmokeZone(SMOKECOLOR.Orange, 45)
self:_GetZoneArcIn(case):SmokeZone(SMOKECOLOR.Blue, 45) self:_GetZoneArcIn(case):SmokeZone(SMOKECOLOR.Blue, 45)
self:_GetZoneArcOut(case):SmokeZone(SMOKECOLOR.Blue, 45) self:_GetZoneArcOut(case):SmokeZone(SMOKECOLOR.Blue, 45)
self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Blue, 45) self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Blue, 45)
@ -2034,7 +2034,7 @@ function AIRBOSS:New(carriername, alias)
-- Bow -- Bow
bow:FlareYellow() bow:FlareYellow()
-- Runway half width = 10 m. -- Runway half width = 10 m.
local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90) local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90)
local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90) local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90)
@ -3285,7 +3285,7 @@ function AIRBOSS:GetNextRecoveryTime(InSeconds)
if InSeconds then if InSeconds then
return self.recoverywindow.START, self.recoverywindow.STOP return self.recoverywindow.START, self.recoverywindow.STOP
else else
return UTILS.SecondsToClock(self.recoverywindow.START), UTILS.SecondsToClock(self.recoverywindow.STOP) return UTILS.SecondsToClock(self.recoverywindow.START), UTILS.SecondsToClock(self.recoverywindow.STOP)
end end
else else
if InSeconds then if InSeconds then
@ -3399,7 +3399,7 @@ function AIRBOSS:onafterStart(From, Event, To)
--self.StatusScheduler=SCHEDULER:New(self) --self.StatusScheduler=SCHEDULER:New(self)
--self.StatusScheduler:Schedule(self, self._Status, {}, 1, 0.5) --self.StatusScheduler:Schedule(self, self._Status, {}, 1, 0.5)
self.StatusTimer=TIMER:New(self._Status, self):Start(2, 0.5) self.StatusTimer=TIMER:New(self._Status, self):Start(2, 0.5)
-- Start status check in 1 second. -- Start status check in 1 second.
@ -3485,9 +3485,9 @@ function AIRBOSS:onafterStatus(From, Event, To)
-- Disable turn into the wind for this window so that we do not do this all over again. -- Disable turn into the wind for this window so that we do not do this all over again.
self.recoverywindow.WIND=false self.recoverywindow.WIND=false
end end
end end
end end
@ -3583,9 +3583,9 @@ function AIRBOSS:_CheckAIStatus()
-- Get lineup and distance to carrier. -- Get lineup and distance to carrier.
local lineup=self:_Lineup(unit, true) local lineup=self:_Lineup(unit, true)
local unitcoord=unit:GetCoord() local unitcoord=unit:GetCoord()
local dist=unitcoord:Get2DDistance(self:GetCoord()) local dist=unitcoord:Get2DDistance(self:GetCoord())
-- Distance in NM. -- Distance in NM.
@ -4146,7 +4146,7 @@ end
-- @param #string To To state. -- @param #string To To state.
function AIRBOSS:onafterStop(From, Event, To) function AIRBOSS:onafterStop(From, Event, To)
self:I(self.lid..string.format("Stopping airboss script.")) self:I(self.lid..string.format("Stopping airboss script."))
-- Unhandle events. -- Unhandle events.
self:UnHandleEvent(EVENTS.Birth) self:UnHandleEvent(EVENTS.Birth)
self:UnHandleEvent(EVENTS.Land) self:UnHandleEvent(EVENTS.Land)
@ -4170,7 +4170,7 @@ function AIRBOSS:_InitStennis()
-- Carrier Parameters. -- Carrier Parameters.
self.carrierparam.sterndist =-153 self.carrierparam.sterndist =-153
self.carrierparam.deckheight = 19 self.carrierparam.deckheight = 19.06
-- Total size of the carrier (approx as rectangle). -- Total size of the carrier (approx as rectangle).
self.carrierparam.totlength=310 -- Wiki says 332.8 meters overall length. self.carrierparam.totlength=310 -- Wiki says 332.8 meters overall length.
@ -4178,7 +4178,7 @@ function AIRBOSS:_InitStennis()
self.carrierparam.totwidthstarboard=30 self.carrierparam.totwidthstarboard=30
-- Landing runway. -- Landing runway.
self.carrierparam.rwyangle = -9 self.carrierparam.rwyangle = -9.1359
self.carrierparam.rwylength = 225 self.carrierparam.rwylength = 225
self.carrierparam.rwywidth = 20 self.carrierparam.rwywidth = 20
@ -4321,7 +4321,7 @@ function AIRBOSS:_InitNimitz()
-- Carrier Parameters. -- Carrier Parameters.
self.carrierparam.sterndist =-164 self.carrierparam.sterndist =-164
self.carrierparam.deckheight = 20 self.carrierparam.deckheight = 20.1494 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\Database\USS_CVN_7X.lua
-- Total size of the carrier (approx as rectangle). -- Total size of the carrier (approx as rectangle).
self.carrierparam.totlength=332.8 -- Wiki says 332.8 meters overall length. self.carrierparam.totlength=332.8 -- Wiki says 332.8 meters overall length.
@ -4329,7 +4329,7 @@ function AIRBOSS:_InitNimitz()
self.carrierparam.totwidthstarboard=35 self.carrierparam.totwidthstarboard=35
-- Landing runway. -- Landing runway.
self.carrierparam.rwyangle = -9 self.carrierparam.rwyangle = -9.1359 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\scripts\USS_Nimitz_RunwaysAndRoutes.lua
self.carrierparam.rwylength = 250 self.carrierparam.rwylength = 250
self.carrierparam.rwywidth = 25 self.carrierparam.rwywidth = 25
@ -5742,7 +5742,7 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
else else
dist=UTILS.NMToMeters(1.2) dist=UTILS.NMToMeters(1.2)
end end
if goshawk then if goshawk then
-- 0.9 to 1.1 NM per natops ch.4 page 48 -- 0.9 to 1.1 NM per natops ch.4 page 48
dist=UTILS.NMToMeters(0.9) dist=UTILS.NMToMeters(0.9)
@ -6112,7 +6112,7 @@ function AIRBOSS:_ScanCarrierZone()
-- Get flight group. -- Get flight group.
local flight=_DATABASE:GetFlightGroup(groupname) local flight=_DATABASE:GetFlightGroup(groupname)
if flight and flight:IsInbound() and flight.destbase:GetName()==self.carrier:GetName() then if flight and flight:IsInbound() and flight.destbase:GetName()==self.carrier:GetName() then
if flight.ishelo then if flight.ishelo then
else else
@ -6149,7 +6149,7 @@ function AIRBOSS:_ScanCarrierZone()
-- Break the loop to not have all flights at once! Spams the message screen. -- Break the loop to not have all flights at once! Spams the message screen.
break break
end -- Closed in or tanker/AWACS end -- Closed in or tanker/AWACS
end end
@ -6255,7 +6255,7 @@ function AIRBOSS:_MarshalPlayer(playerData, stack)
-- Set stack flag. -- Set stack flag.
flight.flag=stack flight.flag=stack
-- Trigger Marshal event. -- Trigger Marshal event.
self:Marshal(flight) self:Marshal(flight)
end end
@ -6514,7 +6514,7 @@ function AIRBOSS:_MarshalAI(flight, nstack, respawn)
-- Route group. -- Route group.
flight.group:Route(wp, 1) flight.group:Route(wp, 1)
-- Trigger Marshal event. -- Trigger Marshal event.
self:Marshal(flight) self:Marshal(flight)
@ -7050,7 +7050,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
-- Recovery case. -- Recovery case.
case=case or self.case case=case or self.case
if case==1 then if case==1 then
return self:_GetFreeStack_Old(ai, case, empty) return self:_GetFreeStack_Old(ai, case, empty)
end end
@ -7066,7 +7066,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
for i=1,nmaxstacks do for i=1,nmaxstacks do
stack[i]=self.NmaxStack -- Number of human flights per stack. stack[i]=self.NmaxStack -- Number of human flights per stack.
end end
local nmax=1 local nmax=1
-- Loop over all flights in marshal stack. -- Loop over all flights in marshal stack.
@ -7078,7 +7078,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
-- Get stack of flight. -- Get stack of flight.
local n=flight.flag local n=flight.flag
if n>nmax then if n>nmax then
nmax=n nmax=n
end end
@ -7095,7 +7095,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
end end
end end
local nfree=nil local nfree=nil
if stack[nmax]==0 then if stack[nmax]==0 then
-- Max occupied stack is completely full! -- Max occupied stack is completely full!
@ -7111,7 +7111,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
-- Case II/III return next stack -- Case II/III return next stack
nfree=nmax+1 nfree=nmax+1
end end
elseif stack[nmax]==self.NmaxStack then elseif stack[nmax]==self.NmaxStack then
-- Max occupied stack is completely empty! This should happen only when there is no other flight in the marshal queue. -- Max occupied stack is completely empty! This should happen only when there is no other flight in the marshal queue.
self:E(self.lid..string.format("ERROR: Max occupied stack is empty. Should not happen! Nmax=%d, stack[nmax]=%d", nmax, stack[nmax])) self:E(self.lid..string.format("ERROR: Max occupied stack is empty. Should not happen! Nmax=%d, stack[nmax]=%d", nmax, stack[nmax]))
@ -7123,7 +7123,7 @@ function AIRBOSS:_GetFreeStack(ai, case, empty)
else else
nfree=nmax nfree=nmax
end end
end end
self:I(self.lid..string.format("Returning free stack %s", tostring(nfree))) self:I(self.lid..string.format("Returning free stack %s", tostring(nfree)))
@ -10396,7 +10396,7 @@ function AIRBOSS:_GetSternCoord()
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7, FB+90, true, true) self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7, FB+90, true, true)
else else
-- Nimitz SC: translate 8 meters starboard wrt Final bearing. -- Nimitz SC: translate 8 meters starboard wrt Final bearing.
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(8.5, FB+90, true, true) self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(9.5, FB+90, true, true)
end end
-- Set altitude. -- Set altitude.
@ -10646,7 +10646,7 @@ function AIRBOSS:_GetZoneInitial(case)
-- Polygon zone. -- Polygon zone.
--local zone=ZONE_POLYGON_BASE:New("Zone CASE I/II Initial", vec2) --local zone=ZONE_POLYGON_BASE:New("Zone CASE I/II Initial", vec2)
self.zoneInitial:UpdateFromVec2(vec2) self.zoneInitial:UpdateFromVec2(vec2)
--return zone --return zone
@ -10675,13 +10675,13 @@ function AIRBOSS:_GetZoneLineup()
-- Vec2 array. -- Vec2 array.
local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2()} local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2()}
self.zoneLineup:UpdateFromVec2(vec2) self.zoneLineup:UpdateFromVec2(vec2)
-- Polygon zone. -- Polygon zone.
--local zone=ZONE_POLYGON_BASE:New("Zone Lineup", vec2) --local zone=ZONE_POLYGON_BASE:New("Zone Lineup", vec2)
--return zone --return zone
return self.zoneLineup return self.zoneLineup
end end
@ -10716,13 +10716,13 @@ function AIRBOSS:_GetZoneGroove(l, w, b)
-- Vec2 array. -- Vec2 array.
local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2(), c6:GetVec2()} local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2(), c6:GetVec2()}
self.zoneGroove:UpdateFromVec2(vec2) self.zoneGroove:UpdateFromVec2(vec2)
-- Polygon zone. -- Polygon zone.
--local zone=ZONE_POLYGON_BASE:New("Zone Groove", vec2) --local zone=ZONE_POLYGON_BASE:New("Zone Groove", vec2)
--return zone --return zone
return self.zoneGroove return self.zoneGroove
end end
@ -10748,7 +10748,7 @@ function AIRBOSS:_GetZoneBullseye(case)
-- Create zone. -- Create zone.
local zone=ZONE_RADIUS:New("Zone Bullseye", vec2, radius) local zone=ZONE_RADIUS:New("Zone Bullseye", vec2, radius)
return zone return zone
--self.zoneBullseye=self.zoneBullseye or ZONE_RADIUS:New("Zone Bullseye", vec2, radius) --self.zoneBullseye=self.zoneBullseye or ZONE_RADIUS:New("Zone Bullseye", vec2, radius)
end end
@ -10977,9 +10977,9 @@ function AIRBOSS:_GetZoneCarrierBox()
-- Create polygon zone. -- Create polygon zone.
--local zone=ZONE_POLYGON_BASE:New("Carrier Box Zone", vec2) --local zone=ZONE_POLYGON_BASE:New("Carrier Box Zone", vec2)
--return zone --return zone
self.zoneCarrierbox:UpdateFromVec2(vec2) self.zoneCarrierbox:UpdateFromVec2(vec2)
return self.zoneCarrierbox return self.zoneCarrierbox
end end
@ -11014,9 +11014,9 @@ function AIRBOSS:_GetZoneRunwayBox()
-- Create polygon zone. -- Create polygon zone.
--local zone=ZONE_POLYGON_BASE:New("Landing Runway Zone", vec2) --local zone=ZONE_POLYGON_BASE:New("Landing Runway Zone", vec2)
--return zone --return zone
self.zoneRunwaybox:UpdateFromVec2(vec2) self.zoneRunwaybox:UpdateFromVec2(vec2)
return self.zoneRunwaybox return self.zoneRunwaybox
end end
@ -11147,7 +11147,7 @@ function AIRBOSS:_GetZoneHolding(case, stack)
-- Square zone length=7NM width=6 NM behind the carrier starting at angels+15 NM behind the carrier. -- Square zone length=7NM width=6 NM behind the carrier starting at angels+15 NM behind the carrier.
-- So stay 0-5 NM (+1 NM error margin) port of carrier. -- 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=self.zoneHolding or ZONE_POLYGON_BASE:New("CASE II/III Holding Zone")
self.zoneHolding:UpdateFromVec2(p) self.zoneHolding:UpdateFromVec2(p)
end end
@ -11193,12 +11193,12 @@ function AIRBOSS:_GetZoneCommence(case, stack)
-- Create holding zone. -- Create holding zone.
self.zoneCommence=self.zoneCommence or ZONE_RADIUS:New("CASE I Commence 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 else
-- Case II/III -- Case II/III
stack=stack or 1 stack=stack or 1
-- Start point at 21 NM for stack=1. -- Start point at 21 NM for stack=1.
@ -11226,7 +11226,7 @@ function AIRBOSS:_GetZoneCommence(case, stack)
-- Zone polygon. -- Zone polygon.
self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone") self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone")
self.zoneCommence:UpdateFromVec2(p) self.zoneCommence:UpdateFromVec2(p)
end end
@ -11474,7 +11474,7 @@ end
-- @param #AIRBOSS self -- @param #AIRBOSS self
-- @return Core.Point#COORDINATE Optimal landing coordinate. -- @return Core.Point#COORDINATE Optimal landing coordinate.
function AIRBOSS:_GetOptLandingCoordinate() function AIRBOSS:_GetOptLandingCoordinate()
-- Start with stern coordiante. -- Start with stern coordiante.
self.landingcoord:UpdateFromCoordinate(self:_GetSternCoord()) self.landingcoord:UpdateFromCoordinate(self:_GetSternCoord())