diff --git a/Moose Development/Moose/Functional/RAT2.lua b/Moose Development/Moose/Functional/RAT2.lua index 89ab94f1d..ebc243efa 100644 --- a/Moose Development/Moose/Functional/RAT2.lua +++ b/Moose Development/Moose/Functional/RAT2.lua @@ -104,11 +104,11 @@ end -- @param #string To To state. function RAT2:onafterStatus(From, Event, To) + self:I(string.format("RAT status %s", self:GetState())) + -- Check queue of aircraft to spawn. self:_CheckQueueSpawn() - self:_CheckArrived() - self:__Status(-10) end @@ -117,58 +117,69 @@ end -- @param #RAT2 self function RAT2:_CheckQueueSpawn() + self:I(string.format("Checking flights")) + + -- Loop over all ratcraft. for i,_ratcraft in pairs(self.Qcraft) do local ratcraft=_ratcraft --Functional.RatCraft#RATCRAFT -- Get number of alive groups. local Nalive=ratcraft:_GetAliveGroups() - - -- Check if new groups should be spawned. - if Nalive Event --> To State + self:AddTransition("Stopped", "Load", "Stopped") -- Load ratcraft from file. + self:AddTransition("Stopped", "Start", "Running") -- Start RAT2 script. + self:AddTransition("Running", "Pause", "Paused") -- Pause spawning RATCRAFT. + self:AddTransition("Paused", "Unpause", "Running") -- UnPause spawning RATCRAFT. + + -- Initialize aircraft parameters. + self:_Init(groupname) + + self:Start() + + return self +end + +--- Init aircraft parameters. +-- @param #RATCRAFT self +-- @param #string groupname Name of the template group. +-- @return #RATCRAFT self +function RATCRAFT:_Init(groupname) + + self.templatename=groupname + self.templategroup=GROUP:FindByName(groupname) + self.template=self.templategroup:GetTemplate() + + self.speedmax=self.templategroup:GetSpeedMax() self.range=1000000 self.DCSdesc=self.templategroup:GetDCSDesc(1) @@ -169,26 +197,6 @@ function RATCRAFT:New(groupname, alias) self.sizey=self.DCSdesc.box.max.y self.sizez=self.DCSdesc.box.max.z self.size =math.max(self.sizex, self.sizez) - - - -- Start State. - self:SetStartState("Stopped") - - -- Add FSM transitions. - -- From State --> Event --> To State - self:AddTransition("Stopped", "Load", "Stopped") -- Load ratcraft from file. - self:AddTransition("Stopped", "Start", "Running") -- Start RAT2 script. - self:AddTransition("Running", "Pause", "Paused") -- Pause spawning RATCRAFT. - self:AddTransition("Paused", "Unpause", "Running") -- UnPause spawning RATCRAFT. - - return self -end - ---- Init aircraft parameters. --- @param #RATCRAFT self --- @return #RATCRAFT self -function RATCRAFT:_Init() - end @@ -239,13 +247,13 @@ function RATCRAFT:AddDestinationAirbase(airbasename, parking) local destination={} --#RATCRAFT.Departure + -- Convert parking IDs to complete parking data. local spots=nil if parking then if type(parking)=="number" then parking={parking} end - -- Convert parking IDs to complete parking data. spots={} local airbase=AIRBASE:FindByName(airbasename) for _,TerminalID in pairs(parking) do @@ -282,6 +290,30 @@ function RATCRAFT:AddDepartureZone(zone) return self end +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- FSM Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Add a departure for the aircraft. +-- @param #RATCRAFT self +function RATCRAFT:onafterStart() + + -- Create flight groups. + for i=1,self.Nspawn do + + -- Group name. + local groupname=string.format("%s-%02d", self.alias, i) + + -- New flight group. + local flightgroup=FLIGHTGROUP:New(groupname) + + -- Add flight to tabloe. + table.insert(self.flights, flightgroup) + + end + +end + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Departure Functions ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index 8e0270c20..c3d13f97b 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -286,7 +286,7 @@ function FLIGHTGROUP:New(groupname) -- Add FSM transitions. -- From State --> Event --> To State - self:AddTransition("Stopped", "Start", "Running") -- Start FSM. + self:AddTransition("Stopped", "Start", "InUtero") -- Start FSM. self:AddTransition("*", "Stop", "Stopped") -- Stop FSM. self:AddTransition("*", "FlightStatus", "*") -- FLIGHTGROUP status update. @@ -593,51 +593,58 @@ function FLIGHTGROUP:GetWaypointCurrent() return self.waypoints[self.currentwp] end +--- Check if flight is in state in utero. +-- @param #FLIGHTGROUP self +-- @return #boolean If true, flight is not spawned yet. +function FLIGHTGROUP:IsInUtero() + return self:Is("InUtero") +end + --- Check if flight is in state spawned. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight is spawned. function FLIGHTGROUP:IsSpawned() return self:Is("Spawned") end --- Check if flight is parking. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight is parking after spawned. function FLIGHTGROUP:IsParking() return self:Is("Parking") end --- Check if flight is parking. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight is taxiing after engine start up. function FLIGHTGROUP:IsTaxiing() return self:Is("Taxiing") end --- Check if flight is airborne. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight is airborne. function FLIGHTGROUP:IsAirborne() return self:Is("Airborne") end --- Check if flight is landing. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight is landing, i.e. on final approach. function FLIGHTGROUP:IsLanding() return self:Is("Landing") end --- Check if flight has landed and is now taxiing to its parking spot. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight has landed function FLIGHTGROUP:IsLanded() return self:Is("Landed") end --- Check if flight has arrived at its destination parking spot. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, flight has arrived at its destination and is parking. function FLIGHTGROUP:IsArrived() return self:Is("Arrived") end @@ -651,7 +658,7 @@ end --- Check if flight is dead. -- @param #FLIGHTGROUP self --- @return #boolean +-- @return #boolean If true, all units/elements of the flight are dead. function FLIGHTGROUP:IsDead() return self:Is("Dead") end