This commit is contained in:
Frank
2020-01-22 16:40:34 +01:00
parent 1c1f74e1ad
commit fe7df16ac0
2 changed files with 114 additions and 25 deletions
+76 -18
View File
@@ -28,9 +28,12 @@
-- @field #table flights All flights table. -- @field #table flights All flights table.
-- @field #table Qwaiting Queue of aircraft waiting for landing permission. -- @field #table Qwaiting Queue of aircraft waiting for landing permission.
-- @field #table Qlanding Queue of aircraft currently on final approach. -- @field #table Qlanding Queue of aircraft currently on final approach.
-- @field #table Qtaxiinb Queue of aircraft taxiing to parking after landing.
-- @field #table Qarrived Queue of aircraft that have arrived at their parking spot after landing
-- @field #table Qparking Queue of aircraft parking and waiting for taxi & takeoff clearance.
-- @field #table Qtaxiout Queue of aircraft taxiing from parking to runway for takeoff.
-- @field #table Qreadyto Queue of aircraft ready for takeoff. Only human players.
-- @field #table Qtakeoff Queue of aircraft about to takeoff. -- @field #table Qtakeoff Queue of aircraft about to takeoff.
-- @field #table QtaxiInb Queue of aircraft taxiing to parking after landing.
-- @field #table Qparking Queue of aircraft parking.
-- @field Ops.ATIS#ATIS atis ATIS object. -- @field Ops.ATIS#ATIS atis ATIS object.
-- @field #number activerwyno Number of active runway. -- @field #number activerwyno Number of active runway.
-- @field #number atcfreq ATC radio frequency. -- @field #number atcfreq ATC radio frequency.
@@ -68,9 +71,12 @@ FLIGHTCONTROL = {
flights = {}, flights = {},
Qwaiting = {}, Qwaiting = {},
Qlanding = {}, Qlanding = {},
Qtakeoff = {}, Qtaxiinb = {},
Qarrived = {},
Qparking = {}, Qparking = {},
QtaxiInb = {}, Qtaxiout = {},
Qreadyto = {},
Qtakeoff = {},
atis = nil, atis = nil,
activerwyno = 1, activerwyno = 1,
atcfreq = nil, atcfreq = nil,
@@ -109,7 +115,7 @@ FLIGHTCONTROL = {
--- FlightControl class version. --- FlightControl class version.
-- @field #string version -- @field #string version
FLIGHTCONTROL.version="0.1.3" FLIGHTCONTROL.version="0.1.4"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO list -- TODO list
@@ -117,7 +123,7 @@ FLIGHTCONTROL.version="0.1.3"
-- TODO: Add FARPS? -- TODO: Add FARPS?
-- TODO: Add helos. -- TODO: Add helos.
-- TODO: Take me down option. -- TODO: Talk me down option.
-- TODO: ATIS option. -- TODO: ATIS option.
-- TODO: ATC voice overs. -- TODO: ATC voice overs.
-- TODO: Check runways and clean up. -- TODO: Check runways and clean up.
@@ -451,9 +457,13 @@ function FLIGHTCONTROL:_CheckQueues()
if false then if false then
self:_PrintQueue(self.flights, "All flights") self:_PrintQueue(self.flights, "All flights")
self:_PrintQueue(self.Qparking, "Parking") self:_PrintQueue(self.Qparking, "Parking")
self:_PrintQueue(self.Qtaxiout, "TaxiOut")
self:_PrintQueue(self.Qreadyto, "ReadyTO")
self:_PrintQueue(self.Qtakeoff, "Takeoff") self:_PrintQueue(self.Qtakeoff, "Takeoff")
self:_PrintQueue(self.Qwaiting, "Holding") self:_PrintQueue(self.Qwaiting, "Holding")
self:_PrintQueue(self.Qlanding, "Landing") self:_PrintQueue(self.Qlanding, "Landing")
self:_PrintQueue(self.Qtaxiinb, "TaxiInb")
self:_PrintQueue(self.Qarrived, "Arrived")
end end
-- Number of holding groups. -- Number of holding groups.
@@ -513,7 +523,9 @@ function FLIGHTCONTROL:_CheckQueues()
-------------------- --------------------
-- Check if flight is AI. Humans have to request taxi via F10 menu. -- Check if flight is AI. Humans have to request taxi via F10 menu.
if flight.ai then if flight.ai then
-- NOTE that AI will start taxiing once they started their engine.
-- Message. -- Message.
local text=string.format("Flight %s, you are cleared to taxi to runway.", flight.groupname) local text=string.format("Flight %s, you are cleared to taxi to runway.", flight.groupname)
@@ -524,13 +536,10 @@ function FLIGHTCONTROL:_CheckQueues()
-- TODO: handle case with engines hot. That does not trigger a ENGINE_START event. More a FLIGHTGROUP issue. -- TODO: handle case with engines hot. That does not trigger a ENGINE_START event. More a FLIGHTGROUP issue.
flight.group:StartUncontrolled() flight.group:StartUncontrolled()
-- TODO: is this really necessary here?
flight:__UpdateRoute(-1)
env.info("FF remove flight from parking queue - if possible.") env.info("FF remove flight from parking queue - if possible.")
self:_RemoveFlightFromQueue(self.Qparking, flight, "parking") self:_RemoveFlightFromQueue(self.Qparking, flight, "parking")
-- Add flight to takeoff queue.
self:_AddFlightToTakeoffQueue(flight) self:_AddFlightToTakeoffQueue(flight)
end end
@@ -613,7 +622,7 @@ function FLIGHTCONTROL:_GetNextFightHolding()
return self.Qwaiting[1] return self.Qwaiting[1]
end end
-- Sort flights by low fuel -- Sort flights by low fuel.
local function _sortByFuel(a, b) local function _sortByFuel(a, b)
local flightA=a --Ops.FlightGroup#FLIGHTGROUP local flightA=a --Ops.FlightGroup#FLIGHTGROUP
local flightB=b --Ops.FlightGroup#FLIGHTGROUP local flightB=b --Ops.FlightGroup#FLIGHTGROUP
@@ -626,7 +635,7 @@ function FLIGHTCONTROL:_GetNextFightHolding()
local function _sortByTholding(a, b) local function _sortByTholding(a, b)
local flightA=a --Ops.FlightGroup#FLIGHTGROUP local flightA=a --Ops.FlightGroup#FLIGHTGROUP
local flightB=b --Ops.FlightGroup#FLIGHTGROUP local flightB=b --Ops.FlightGroup#FLIGHTGROUP
return flightA.Tholding<flightB.Tholding return flightA.Tholding>flightB.Tholding
end end
@@ -657,6 +666,15 @@ end
-- @return Ops.FlightGroup#FLIGHTGROUP Marshal flight next in line and ready to enter the pattern. Or nil if no flight is ready. -- @return Ops.FlightGroup#FLIGHTGROUP Marshal flight next in line and ready to enter the pattern. Or nil if no flight is ready.
function FLIGHTCONTROL:_GetNextFightParking() function FLIGHTCONTROL:_GetNextFightParking()
-- First check human players.
if #self.Qtaxiout>0 then
-- TODO: Could be sorted by distance to active runway! Take the runway spawn point for distance measure.
-- First come, first serve.
return self.Qtaxiout[1]
end
if #self.Qparking==0 then if #self.Qparking==0 then
return nil return nil
elseif #self.Qparking==1 then elseif #self.Qparking==1 then
@@ -667,7 +685,7 @@ function FLIGHTCONTROL:_GetNextFightParking()
local function _sortByTparking(a, b) local function _sortByTparking(a, b)
local flightA=a --Ops.FlightGroup#FLIGHTGROUP local flightA=a --Ops.FlightGroup#FLIGHTGROUP
local flightB=b --Ops.FlightGroup#FLIGHTGROUP local flightB=b --Ops.FlightGroup#FLIGHTGROUP
return flightA.Tparking<flightB.Tparking return flightA.Tparking>flightB.Tparking
end end
-- Return flight waiting longest. -- Return flight waiting longest.
@@ -830,6 +848,41 @@ function FLIGHTCONTROL:_AddFlightToParkingQueue(flight)
return true return true
end end
--- Add flight to taxi out for takeoff queue.
-- @param #FLIGHTCONTROL self
-- @param Ops.FlightGroup#FLIGHTGROUP flight Flight group.
-- @return #boolean If true, flight was added. False otherwise.
function FLIGHTCONTROL:_AddFlightToTaxiOutQueue(flight)
-- Check if already in queue.
if self:_InQueue(self.Qtaxiout, flight.group) then
return false
end
-- Add flight to table.
table.insert(self.Qtaxiout, flight)
return true
end
--- Add flight to taxi out for takeoff queue.
-- @param #FLIGHTCONTROL self
-- @param Ops.FlightGroup#FLIGHTGROUP flight Flight group.
-- @return #boolean If true, flight was added. False otherwise.
function FLIGHTCONTROL:_AddFlightToReady4TakoffQueue(flight)
-- Check if already in queue.
if self:_InQueue(self.Qtaxiout, flight.group) then
return false
end
-- Add flight to table.
table.insert(self.Qtaxiout, flight)
return true
end
--- Add flight to takeoff queue. --- Add flight to takeoff queue.
-- @param #FLIGHTCONTROL self -- @param #FLIGHTCONTROL self
-- @param Ops.FlightGroup#FLIGHTGROUP flight Flight group. -- @param Ops.FlightGroup#FLIGHTGROUP flight Flight group.
@@ -850,6 +903,7 @@ function FLIGHTCONTROL:_AddFlightToTakeoffQueue(flight)
return true return true
end end
--- Check if a group is in a queue. --- Check if a group is in a queue.
-- @param #FLIGHTCONTROL self -- @param #FLIGHTCONTROL self
-- @param #table queue The queue to check. -- @param #table queue The queue to check.
@@ -1183,8 +1237,9 @@ function FLIGHTCONTROL:_PlayerMyStatus(groupname)
if flight then if flight then
local text=string.format("My Status:\n") local text=string.format("My Status:")
text=text..string.format("Flight status: %s", tostring(flight:GetState())) text=text..string.format("\nFlight control: %s", tostring(flight.flightcontrol and flight.flightcontrol.airbasename or "N/A"))
text=text..string.format("\nFlight status: %s", tostring(flight:GetState()))
MESSAGE:New(text, 5):ToGroup(flight.group) MESSAGE:New(text, 5):ToGroup(flight.group)
@@ -1235,13 +1290,16 @@ function FLIGHTCONTROL:_PlayerRequestTakeoff(groupname)
if #self.Qlanding==0 and self.Qtakeoff==0 then if #self.Qlanding==0 and self.Qtakeoff==0 then
MESSAGE:New("You are cleared for takeoff as there is no one else landing or queueing for takeoff", 5):ToAll() MESSAGE:New("You are cleared for takeoff as there is no one else landing or queueing for takeoff", 5):ToAll()
self:_AddFlightToTakeoffQueue(flight)
elseif #self.Qlanding>0 then elseif #self.Qlanding>0 then
MESSAGE:New("Negative ghostrider, other flights are currently landing.", 5):ToAll() MESSAGE:New("Negative ghostrider, other flights are currently landing. Talk to you soon.", 5):ToAll()
self:_AddFlightToTakeoffQueue(flight)
elseif #self.Qtakeoff>0 then elseif #self.Qtakeoff>0 then
MESSAGE:New("Negative ghostrider, other flights are ahead of you.", 5):ToAll() MESSAGE:New("Negative ghostrider, other flights are ahead of you.", 5):ToAll()
end end
self:_AddFlightToTakeoffQueue(flight)
else else
MESSAGE:New(string.format("You must request TAXI before you can request TAKEOFF!"), 5):ToAll() MESSAGE:New(string.format("You must request TAXI before you can request TAKEOFF!"), 5):ToAll()
+38 -7
View File
@@ -64,6 +64,36 @@
-- --
-- # The FLIGHTGROUP Concept -- # The FLIGHTGROUP Concept
-- --
-- # Events
--
-- This class introduces a lot of additional events that will be handy in many situations.
-- Certain events like landing, takeoff etc. are triggered for each element and also have a corresponding event when the whole group reaches this state.
--
-- ## Spawning
--
-- ## Parking
--
-- ## Taxiing
--
-- ## Takeoff
--
-- ## Airborne
--
-- ## Landed
--
-- ## Arrived
--
-- ## Dead
--
-- ## Fuel
--
-- ## Ammo
--
-- ## Detected Units
--
-- ## Check In Zone
--
-- ## Passing Waypoint
-- --
-- --
-- @field #FLIGHTGROUP -- @field #FLIGHTGROUP
@@ -1434,11 +1464,14 @@ function FLIGHTGROUP:onafterFlightTaxiing(From, Event, To)
if self.flightcontrol and airbase and self.flightcontrol.airbasename==airbase:GetName() then if self.flightcontrol and airbase and self.flightcontrol.airbasename==airbase:GetName() then
-- Remove flight from parking queue. -- Remove flight from parking queue.
self.flightcontrol:_RemoveFlightFromQueue(self.flightcontrol.Qparking, self, "parking") self.flightcontrol:_RemoveFlightFromQueue(self.flightcontrol.Qparking, self, "parking")
-- Add AI flight to takeoff queue. -- Add AI flight to takeoff queue.
if self.ai then if self.ai then
self.flightcontrol:_AddFlightToTakeoffQueue(self) self.flightcontrol:_AddFlightToTakeoffQueue(self)
else
self.flightcontrol:_AddFlightToTaxiOutQueue(self)
end end
end end
end end
@@ -2990,10 +3023,8 @@ function FLIGHTGROUP:_CheckInZones()
-- Nothing to do. -- Nothing to do.
end end
end end
end
end
end end
end end