mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-18 13:16:03 +00:00
FG/FC/ATIS v0.6.3
This commit is contained in:
@@ -523,7 +523,7 @@ _ATIS={}
|
|||||||
|
|
||||||
--- ATIS class version.
|
--- ATIS class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
ATIS.version="0.6.2"
|
ATIS.version="0.6.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@@ -1142,6 +1142,10 @@ function ATIS:onafterBroadcast(From, Event, To)
|
|||||||
|
|
||||||
local WINDFROM=string.format("%03d", windFrom-magvar)
|
local WINDFROM=string.format("%03d", windFrom-magvar)
|
||||||
local WINDSPEED=string.format("%d", UTILS.MpsToKnots(windSpeed))
|
local WINDSPEED=string.format("%d", UTILS.MpsToKnots(windSpeed))
|
||||||
|
|
||||||
|
if WINDFROM=="000" then
|
||||||
|
WINDFROM="360"
|
||||||
|
end
|
||||||
|
|
||||||
if self.metric then
|
if self.metric then
|
||||||
WINDSPEED=string.format("%d", windSpeed)
|
WINDSPEED=string.format("%d", windSpeed)
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
-- @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 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 #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.
|
||||||
@@ -69,6 +70,7 @@ FLIGHTCONTROL = {
|
|||||||
Qlanding = {},
|
Qlanding = {},
|
||||||
Qtakeoff = {},
|
Qtakeoff = {},
|
||||||
Qparking = {},
|
Qparking = {},
|
||||||
|
QtaxiInb = {},
|
||||||
atis = nil,
|
atis = nil,
|
||||||
activerwyno = 1,
|
activerwyno = 1,
|
||||||
atcfreq = nil,
|
atcfreq = nil,
|
||||||
@@ -107,7 +109,7 @@ FLIGHTCONTROL = {
|
|||||||
|
|
||||||
--- FlightControl class version.
|
--- FlightControl class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
FLIGHTCONTROL.version="0.1.2"
|
FLIGHTCONTROL.version="0.1.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@@ -308,7 +310,8 @@ function FLIGHTCONTROL:onafterStatus()
|
|||||||
local nfree=self.Nparkingspots
|
local nfree=self.Nparkingspots
|
||||||
|
|
||||||
-- Info text.
|
-- Info text.
|
||||||
local text=string.format("State %s - Runway %s - Parking %d/%d - Qpark=%d Qtakeoff=%d Qland=%d Qhold=%d", self:GetState(), runway.idx, nfree, self.Nparkingspots, #self.Qparking, #self.Qtakeoff, #self.Qlanding, #self.Qwaiting)
|
local text=string.format("State %s - Runway %s - Parking %d/%d - Flights=%s: Qpark=%d Qtakeoff=%d Qland=%d Qhold=%d",
|
||||||
|
self:GetState(), runway.idx, nfree, self.Nparkingspots, #self.flights, #self.Qparking, #self.Qtakeoff, #self.Qlanding, #self.Qwaiting)
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
|
|
||||||
-- Next status update in ~30 seconds.
|
-- Next status update in ~30 seconds.
|
||||||
@@ -521,7 +524,9 @@ 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()
|
||||||
|
|
||||||
flight:_UpdateRoute(1)
|
|
||||||
|
-- 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")
|
||||||
@@ -1046,18 +1051,20 @@ function FLIGHTCONTROL:_CreatePlayerMenu(flight, atcmenu)
|
|||||||
|
|
||||||
atcmenu[airbasename] = atcmenu[airbasename] or {}
|
atcmenu[airbasename] = atcmenu[airbasename] or {}
|
||||||
|
|
||||||
-- Root menu
|
-- Airbase root menu.
|
||||||
atcmenu[airbasename].root = MENU_GROUP_DELAYED:New(group, airbasename, nil):SetTime(Tnow):SetTag(Tag)
|
atcmenu[airbasename].root = MENU_GROUP_DELAYED:New(group, airbasename, atcmenu.root):SetTime(Tnow):SetTag(Tag)
|
||||||
|
|
||||||
local rootmenu=atcmenu[airbasename].root --Core.Menu#MENU_GROUP_DELAYED
|
local rootmenu=atcmenu[airbasename].root --Core.Menu#MENU_GROUP_DELAYED
|
||||||
|
|
||||||
-- Commands
|
-- Commands
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Info", rootmenu, self._PlayerRequestInfo, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Info", rootmenu, self._PlayerRequestInfo, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
|
if flight.flightcontrol and flight.flightcontrol.airbasename==self.airbasename then
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Taxi", rootmenu, self._PlayerRequestTaxi, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Taxi", rootmenu, self._PlayerRequestTaxi, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Takeoff", rootmenu, self._PlayerRequestTakeoff, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Takeoff", rootmenu, self._PlayerRequestTakeoff, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Parking", rootmenu, self._PlayerRequestParking, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "Request Parking", rootmenu, self._PlayerRequestParking, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
|
end
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "Inbound", rootmenu, self._PlayerInbound, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "Inbound", rootmenu, self._PlayerInbound, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
if flight.flightcontrol.airbasename==self.airbasename then
|
if flight.flightcontrol and flight.flightcontrol.airbasename==self.airbasename then
|
||||||
MENU_GROUP_COMMAND_DELAYED:New(group, "My Status", rootmenu, self._PlayerMyStatus, self, groupname):SetTime(Tnow):SetTag(Tag)
|
MENU_GROUP_COMMAND_DELAYED:New(group, "My Status", rootmenu, self._PlayerMyStatus, self, groupname):SetTime(Tnow):SetTag(Tag)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1086,6 +1093,7 @@ function FLIGHTCONTROL:_PlayerRequestInfo(groupname)
|
|||||||
|
|
||||||
--
|
--
|
||||||
local text=string.format("Airbase %s Status:", self.airbasename)
|
local text=string.format("Airbase %s Status:", self.airbasename)
|
||||||
|
text=text..string.format("\nFlights %d", #self.flights)
|
||||||
text=text..string.format("\nQlanding %d", #self.Qlanding)
|
text=text..string.format("\nQlanding %d", #self.Qlanding)
|
||||||
text=text..string.format("\nQholding %d", #self.Qwaiting)
|
text=text..string.format("\nQholding %d", #self.Qwaiting)
|
||||||
text=text..string.format("\nQparking %d", #self.Qparking)
|
text=text..string.format("\nQparking %d", #self.Qparking)
|
||||||
@@ -1134,9 +1142,10 @@ function FLIGHTCONTROL:_PlayerInbound(groupname)
|
|||||||
if flight:IsAirborne() then
|
if flight:IsAirborne() then
|
||||||
|
|
||||||
if flight.flightcontrol and flight.flightcontrol.airbasename==self.airbasename then
|
if flight.flightcontrol and flight.flightcontrol.airbasename==self.airbasename then
|
||||||
|
-- Nothing to do as this flight has already the right flightcontrol.
|
||||||
else
|
else
|
||||||
|
|
||||||
|
-- Set FC controlling this flight.
|
||||||
flight:SetFlightControl(self)
|
flight:SetFlightControl(self)
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -1148,7 +1157,9 @@ function FLIGHTCONTROL:_PlayerInbound(groupname)
|
|||||||
MESSAGE:New(text, 5):ToGroup(flight.group)
|
MESSAGE:New(text, 5):ToGroup(flight.group)
|
||||||
|
|
||||||
else
|
else
|
||||||
-- TODO: error you are not airborne!
|
-- Error you are not airborne!
|
||||||
|
local text=string.format("Negative, you must be AIRBORNE to call INBOUND!")
|
||||||
|
MESSAGE:New(text, 5):ToGroup(flight.group)
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -1260,7 +1271,8 @@ function FLIGHTCONTROL:_CreateFlightGroup(group)
|
|||||||
flight=FLIGHTGROUP:New(group:GetName())
|
flight=FLIGHTGROUP:New(group:GetName())
|
||||||
end
|
end
|
||||||
|
|
||||||
if flight.destination and flight.destination:GetName()==self.airbasename then
|
--if flight.destination and flight.destination:GetName()==self.airbasename then
|
||||||
|
if flight.homebase and flight.homebase:GetName()==self.airbasename then
|
||||||
flight:SetFlightControl(self)
|
flight:SetFlightControl(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1270,7 +1282,7 @@ function FLIGHTCONTROL:_CreateFlightGroup(group)
|
|||||||
return flight
|
return flight
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Create a new flight group.
|
--- Remove flight from all queues.
|
||||||
-- @param #FLIGHTCONTROL self
|
-- @param #FLIGHTCONTROL self
|
||||||
-- @param Ops.FlightGroup#FLIGHTGROUP flight The flight to be removed.
|
-- @param Ops.FlightGroup#FLIGHTGROUP flight The flight to be removed.
|
||||||
function FLIGHTCONTROL:_RemoveFlight(flight)
|
function FLIGHTCONTROL:_RemoveFlight(flight)
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ FLIGHTGROUP.TaskType={
|
|||||||
|
|
||||||
--- FLIGHTGROUP class version.
|
--- FLIGHTGROUP class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
FLIGHTGROUP.version="0.2.1"
|
FLIGHTGROUP.version="0.2.2"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@@ -514,7 +514,18 @@ end
|
|||||||
-- @return #FLIGHTGROUP self
|
-- @return #FLIGHTGROUP self
|
||||||
function FLIGHTGROUP:SetFlightControl(flightcontrol)
|
function FLIGHTGROUP:SetFlightControl(flightcontrol)
|
||||||
self:I(self.sid..string.format("Setting FLIGHTCONTROL to airbase %s", flightcontrol.airbasename))
|
self:I(self.sid..string.format("Setting FLIGHTCONTROL to airbase %s", flightcontrol.airbasename))
|
||||||
|
-- Remove flight from previous FC.
|
||||||
|
if self.flightcontrol and self.flightcontrol.airbasename~=flightcontrol.airbasename then
|
||||||
|
self.flightcontrol:_RemoveFlight(self)
|
||||||
|
end
|
||||||
|
-- Set FC.
|
||||||
self.flightcontrol=flightcontrol
|
self.flightcontrol=flightcontrol
|
||||||
|
-- Add flight to all flights.
|
||||||
|
table.insert(flightcontrol.flights, self)
|
||||||
|
-- Update flight's F10 menu.
|
||||||
|
if self.ai==false then
|
||||||
|
self:_UpdateMenu()
|
||||||
|
end
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1518,14 +1529,14 @@ function FLIGHTGROUP:onbeforeUpdateRoute(From, Event, To, n)
|
|||||||
|
|
||||||
if self.group and self.group:IsAlive() and self:IsAirborne() then
|
if self.group and self.group:IsAlive() and self:IsAirborne() then
|
||||||
-- Alive & Airborne ==> Update route possible.
|
-- Alive & Airborne ==> Update route possible.
|
||||||
env.info("FF update route allowed")
|
self:I(self.sid.."FF update route allowed")
|
||||||
return true
|
return true
|
||||||
elseif self:IsDead() then
|
elseif self:IsDead() then
|
||||||
-- Group is dead! No more updates.
|
-- Group is dead! No more updates.
|
||||||
return false
|
return false
|
||||||
else
|
else
|
||||||
-- Not airborne yet. Try again in 1 sec.
|
-- Not airborne yet. Try again in 1 sec.
|
||||||
env.info("FF update route denied ==> checking back in 1 sec")
|
self:I(self.sid.."FF update route denied ==> checking back in 1 sec")
|
||||||
self:__UpdateRoute(-1, n)
|
self:__UpdateRoute(-1, n)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@@ -1541,7 +1552,7 @@ end
|
|||||||
function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
|
function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
|
||||||
|
|
||||||
MESSAGE:New("Updating route", 10):ToAll()
|
MESSAGE:New("Updating route", 10):ToAll()
|
||||||
env.info("FF updating route")
|
self:I(self.sid.."FF updating route")
|
||||||
|
|
||||||
-- TODO: what happens if currentwp=#waypoints
|
-- TODO: what happens if currentwp=#waypoints
|
||||||
n=n or self.currentwp+1
|
n=n or self.currentwp+1
|
||||||
@@ -1594,7 +1605,7 @@ function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
|
|||||||
-- Debug info.
|
-- Debug info.
|
||||||
local hb=self.homebase and self.homebase:GetName() or "unknown"
|
local hb=self.homebase and self.homebase:GetName() or "unknown"
|
||||||
local db=self.destination and self.destination:GetName() or "unknown"
|
local db=self.destination and self.destination:GetName() or "unknown"
|
||||||
self:I(self.sid..string.format("Updating route for WP>=%d (%d/%d) homebase=%s destination=%s", n, #wp, #self.waypoints, hb, db))
|
self:I(self.sid..string.format("Updating route for WP>=%d/%d (%d) homebase=%s destination=%s", n, #wp, #self.waypoints, hb, db))
|
||||||
|
|
||||||
if #wp>0 then
|
if #wp>0 then
|
||||||
|
|
||||||
@@ -3660,6 +3671,8 @@ function FLIGHTGROUP:_UpdateMenu()
|
|||||||
|
|
||||||
--playermenu:RemoveSubMenus() --Core.Menu#MENU_GROUP
|
--playermenu:RemoveSubMenus() --Core.Menu#MENU_GROUP
|
||||||
|
|
||||||
|
self.menu.atc.root=self.menu.atc.root or MENU
|
||||||
|
|
||||||
-- If there is a designated FC, we put it first.
|
-- If there is a designated FC, we put it first.
|
||||||
local N=8
|
local N=8
|
||||||
if self.flightcontrol then
|
if self.flightcontrol then
|
||||||
|
|||||||
Reference in New Issue
Block a user