From 92a75d488c0e63d59ec894bcb1c45731b019364b Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 19 Jun 2019 20:59:09 +0200 Subject: [PATCH] Update CarrierAirWing.lua --- .../Moose/Ops/CarrierAirWing.lua | 134 +++++++++--------- 1 file changed, 68 insertions(+), 66 deletions(-) diff --git a/Moose Development/Moose/Ops/CarrierAirWing.lua b/Moose Development/Moose/Ops/CarrierAirWing.lua index b5ee27800..ab2f6b4f2 100644 --- a/Moose Development/Moose/Ops/CarrierAirWing.lua +++ b/Moose Development/Moose/Ops/CarrierAirWing.lua @@ -3,7 +3,7 @@ -- **Main Features:** -- -- * Nice stuff. --- +-- -- === -- -- ### Author: **funkyfranky** @@ -29,9 +29,9 @@ -- ![Banner Image](..\Presentations\CarrierAirWing\CVW_Main.jpg) -- -- # The CVW Concept --- --- --- +-- +-- +-- -- @field #CVW CVW = { ClassName = "CVW", @@ -76,7 +76,7 @@ CVW.version="0.0.2" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - + -- TODO: A lot! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -92,19 +92,19 @@ function CVW:New(carriername, alias) -- Inherit everything from WAREHOUSE class. local self=BASE:Inherit(self, WAREHOUSE:New(carriername, alias)) -- #CVW - + if not self.carrier then BASE:E(string.format("ERROR: Could not find carrier %s!", carriername)) return nil end - + self.carriername=carriername - + self.group=self.carrier:GetGroup() - + self.squadrons={} - - + + -- Set some string id for output to DCS.log file. self.sid=string.format("CVW %s |", self.carriername) @@ -115,7 +115,7 @@ function CVW:New(carriername, alias) self:AddTransition("*", "RequestIntercept", "*") -- Request Intercept. self:AddTransition("*", "RequestCAS", "*") -- Request Intercept. self:AddTransition("*", "RequestSEAD", "*") -- Request Intercept. - + ------------------------ --- Pseudo Functions --- ------------------------ @@ -144,7 +144,7 @@ function CVW:New(carriername, alias) --- Triggers the FSM event "SkipperStatus" after a delay. -- @function [parent=#CVW] __AirwingStatus -- @param #CVW self - -- @param #number delay Delay in seconds. + -- @param #number delay Delay in seconds. -- Debug trace. @@ -154,8 +154,8 @@ function CVW:New(carriername, alias) BASE:TraceClass(self.ClassName) BASE:TraceLevel(1) end - - return self + + return self end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -179,28 +179,30 @@ end --- Add squadron -- @param #CVW self -- @param #string name Name of the squadron, e.g. VFA-37. +-- @param #table Table of tasks. -- @return #CVW self -function CVW:AddSquadron(name) +function CVW:AddSquadron(name, tasks) local squadron={} --#CVW.Squadron - + squadron.name=name squadron.assets={} + squadron.tasks=tasks or {} table.insert(self.squadrons, squadron) end --- Add flight group to squadron. -- @param #CVW self --- @param #CVW.Squadron squadron Air wing squadron --- @param Wrapper.Group#GROUP flightgroup Flight group. --- @param #number ngroups Number of groups to be added. --- @param #string livery Livery for group. +-- @param #CVW.Squadron squadron The squadron object. +-- @param Wrapper.Group#GROUP flightgroup The flight group object. +-- @param #number ngroups Number of groups to add. +-- @param #string livery The livery for all added flight group. -- @return #CVW self function CVW:AddFlightToSquadron(squadron, flightgroup, ngroups, livery) self:AddAsset(flightgroup, ngroups, nil, nil, nil, nil, nil, {livery}, squadron.name) - + function self:OnAfterNewAsset(From,Event,To,asset,assignment) if assignment==squadron.name then table.insert(squadron.assets, asset) @@ -237,14 +239,14 @@ function CVW:onafterStart(From, Event, To) -- Info. self:I(self.sid..string.format("Starting CVW v%s for carrier %s on map %s.", CVW.version, self.carriername, self.theatre)) - + -- Add F10 radio menu. self:_SetMenuCoalition() - + for _,_squadron in pairs(self.squadrons) do local squadron=_squadron --#CVW.Squadron self:_AddSquadonMenu(squadron) - + end -- Init status updates. @@ -281,19 +283,19 @@ end function CVW:onafterRequestCAP(From, Event, To, squadron, coordinate) local n=self:GetNumberOfAssets(WAREHOUSE.Descriptor.ASSIGNMENT, "CAP", false) - + if n>0 then self:__AddRequest(1, self, WAREHOUSE.Descriptor.ASSIGNMENT, squadron.name, 1, nil, nil, nil, CVW.Task.INTERCEPT) - + function self:OnAfterSelfRequest(From,Event,To,Groupset,Request) - + if Request.assignment==CVW.Task.INTERCEPT then local request=Request --Functional.Warehouse#WAREHOUSE.Pendingitem - local groupset=Groupset --Core.Set#SET_GROUP + local groupset=Groupset --Core.Set#SET_GROUP end end - + end end @@ -306,21 +308,21 @@ end -- @param #number leg Length of race track pattern leg. -- @param #number speed Speed in knots. function CVW:LaunchCAP(group, capcoord, alt, leg, heading, speed) - + local alt=UTILS.FeetToMeters(20000) - + -- Task orbit. local taskOrbit=group:TaskOrbit(capcoord, alt, UTILS.KnotsToMps(400), capcoord:Translate(UTILS.NMToMeters(15), 0)) - + local wp={} wp[1]=self:GetCoordinate():WaypointAirTakeOffParking() wp[2]=self:GetCoordinate():SetAltitude(alt):WaypointAirTurningPoint(COORDINATE.WaypointAltType.BARO, UTILS.KnotsToKmph(350), {taskOrbit}, "CAP") - + -- Start uncontrolled group. group:StartUncontrolled() - + --airboss:SetExcludeAI() - + -- Route group. group:Route(wp) end @@ -342,16 +344,16 @@ function CVW:_SetMenuCoalition() -- Get coalition. local Coalition=self:GetCoalition() - + -- Init menu table. self.menu=self.menu or {} -- Init menu coalition table. self.menu[Coalition]=self.menu[Coalition] or {} - + -- Shortcut. local menu=self.menu[Coalition] - + if self.menusingle then -- F10/Skipper/... if not menu.Skipper then @@ -363,19 +365,19 @@ function CVW:_SetMenuCoalition() menu.Root=MENU_COALITION:New(Coalition, "CVW") end menu.Skipper=MENU_COALITION:New(Coalition, self.alias, menu.Root) - end + end ------------------- -- Squadron Menu -- ------------------- - + menu.Squadron={} menu.Squadron.Main= MENU_COALITION:New(Coalition, "Squadrons", menu.Skipper) - + menu.Warehouse=MENU_COALITION:New(Coalition, "Warehouse", menu.Skipper) menu.Warehouse_Reports = MENU_COALITION_COMMAND:New(Coalition, "Reports On/Off", menu.Warehouse, self.WarehouseReportsToggle, self) menu.Warehouse_Assets = MENU_COALITION_COMMAND:New(Coalition, "Report Assets", menu.Warehouse, self.ReportWarehouseStock, self) - + end @@ -387,12 +389,12 @@ function CVW:_AddSquadonMenu(squadron) local Coalition=self:GetCoalition() local root=self.menu[Coalition].Squadrons.Main - + local menu=MENU_COALITION:New(Coalition, squadron.name, root) - + MENU_COALITION_COMMAND:New(Coalition, "Report", menu, self._Report, self, squadron) MENU_COALITION_COMMAND:New(Coalition, "Launch CAP", menu, self._LaunchCAP, self, squadron) - + -- Set menu. squadron.menu=menu @@ -402,7 +404,7 @@ end --- Warehouse reports on/off. -- @param #CVW self function CVW:WarehouseReportsToggle() - self.warehouse.Report=not self.warehouse.Report + self.warehouse.Report=not self.warehouse.Report MESSAGE:New(string.format("Warehouse reports are now %s", tostring(self.warehouse.Report)), 10, "CVW", true):ToCoalition(self:GetCoalition()) end @@ -421,52 +423,52 @@ function CVW:LaunchIntercept(intruder) -- Get number of aircraft. local n=self:GetNumberOfAssets(WAREHOUSE.Descriptor.ASSIGNMENT, "Intercept", false) - + if n>0 then self.warehouse:AddRequest(self.warehouse, WAREHOUSE.Descriptor.ASSIGNMENT, "Intercept", 1, nil, nil, nil, "Intercept") - + local capcoord=intruder.group:GetCoordinate() - + capcoord:MarkToAll("Intruder coord") function self.warehouse.OnAfterSelfRequest(warehouse, From, Event, To, Groupset, Request) local request=Request --Functional.Warehouse#WAREHOUSE.Pendingitem local groupset=Groupset --Core.Set#SET_GROUP - + for _,_group in pairs(groupset:GetSet()) do local group=_group --Wrapper.Group#GROUP - + if request.assignment=="Intercept" then - + -- Task orbit. local tasks={} - + for _,unit in pairs(intruder.group:GetUnits()) do tasks[#tasks+1]=group:TaskAttackUnit(unit) end - + local speed=group:GetSpeedMax() local altitude=intruder.group:GetAltitude() - + -- Create waypoints. local wp={} wp[1]=self:GetCoordinate():WaypointAirTakeOffParking() wp[2]=self:GetCoordinate():SetAltitude(altitude):WaypointAirTurningPoint(COORDINATE.WaypointAltType.BARO, speed, {tasks}, "Attack Intruder") - + -- Start uncontrolled group. group:StartUncontrolled() - + --airboss:SetExcludeAI() - + -- Route group - group:Route(wp) + group:Route(wp) end - + end end - + else MESSAGE:New("No INTERCEPT fighters currently available", 5, "CVW"):ToCoalition(self:GetCoalition()) end @@ -485,7 +487,7 @@ function CVW:_SortIntruders() local b=_b --#CVW.Intruder return a.threadlevel>b.threadlevel end - + table.sort(self.intruders, _sort) end @@ -496,7 +498,7 @@ end function CVW:_UpdateIntruderMenu() for _,_intruder in ipairs(self.intruders) do - local intruder=_intruder --#CVW.Intruder + local intruder=_intruder --#CVW.Intruder self:_AddIntruderMenu(intruder) end @@ -509,9 +511,9 @@ function CVW:_RemoveIntruderMenu(intruder) if intruder.menu then local menu=intruder.menu --Core.Menu#MENU_COALITION - + menu:Remove() - + intruder.menu=nil end