mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
AIRBOSS v0.5.9
This commit is contained in:
parent
7f1dcf93d9
commit
afb79391dd
@ -593,12 +593,14 @@ AIRBOSS.CarrierType={
|
|||||||
-- @type AIRBOSS.CarrierParameters
|
-- @type AIRBOSS.CarrierParameters
|
||||||
-- @field #number rwyangle Runway angle in degrees. for carriers with angled deck. For USS Stennis -9 degrees.
|
-- @field #number rwyangle Runway angle in degrees. for carriers with angled deck. For USS Stennis -9 degrees.
|
||||||
-- @field #number sterndist Distance in meters from carrier position to stern of carrier. For USS Stennis -150 meters.
|
-- @field #number sterndist Distance in meters from carrier position to stern of carrier. For USS Stennis -150 meters.
|
||||||
-- @field #number deckheight Height of deck in meters. For USS Stennis ~22 meters.
|
-- @field #number deckheight Height of deck in meters. For USS Stennis ~63 ft = 19 meters.
|
||||||
-- @field #number wire1 Distance in meters from carrier position to first wire.
|
-- @field #number wire1 Distance in meters from carrier position to first wire.
|
||||||
-- @field #number wire2 Distance in meters from carrier position to second wire.
|
-- @field #number wire2 Distance in meters from carrier position to second wire.
|
||||||
-- @field #number wire3 Distance in meters from carrier position to third wire.
|
-- @field #number wire3 Distance in meters from carrier position to third wire.
|
||||||
-- @field #number wire4 Distance in meters from carrier position to fourth wire.
|
-- @field #number wire4 Distance in meters from carrier position to fourth wire.
|
||||||
-- @field #number wireoffset Offset in meters for wire calculation.
|
-- @field #number wireoffset Offset distance from stern/rundown in meters.
|
||||||
|
-- @field #number rwylength Length of the landing runway in meters.
|
||||||
|
-- @field #number rwywidth Width of the landing runway in meters.
|
||||||
|
|
||||||
--- Aircraft specific Angle of Attack (AoA) (or alpha) parameters.
|
--- Aircraft specific Angle of Attack (AoA) (or alpha) parameters.
|
||||||
-- @type AIRBOSS.AircraftAoA
|
-- @type AIRBOSS.AircraftAoA
|
||||||
@ -1124,7 +1126,7 @@ AIRBOSS.MenuF10={}
|
|||||||
|
|
||||||
--- Airboss class version.
|
--- Airboss class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
AIRBOSS.version="0.5.8w"
|
AIRBOSS.version="0.5.9"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -1298,6 +1300,64 @@ function AIRBOSS:New(carriername, alias)
|
|||||||
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Carrier parameter tests.
|
||||||
|
if false then
|
||||||
|
-- Stern coordinate.
|
||||||
|
local FB=self:GetFinalBearing(false)
|
||||||
|
local hdg=self:GetHeading(false)
|
||||||
|
local stern=self:_GetSternCoord():SetAltitude(self.carrierparam.deckheight)
|
||||||
|
local rwy=stern:Translate(self.carrierparam.rwylength, FB):SetAltitude(self.carrierparam.deckheight)
|
||||||
|
--stern:SmokeGreen()
|
||||||
|
--bow:SmokeRed()
|
||||||
|
|
||||||
|
local function flareme()
|
||||||
|
|
||||||
|
-- Stern
|
||||||
|
stern:FlareGreen()
|
||||||
|
|
||||||
|
-- End of runway
|
||||||
|
--rwy:FlareRed()
|
||||||
|
|
||||||
|
-- Runway half width = 10 m
|
||||||
|
local r1=stern:Translate(10, FB+90)
|
||||||
|
r1:FlareWhite()
|
||||||
|
|
||||||
|
-- Carrier pos.
|
||||||
|
--self:GetCoordinate():FlareYellow()
|
||||||
|
|
||||||
|
|
||||||
|
-- Total lendth of carrier from stern to bow.
|
||||||
|
local bow=stern:Translate(310, hdg)
|
||||||
|
bow:FlareYellow()
|
||||||
|
|
||||||
|
-- Total width of carrier.
|
||||||
|
|
||||||
|
-- Right 30 meters from stern.
|
||||||
|
local cR=stern:Translate(30, hdg+90)
|
||||||
|
cR:FlareYellow()
|
||||||
|
|
||||||
|
-- Left 40 meters from stern.
|
||||||
|
local cL=stern:Translate(40, hdg-90)
|
||||||
|
cL:FlareYellow()
|
||||||
|
|
||||||
|
|
||||||
|
--[[
|
||||||
|
local w1=stern:Translate(46, FB)
|
||||||
|
local w2=stern:Translate(46+12, FB)
|
||||||
|
local w3=stern:Translate(46+24, FB)
|
||||||
|
local w4=stern:Translate(46+35, FB)
|
||||||
|
w1:FlareWhite()
|
||||||
|
w2:FlareYellow()
|
||||||
|
w3:FlareWhite()
|
||||||
|
w4:FlareYellow()
|
||||||
|
]]
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
SCHEDULER:New(nil, flareme, {}, 1, 1)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
-- If calls should be part of self and individual for different carriers.
|
-- If calls should be part of self and individual for different carriers.
|
||||||
--[[
|
--[[
|
||||||
-- Init default sound files.
|
-- Init default sound files.
|
||||||
@ -2432,22 +2492,17 @@ function AIRBOSS:_InitStennis()
|
|||||||
|
|
||||||
-- Carrier Parameters.
|
-- Carrier Parameters.
|
||||||
self.carrierparam.rwyangle = -9
|
self.carrierparam.rwyangle = -9
|
||||||
self.carrierparam.sterndist =-150
|
self.carrierparam.sterndist =-153
|
||||||
self.carrierparam.deckheight = 22
|
self.carrierparam.deckheight = 19
|
||||||
|
self.carrierparam.rwylength = 225
|
||||||
|
self.carrierparam.rwywidth = 20
|
||||||
|
|
||||||
--[[
|
-- Wires
|
||||||
self.carrierparam.wire1 =-104
|
self.carrierparam.wire1 = 46 -- Distance from stern to first wire.
|
||||||
self.carrierparam.wire2 = -92
|
self.carrierparam.wire2 = 46+12
|
||||||
self.carrierparam.wire3 = -80
|
self.carrierparam.wire3 = 46+24
|
||||||
self.carrierparam.wire4 = -68
|
self.carrierparam.wire4 = 46+35 -- Last wire is strangely one meter closer.
|
||||||
self.carrierparam.wireoffset = 30
|
self.carrierparam.wireoffset = 46
|
||||||
]]
|
|
||||||
|
|
||||||
self.carrierparam.wire1 = 0
|
|
||||||
self.carrierparam.wire2 = 12
|
|
||||||
self.carrierparam.wire3 = 24
|
|
||||||
self.carrierparam.wire4 = 36
|
|
||||||
self.carrierparam.wireoffset = 50
|
|
||||||
|
|
||||||
|
|
||||||
-- Platform at 5k. Reduce descent rate to 2000 ft/min to 1200 dirty up level flight.
|
-- Platform at 5k. Reduce descent rate to 2000 ft/min to 1200 dirty up level flight.
|
||||||
@ -4302,7 +4357,7 @@ function AIRBOSS:OnEventLand(EventData)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Get wire.
|
-- Get wire.
|
||||||
local wire=self:_GetWire(self:GetCoordinate(), coord)
|
local wire=self:_GetWire(coord)
|
||||||
|
|
||||||
-- No wire ==> Bolter, Bolter radio call.
|
-- No wire ==> Bolter, Bolter radio call.
|
||||||
if wire>4 then
|
if wire>4 then
|
||||||
@ -4331,7 +4386,7 @@ function AIRBOSS:OnEventLand(EventData)
|
|||||||
playerData.step=AIRBOSS.PatternStep.UNDEFINED
|
playerData.step=AIRBOSS.PatternStep.UNDEFINED
|
||||||
|
|
||||||
-- Call trapped function in 3 seconds to make sure we did not bolter.
|
-- Call trapped function in 3 seconds to make sure we did not bolter.
|
||||||
SCHEDULER:New(self, self._Trapped, {playerData}, 3)
|
SCHEDULER:New(self, self._Trapped, {playerData}, 1)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -4346,7 +4401,7 @@ function AIRBOSS:OnEventLand(EventData)
|
|||||||
local dist=coord:Get2DDistance(self:GetCoordinate())
|
local dist=coord:Get2DDistance(self:GetCoordinate())
|
||||||
|
|
||||||
-- Get wire
|
-- Get wire
|
||||||
local wire=self:_GetWire(self:GetCoordinate(), coord, 0)
|
local wire=self:_GetWire(coord, 0)
|
||||||
|
|
||||||
-- Aircraft type.
|
-- Aircraft type.
|
||||||
local _type=EventData.IniUnit:GetTypeName()
|
local _type=EventData.IniUnit:GetTypeName()
|
||||||
@ -5486,18 +5541,17 @@ function AIRBOSS:_GetSternCoord()
|
|||||||
local FB=self:GetFinalBearing()
|
local FB=self:GetFinalBearing()
|
||||||
|
|
||||||
-- Stern coordinate (sterndist<0). Also translate 10 meters starboard wrt Final bearing.
|
-- Stern coordinate (sterndist<0). Also translate 10 meters starboard wrt Final bearing.
|
||||||
local stern=self:GetCoordinate():Translate(self.carrierparam.sterndist, hdg):Translate(12, FB+90)
|
local stern=self:GetCoordinate():Translate(self.carrierparam.sterndist, hdg):Translate(7, FB+90)
|
||||||
|
|
||||||
return stern
|
return stern
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Get wire from landing position.
|
--- Get wire from landing position.
|
||||||
-- @param #AIRBOSS self
|
-- @param #AIRBOSS self
|
||||||
-- @param Core.Point#COORDINATE Ccoord Carrier position.
|
|
||||||
-- @param Core.Point#COORDINATE Lcoord Landing position.
|
-- @param Core.Point#COORDINATE Lcoord Landing position.
|
||||||
-- @param #number dc Distance correction.
|
-- @param #number dc Distance correction.
|
||||||
-- @return #number Trapped wire (1-4) or 99 if no wire was trapped.
|
-- @return #number Trapped wire (1-4) or 99 if no wire was trapped.
|
||||||
function AIRBOSS:_GetWire(Ccoord, Lcoord, dc)
|
function AIRBOSS:_GetWire(Lcoord, dc)
|
||||||
|
|
||||||
-- Heading of carrier (true).
|
-- Heading of carrier (true).
|
||||||
local hdg=self.carrier:GetHeading()
|
local hdg=self.carrier:GetHeading()
|
||||||
@ -5517,24 +5571,21 @@ function AIRBOSS:_GetWire(Ccoord, Lcoord, dc)
|
|||||||
-- Corrected landing distance wrt to stern. Landing distance needs to be reduced due to delayed landing event for human players.
|
-- Corrected landing distance wrt to stern. Landing distance needs to be reduced due to delayed landing event for human players.
|
||||||
local d=Ldist-dc
|
local d=Ldist-dc
|
||||||
|
|
||||||
-- Wire offset from stern pos.
|
|
||||||
local dx=self.carrierparam.wireoffset
|
|
||||||
|
|
||||||
-- Shift wires from stern to their correct position.
|
-- Shift wires from stern to their correct position.
|
||||||
local w1=self.carrierparam.wire1+dx
|
local w1=self.carrierparam.wire1
|
||||||
local w2=self.carrierparam.wire2+dx
|
local w2=self.carrierparam.wire2
|
||||||
local w3=self.carrierparam.wire3+dx
|
local w3=self.carrierparam.wire3
|
||||||
local w4=self.carrierparam.wire4+dx
|
local w4=self.carrierparam.wire4
|
||||||
|
|
||||||
-- Which wire was caught?
|
-- Which wire was caught?
|
||||||
local wire
|
local wire
|
||||||
if d<w1 then -- 0+dx
|
if d<w1 then -- 46
|
||||||
wire=1
|
wire=1
|
||||||
elseif d<w2 then -- 12+dx
|
elseif d<w2 then -- 46+12
|
||||||
wire=2
|
wire=2
|
||||||
elseif d<w3 then -- 24+dx
|
elseif d<w3 then -- 46+24
|
||||||
wire=3
|
wire=3
|
||||||
elseif d<w4 then -- 36+dx
|
elseif d<w4 then -- 46+35
|
||||||
wire=4
|
wire=4
|
||||||
else
|
else
|
||||||
wire=99
|
wire=99
|
||||||
@ -5569,18 +5620,10 @@ function AIRBOSS:_GetWire(Ccoord, Lcoord, dc)
|
|||||||
-- Smoke corrected landing pos red.
|
-- Smoke corrected landing pos red.
|
||||||
Dcoord:SmokeRed()
|
Dcoord:SmokeRed()
|
||||||
|
|
||||||
-- Smoke wires.
|
|
||||||
--[[
|
|
||||||
Scoord:SmokeGreen()
|
|
||||||
w1:SmokeBlue()
|
|
||||||
w2:SmokeOrange()
|
|
||||||
w3:SmokeRed()
|
|
||||||
w4:SmokeWhite()
|
|
||||||
]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Debug output.
|
-- Debug output.
|
||||||
self:I(string.format("GetWire: L=%.1f, L-dx-dc=%.1f ==> wire=%d (dx=%.1f)", Ldist, Ldist-dx-dc, wire, dx+dc))
|
self:I(string.format("GetWire: L=%.1f, L-dc=%.1f ==> wire=%d (dc=%.1f)", Ldist, Ldist-dc, wire, dc))
|
||||||
|
|
||||||
return wire
|
return wire
|
||||||
end
|
end
|
||||||
@ -5598,8 +5641,8 @@ function AIRBOSS:_Trapped(playerData)
|
|||||||
|
|
||||||
local coord=unit:GetCoordinate()
|
local coord=unit:GetCoordinate()
|
||||||
|
|
||||||
-- Get velocity in km/h
|
-- Get velocity in km/h. We need to substrackt the carrier velocity.
|
||||||
local v=unit:GetVelocityKMH()
|
local v=unit:GetVelocityKMH()-self.carrier:GetVelocityKMH()
|
||||||
|
|
||||||
-- Distance
|
-- Distance
|
||||||
local d=self:GetCoordinate():Get2DDistance(coord)
|
local d=self:GetCoordinate():Get2DDistance(coord)
|
||||||
@ -5608,7 +5651,7 @@ function AIRBOSS:_Trapped(playerData)
|
|||||||
local stern=self:_GetSternCoord()
|
local stern=self:_GetSternCoord()
|
||||||
|
|
||||||
-- Distance to stern pos.
|
-- Distance to stern pos.
|
||||||
local s=self:GetCoordinate():Get2DDistance(coord)
|
local s=stern:Get2DDistance(coord)
|
||||||
|
|
||||||
-- Debug.
|
-- Debug.
|
||||||
local text=string.format("Player %s _Trapped v=%.1f km/h, d=%.1f m, s=%.1f", playerData.name, v, d, s)
|
local text=string.format("Player %s _Trapped v=%.1f km/h, d=%.1f m, s=%.1f", playerData.name, v, d, s)
|
||||||
@ -5621,11 +5664,11 @@ function AIRBOSS:_Trapped(playerData)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Put some smoke and a mark
|
-- Put some smoke and a mark
|
||||||
if self.Debug then
|
--if self.Debug then
|
||||||
coord:SmokeBlue()
|
coord:SmokeBlue()
|
||||||
coord:MarkToAll(text)
|
coord:MarkToAll(text)
|
||||||
stern:MarkToAll("Stern")
|
stern:MarkToAll("Stern")
|
||||||
end
|
--end
|
||||||
|
|
||||||
-- Get wire.
|
-- Get wire.
|
||||||
local wire=playerData.wire
|
local wire=playerData.wire
|
||||||
@ -6011,15 +6054,27 @@ function AIRBOSS:_Glideslope(unit, optangle)
|
|||||||
-- Default is 0.
|
-- Default is 0.
|
||||||
optangle=optangle or 0
|
optangle=optangle or 0
|
||||||
|
|
||||||
-- Get distances between carrier and player unit (parallel and perpendicular to direction of movement of carrier)
|
|
||||||
local X, Z, rho, phi = self:_GetDistances(unit)
|
|
||||||
|
|
||||||
-- Glideslope. Wee need to correct for the height of the deck. The ideal glide slope is 3.5 degrees.
|
-- Glideslope. Wee need to correct for the height of the deck. The ideal glide slope is 3.5 degrees.
|
||||||
local h=unit:GetAltitude()-self.carrierparam.deckheight
|
local h=unit:GetAltitude()-self.carrierparam.deckheight
|
||||||
|
|
||||||
|
--[[
|
||||||
|
-- Get distances between carrier and player unit (parallel and perpendicular to direction of movement of carrier)
|
||||||
|
local X, Z, rho, phi = self:_GetDistances(unit)
|
||||||
-- Distance correction.
|
-- Distance correction.
|
||||||
local offx=self.carrierparam.wire3 or self.carrierparam.sterndist
|
local offx=self.carrierparam.wire3 or self.carrierparam.sterndist
|
||||||
local x=math.abs(self.carrierparam.wire3-X)
|
local x=math.abs(self.carrierparam.wire3-X)
|
||||||
|
]]
|
||||||
|
|
||||||
|
-- Stern coordinate.
|
||||||
|
local stern=self:_GetSternCoord()
|
||||||
|
|
||||||
|
-- Ideally we want to land at the 3-wire (or slightly before).
|
||||||
|
if self.carrierparam.wire3 then
|
||||||
|
stern:Translate(self.carrierparam.wire3, self:GetFinalBearing(false))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Distance from stern to aircraft.
|
||||||
|
local x=unit:GetCoordinate():Get2DDistance(stern)
|
||||||
|
|
||||||
-- Glide slope.
|
-- Glide slope.
|
||||||
local glideslope=math.atan(h/x)
|
local glideslope=math.atan(h/x)
|
||||||
@ -6047,6 +6102,18 @@ function AIRBOSS:_Lineup(unit, runway)
|
|||||||
-- Vector from plane to ref point on boad.
|
-- Vector from plane to ref point on boad.
|
||||||
local c={x=b.x-a.x, y=0, z=b.z-a.z}
|
local c={x=b.x-a.x, y=0, z=b.z-a.z}
|
||||||
|
|
||||||
|
--[[
|
||||||
|
-- Stern coordinate.
|
||||||
|
local stern=self:_GetSternCoord()
|
||||||
|
|
||||||
|
-- Position of aircraft.
|
||||||
|
local coord=unit:GetCoordinate()
|
||||||
|
|
||||||
|
-- Vector from stern to aircraft.
|
||||||
|
local c={x=stern.x-coord.x, y=0, z=stern.z-coord.z}
|
||||||
|
|
||||||
|
]]
|
||||||
|
|
||||||
-- Current line up and error wrt to final heading of the runway.
|
-- Current line up and error wrt to final heading of the runway.
|
||||||
local lineup=math.deg(math.atan2(c.z, c.x))
|
local lineup=math.deg(math.atan2(c.z, c.x))
|
||||||
|
|
||||||
@ -6055,6 +6122,8 @@ function AIRBOSS:_Lineup(unit, runway)
|
|||||||
lineup=lineup-self.carrierparam.rwyangle
|
lineup=lineup-self.carrierparam.rwyangle
|
||||||
end
|
end
|
||||||
|
|
||||||
|
env.info("FF lineup = "..lineup)
|
||||||
|
|
||||||
return lineup, UTILS.VecNorm(c)
|
return lineup, UTILS.VecNorm(c)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -6672,7 +6741,7 @@ function AIRBOSS:_TooFarOutText(X, Z, posData)
|
|||||||
xtext="close to "
|
xtext="close to "
|
||||||
end
|
end
|
||||||
elseif posData.Xmax and X>posData.Xmax then
|
elseif posData.Xmax and X>posData.Xmax then
|
||||||
if posData.LimitXmax>=0 then
|
if posData.Xmax>=0 then
|
||||||
xtext="far ahead of "
|
xtext="far ahead of "
|
||||||
else
|
else
|
||||||
xtext="close to "
|
xtext="close to "
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user