diff --git a/Moose Development/Moose/Core/Fsm.lua b/Moose Development/Moose/Core/Fsm.lua index 70275d945..80dfcb0c5 100644 --- a/Moose Development/Moose/Core/Fsm.lua +++ b/Moose Development/Moose/Core/Fsm.lua @@ -619,6 +619,7 @@ do -- FSM if self[handler] then + --[[ if step == "onafter" or step == "OnAfter" then self:T( ":::>" .. step .. params[2] .. " : " .. params[1] .. " >> " .. params[2] .. ">" .. step .. params[2] .. "()" .. " >> " .. params[3] ) elseif step == "onbefore" or step == "OnBefore" then @@ -630,6 +631,7 @@ do -- FSM else self:T( ":::>" .. step .. " : " .. params[1] .. " >> " .. params[2] .. " >> " .. params[3] ) end + ]] self._EventSchedules[EventName] = nil @@ -930,9 +932,10 @@ do -- FSM -- @return #boolean If true, FSM can do the event. -- @return #string To state. function FSM:can(e) + local Event = self.Events[e] - - self:F3( { self.current, Event } ) + + --self:F3( { self.current, Event } ) local To = Event and Event.map[self.current] or Event.map['*'] diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index 49c33183b..97f0fb280 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -560,6 +560,7 @@ do -- COORDINATE self.z=z return self else + --env.info("FF translate with NEW coordinate T="..timer.getTime()) return COORDINATE:New(x, y, z) end @@ -1136,23 +1137,6 @@ do -- COORDINATE return self end - --- Add a Distance in meters from the COORDINATE horizontal plane, with the given angle, and calculate the new COORDINATE. - -- @param #COORDINATE self - -- @param DCS#Distance Distance The Distance to be added in meters. - -- @param DCS#Angle Angle The Angle in degrees. - -- @return #COORDINATE The new calculated COORDINATE. - function COORDINATE:Translate( Distance, Angle ) - local SX = self.x - local SZ = self.z - local Radians = Angle / 180 * math.pi - local TX = Distance * math.cos( Radians ) + SX - local TZ = Distance * math.sin( Radians ) + SZ - - return COORDINATE:New( TX, self.y, TZ ) - end - - - --- Build an air type route point. -- @param #COORDINATE self -- @param #COORDINATE.WaypointAltType AltType The altitude type. diff --git a/Moose Development/Moose/Core/Timer.lua b/Moose Development/Moose/Core/Timer.lua new file mode 100644 index 000000000..cbf739fa3 --- /dev/null +++ b/Moose Development/Moose/Core/Timer.lua @@ -0,0 +1,250 @@ +--- **Core** - Timer scheduler. +-- +-- **Main Features:** +-- +-- * Delay function calls +-- * Easy set up and little overhead +-- * Set start, stop and time interval +-- * Define max function calls +-- +-- === +-- +-- ### Author: **funkyfranky** +-- @module Core.Timer +-- @image CORE_Timer.png + + +--- TIMER class. +-- @type TIMER +-- @field #string ClassName Name of the class. +-- @field #string lid Class id string for output to DCS log file. +-- @field #number tid Timer ID returned by the DCS API function. +-- @field #function func Timer function. +-- @field #table para Parameters passed to the timer function. +-- @field #number Tstart Relative start time in seconds. +-- @field #number Tstop Relative stop time in seconds. +-- @field #number dT Time interval between function calls in seconds. +-- @field #number ncalls Counter of function calls. +-- @field #number ncallsMax Max number of function calls. If reached, timer is stopped. +-- @extends Core.Base#BASE + +--- *Better three hours too soon than a minute too late.* – William Shakespeare +-- +-- === +-- +-- ![Banner Image](..\Presentations\Timer\TIMER_Main.jpg) +-- +-- # The TIMER Concept +-- +-- The TIMER class is the little sister of the SCHEDULER class. It does the same thing but is a bit easier to use and has less overhead. It should be sufficient in many cases. +-- +-- # Construction +-- +-- A new TIMER is created by the @{#TIMER.New}(*func*, *...*) function +-- +-- local mytimer=TIMER:New(myfunction, a, b) +-- +-- The first parameter *func* is the function that is called followed by the necessary comma separeted parameters that are passed to that function. +-- +-- ## Starting the Timer +-- +-- The timer is started by the @{#TIMER.Start}(*Tstart*, *dT*, *Duration*) function +-- +-- mytimer:Start(5, 1, 20) +-- +-- where +-- +-- * *Tstart* is the relative start time in seconds. In the example, the first function call happens after 5 sec. +-- * *dT* is the time interval between function calls in seconds. Above, the function is called once per second. +-- * *Duration* is the duration in seconds after which the timer is stopped. This is relative to the start time. Here, the timer will run for 20 seconds. +-- +-- Note that +-- +-- * if *Tstart* is not specified (*nil*), the first function call happens immediately. +-- * if *dT* is not specified (*nil*), the function is called only once. +-- * if *Duration* is not specified (*nil*), the timer runs forever or until stopped manually or until the max function calls are reached (see below). +-- +-- For example, +-- +-- mytimer:Start(3) -- Will call the function once after 3 seconds. +-- mytimer:Start(nil, 0.5) -- Will call right now and then every 0.5 sec until all eternaty. +-- mytimer:Start(nil, 2.0, 20) -- Will call right now and then every 2.0 sec for 20 sec. +-- mytimer:Start(1.0, nil, 10) -- Does not make sense as the function is only called once anyway. +-- +-- ## Stopping the Timer +-- +-- The timer can be stopped manually by the @{#TIMER.Start}(*Delay*) function +-- +-- mytimer:Stop() +-- +-- If the optional paramter *Delay* is specified, the timer is stopped after *delay* seconds. +-- +-- ## Limit Function Calls +-- +-- The timer can be stopped after a certain amount of function calles with the @{#TIMER.SetMaxFunctionCalls}(*Nmax*) function +-- +-- mytimer:SetMaxFunctionCalls(20) +-- +-- where *Nmax* is the number of calls after which the timer is stopped, here 20. +-- +-- For example, +-- +-- mytimer:SetMaxFunctionCalls(66):Start(1.0, 0.1) +-- +-- will start the timer after one second and call the function every 0.1 seconds. Once the function has been called 66 times, the timer is stopped. +-- +-- +-- @field #TIMER +TIMER = { + ClassName = "TIMER", + lid = nil, +} + +--- TIMER class version. +-- @field #string version +TIMER.version="0.1.0" + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- TODO list +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-- TODO: A lot. +-- TODO: Write docs. + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Constructor +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Create a new TIMER object. +-- @param #TIMER self +-- @param #function Function The function to call. +-- @param ... Parameters passed to the function if any. +-- @return #TIMER self +function TIMER:New(Function, ...) + + -- Inherit BASE. + local self=BASE:Inherit(self, BASE:New()) --#TIMER + + self.lid="TIMER | " + + -- Function to call. + self.func=Function + + -- Function arguments. + self.para=arg or {} + + -- Number of function calls. + self.ncalls=0 + + return self +end + +--- Create a new TIMER object. +-- @param #TIMER self +-- @param #number Tstart Relative start time in seconds. +-- @param #number dT Interval between function calls in seconds. If not specified `nil`, the function is called only once. +-- @param #number Duration Time in seconds for how long the timer is running. If not specified `nil`, the timer runs forever or until stopped manually by the `TIMER:Stop()` function. +-- @return #TIMER self +function TIMER:Start(Tstart, dT, Duration) + + -- Current time. + local Tnow=timer.getTime() + + -- Start time in sec. + self.Tstart=Tstart or Tnow + + -- Set time interval. + self.dT=dT + + -- Stop time. + if Duration then + self.Tstop=self.Tstart+Duration + end + + -- Call DCS timer function. + self.tid=timer.scheduleFunction(TIMER._Function, self, self.Tstart) + + -- Set log id. + self.lid=string.format("TIMER ID=%d | ", self.tid) + + -- Debug info. + self:T(self.lid..string.format("Starting Timer in %.3f sec, dT=%s, Tstop=%s", self.Tstart-Tnow, tostring(self.dT), tostring(self.Tstop))) + + return self +end + +--- Stop the timer by removing the timer function. +-- @param #TIMER self +-- @param #number Delay (Optional) Delay in seconds, before the timer is stopped. +-- @return #TIMER self +function TIMER:Stop(Delay) + + if Delay and Delay>0 then + + self.Tstop=timer.getTime()+Delay + + else + + if self.tid then + self:T(self.lid..string.format("Stopping timer by removing timer function after %d calls!", self.ncalls)) + timer.removeFunction(self.tid) + end + + end + + return self +end + +--- Set max number of function calls. When the function has been called this many times, the TIMER is stopped. +-- @param #TIMER self +-- @param #number Nmax Set number of max function calls. +-- @return #TIMER self +function TIMER:SetMaxFunctionCalls(Nmax) + self.ncallsMax=Nmax + return self +end + +--- Call timer function. +-- @param #TIMER self +-- @param #number time DCS model time in seconds. +-- @return #number Time when the function is called again or `nil` if the timer is stopped. +function TIMER:_Function(time) + + -- Call function. + self.func(unpack(self.para)) + + -- Increase number of calls. + self.ncalls=self.ncalls+1 + + -- Next time. + local Tnext=self.dT and time+self.dT or nil + + -- Check if we stop the timer. + local stopme=false + if Tnext==nil then + -- No next time. + self:T(self.lid..string.format("No next time as dT=nil ==> Stopping timer after %d function calls", self.ncalls)) + stopme=true + elseif self.Tstop and Tnext>self.Tstop then + -- Stop time passed. + self:T(self.lid..string.format("Stop time passed %.3f > %.3f ==> Stopping timer after %d function calls", Tnext, self.Tstop, self.ncalls)) + stopme=true + elseif self.ncallsMax and self.ncalls>=self.ncallsMax then + -- Number of max function calls reached. + self:T(self.lid..string.format("Max function calls Nmax=%d reached ==> Stopping timer after %d function calls", self.ncallsMax, self.ncalls)) + stopme=true + end + + if stopme then + -- Remove timer function. + self:Stop() + return nil + else + -- Call again in Tnext seconds. + return Tnext + end +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index 0576da9aa..feda32b72 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -443,6 +443,41 @@ function ZONE_RADIUS:New( ZoneName, Vec2, Radius ) return self end +--- Update zone from a 2D vector. +-- @param #ZONE_RADIUS self +-- @param DCS#Vec2 Vec2 The location of the zone. +-- @param DCS#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:UpdateFromVec2(Vec2, Radius) + + -- New center of the zone. + self.Vec2=Vec2 + + if Radius then + self.Radius=Radius + end + + return self +end + +--- Update zone from a 2D vector. +-- @param #ZONE_RADIUS self +-- @param DCS#Vec3 Vec3 The location of the zone. +-- @param DCS#Distance Radius The radius of the zone. +-- @return #ZONE_RADIUS self +function ZONE_RADIUS:UpdateFromVec3(Vec3, Radius) + + -- New center of the zone. + self.Vec2.x=Vec3.x + self.Vec2.y=Vec3.z + + if Radius then + self.Radius=Radius + end + + return self +end + --- Mark the zone with markers on the F10 map. -- @param #ZONE_RADIUS self -- @param #number Points (Optional) The amount of points in the circle. Default 360. @@ -1410,20 +1445,24 @@ ZONE_POLYGON_BASE = { -- The @{Wrapper.Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected. -- @param #ZONE_POLYGON_BASE self -- @param #string ZoneName Name of the zone. --- @param #ZONE_POLYGON_BASE.ListVec2 PointsArray An array of @{DCS#Vec2}, forming a polygon.. +-- @param #ZONE_POLYGON_BASE.ListVec2 PointsArray An array of @{DCS#Vec2}, forming a polygon. -- @return #ZONE_POLYGON_BASE self function ZONE_POLYGON_BASE:New( ZoneName, PointsArray ) + + -- Inherit ZONE_BASE. local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) self:F( { ZoneName, PointsArray } ) - local i = 0 - - self._.Polygon = {} - - for i = 1, #PointsArray do - self._.Polygon[i] = {} - self._.Polygon[i].x = PointsArray[i].x - self._.Polygon[i].y = PointsArray[i].y + if PointsArray then + + self._.Polygon = {} + + for i = 1, #PointsArray do + self._.Polygon[i] = {} + self._.Polygon[i].x = PointsArray[i].x + self._.Polygon[i].y = PointsArray[i].y + end + end return self diff --git a/Moose Development/Moose/Modules.lua b/Moose Development/Moose/Modules.lua index f74335862..f1b6d1145 100644 --- a/Moose Development/Moose/Modules.lua +++ b/Moose Development/Moose/Modules.lua @@ -25,6 +25,7 @@ __Moose.Include( 'Scripts/Moose/Core/RadioQueue.lua' ) __Moose.Include( 'Scripts/Moose/Core/RadioSpeech.lua' ) __Moose.Include( 'Scripts/Moose/Core/Spawn.lua' ) __Moose.Include( 'Scripts/Moose/Core/SpawnStatic.lua' ) +__Moose.Include( 'Scripts/Moose/Core/Timer.lua' ) __Moose.Include( 'Scripts/Moose/Core/Goal.lua' ) __Moose.Include( 'Scripts/Moose/Core/Spot.lua' ) __Moose.Include( 'Scripts/Moose/Core/Astar.lua' ) diff --git a/Moose Development/Moose/Ops/Airboss.lua b/Moose Development/Moose/Ops/Airboss.lua index 5765e02da..feb293680 100644 --- a/Moose Development/Moose/Ops/Airboss.lua +++ b/Moose Development/Moose/Ops/Airboss.lua @@ -3385,6 +3385,11 @@ function AIRBOSS:onafterStart(From, Event, To) self:HandleEvent(EVENTS.PlayerLeaveUnit, self._PlayerLeft) self:HandleEvent(EVENTS.MissionEnd) + --self.StatusScheduler=SCHEDULER:New(self) + --self.StatusScheduler:Schedule(self, self._Status, {}, 1, 0.5) + + self.StatusTimer=TIMER:New(self._Status, self):Start(2, 0.5) + -- Start status check in 1 second. self:__Status(1) end @@ -3501,14 +3506,21 @@ function AIRBOSS:onafterStatus(From, Event, To) self:_ActivateBeacons() end + -- Call status every ~0.5 seconds. + self:__Status(-30) + +end + +--- Check AI status. Pattern queue AI in the groove? Marshal queue AI arrived in holding zone? +-- @param #AIRBOSS self +function AIRBOSS:_Status() + -- Check player status. self:_CheckPlayerStatus() -- Check AI landing pattern status self:_CheckAIStatus() - -- Call status every ~0.5 seconds. - self:__Status(-self.dTstatus) end --- Check AI status. Pattern queue AI in the groove? Marshal queue AI arrived in holding zone? @@ -3559,12 +3571,16 @@ function AIRBOSS:_CheckAIStatus() -- Get lineup and distance to carrier. local lineup=self:_Lineup(unit, true) + + local unitcoord=unit:GetCoord() + + local dist=unitcoord:Get2DDistance(self:GetCoord()) -- Distance in NM. - local distance=UTILS.MetersToNM(unit:GetCoordinate():Get2DDistance(self:GetCoordinate())) + local distance=UTILS.MetersToNM(dist) -- Altitude in ft. - local alt=UTILS.MetersToFeet(unit:GetAltitude()) + local alt=UTILS.MetersToFeet(unitcoord.y) -- Check if parameters are right and flight is in the groove. if lineup<2 and distance<=0.75 and alt<500 and not element.ballcall then @@ -10497,6 +10513,8 @@ end -- @return Core.Zone#ZONE_POLYGON_BASE Initial zone. function AIRBOSS:_GetZoneInitial(case) + self.zoneInitial=self.zoneInitial or ZONE_POLYGON_BASE:New("Zone CASE I/II Initial") + -- Get radial, i.e. inverse of BRC. local radial=self:GetRadial(2, false, false) @@ -10504,7 +10522,7 @@ function AIRBOSS:_GetZoneInitial(case) local cv=self:GetCoordinate() -- Vec2 array. - local vec2 + local vec2={} if case==1 then -- Case I @@ -10535,9 +10553,12 @@ function AIRBOSS:_GetZoneInitial(case) end -- Polygon zone. - local zone=ZONE_POLYGON_BASE:New("Zone CASE I/II Initial", vec2) + --local zone=ZONE_POLYGON_BASE:New("Zone CASE I/II Initial", vec2) + + self.zoneInitial:UpdateFromVec2(vec2) - return zone + --return zone + return self.zoneInitial end --- Get lineup groove zone. @@ -10545,6 +10566,8 @@ end -- @return Core.Zone#ZONE_POLYGON_BASE Lineup zone. function AIRBOSS:_GetZoneLineup() + self.zoneLineup=self.zoneLineup or ZONE_POLYGON_BASE:New("Zone Lineup") + -- Get radial, i.e. inverse of BRC. local fbi=self:GetRadial(1, false, false) @@ -10560,11 +10583,14 @@ function AIRBOSS:_GetZoneLineup() -- Vec2 array. local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2()} + + self.zoneLineup:UpdateFromVec2(vec2) -- Polygon zone. - local zone=ZONE_POLYGON_BASE:New("Zone Lineup", vec2) - - return zone + --local zone=ZONE_POLYGON_BASE:New("Zone Lineup", vec2) + --return zone + + return self.zoneLineup end @@ -10576,6 +10602,8 @@ end -- @return Core.Zone#ZONE_POLYGON_BASE Groove zone. function AIRBOSS:_GetZoneGroove(l, w, b) + self.zoneGroove=self.zoneGroove or ZONE_POLYGON_BASE:New("Zone Groove") + l=l or 1.50 w=w or 0.25 b=b or 0.10 @@ -10596,11 +10624,14 @@ function AIRBOSS:_GetZoneGroove(l, w, b) -- Vec2 array. local vec2={c1:GetVec2(), c2:GetVec2(), c3:GetVec2(), c4:GetVec2(), c5:GetVec2(), c6:GetVec2()} + + self.zoneGroove:UpdateFromVec2(vec2) -- Polygon zone. - local zone=ZONE_POLYGON_BASE:New("Zone Groove", vec2) - - return zone + --local zone=ZONE_POLYGON_BASE:New("Zone Groove", vec2) + --return zone + + return self.zoneGroove end --- Get Bullseye zone with radius 1 NM and DME 3 NM from the carrier. Radial depends on recovery case. @@ -10624,8 +10655,9 @@ function AIRBOSS:_GetZoneBullseye(case) -- Create zone. local zone=ZONE_RADIUS:New("Zone Bullseye", vec2, radius) - return zone + + --self.zoneBullseye=self.zoneBullseye or ZONE_RADIUS:New("Zone Bullseye", vec2, radius) end --- Get dirty up zone with radius 1 NM and DME 9 NM from the carrier. Radial depends on recovery case. @@ -10821,6 +10853,8 @@ end -- @return Core.Zone#ZONE Zone surrounding the carrier. function AIRBOSS:_GetZoneCarrierBox() + self.zoneCarrierbox=self.zoneCarrierbox or ZONE_POLYGON_BASE:New("Carrier Box Zone") + -- Stern coordinate. local S=self:_GetSternCoord() @@ -10849,9 +10883,12 @@ function AIRBOSS:_GetZoneCarrierBox() end -- Create polygon zone. - local zone=ZONE_POLYGON_BASE:New("Carrier Box Zone", vec2) - - return zone + --local zone=ZONE_POLYGON_BASE:New("Carrier Box Zone", vec2) + --return zone + + self.zoneCarrierbox:UpdateFromVec2(vec2) + + return self.zoneCarrierbox end --- Get zone of landing runway. @@ -10859,6 +10896,8 @@ end -- @return Core.Zone#ZONE_POLYGON Zone surrounding landing runway. function AIRBOSS:_GetZoneRunwayBox() + self.zoneRunwaybox=self.zoneRunwaybox or ZONE_POLYGON_BASE:New("Landing Runway Zone") + -- Stern coordinate. local S=self:_GetSternCoord() @@ -10881,9 +10920,12 @@ function AIRBOSS:_GetZoneRunwayBox() end -- Create polygon zone. - local zone=ZONE_POLYGON_BASE:New("Landing Runway Zone", vec2) - - return zone + --local zone=ZONE_POLYGON_BASE:New("Landing Runway Zone", vec2) + --return zone + + self.zoneRunwaybox:UpdateFromVec2(vec2) + + return self.zoneRunwaybox end @@ -10986,12 +11028,14 @@ function AIRBOSS:_GetZoneHolding(case, stack) -- Post 2.5 NM port of carrier. local Post=self:GetCoordinate():Translate(D, hdg+270) + --TODO: update zone not creating a new one. + -- Create holding zone. - zoneHolding=ZONE_RADIUS:New("CASE I Holding Zone", Post:GetVec2(), self.marshalradius) + self.zoneHolding=ZONE_RADIUS:New("CASE I Holding Zone", Post:GetVec2(), self.marshalradius) -- Delta pattern. if self.carriertype==AIRBOSS.CarrierType.TARAWA then - zoneHolding=ZONE_RADIUS:New("CASE I Holding Zone", self.carrier:GetVec2(), UTILS.NMToMeters(5)) + self.zoneHolding=ZONE_RADIUS:New("CASE I Holding Zone", self.carrier:GetVec2(), UTILS.NMToMeters(5)) end @@ -11010,10 +11054,12 @@ function AIRBOSS:_GetZoneHolding(case, stack) -- Square zone length=7NM width=6 NM behind the carrier starting at angels+15 NM behind the carrier. -- So stay 0-5 NM (+1 NM error margin) port of carrier. - zoneHolding=ZONE_POLYGON_BASE:New("CASE II/III Holding Zone", p) + self.zoneHolding=self.zoneHolding or ZONE_POLYGON_BASE:New("CASE II/III Holding Zone") + + self.zoneHolding:UpdateFromVec2(p) end - return zoneHolding + return self.zoneHolding end --- Get zone where player are automatically commence when enter. @@ -11054,7 +11100,9 @@ function AIRBOSS:_GetZoneCommence(case, stack) end -- Create holding zone. - zone=ZONE_RADIUS:New("CASE I Commence Zone", Three:GetVec2(), R) + self.zoneCommence=self.zoneCommence or ZONE_RADIUS:New("CASE I Commence Zone") + + self.zoneCommence:UpdateFromVec2(Three:GetVec2(), R) else -- Case II/III @@ -11085,11 +11133,13 @@ function AIRBOSS:_GetZoneCommence(case, stack) end -- Zone polygon. - zone=ZONE_POLYGON_BASE:New("CASE II/III Commence Zone", p) + self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone") + + self.zoneCommence:UpdateFromVec2(p) end - return zone + return self.zoneCommence end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -14335,6 +14385,12 @@ function AIRBOSS:GetCoordinate() return self.carrier:GetCoord() end +--- Get carrier coordinate. +-- @param #AIRBOSS self +-- @return Core.Point#COORDINATE Carrier coordinate. +function AIRBOSS:GetCoord() + return self.carrier:GetCoord() +end --- Get static weather of this mission from env.mission.weather. -- @param #AIRBOSS self diff --git a/Moose Development/Moose/Ops/ArmyGroup.lua b/Moose Development/Moose/Ops/ArmyGroup.lua index 2593978ee..f5e92a8ef 100644 --- a/Moose Development/Moose/Ops/ArmyGroup.lua +++ b/Moose Development/Moose/Ops/ArmyGroup.lua @@ -40,7 +40,7 @@ ARMYGROUP = { --- Army Group version. -- @field #string version -ARMYGROUP.version="0.0.1" +ARMYGROUP.version="0.1.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list diff --git a/Moose Development/Moose/Ops/Auftrag.lua b/Moose Development/Moose/Ops/Auftrag.lua index ce6fda25c..6ce63f05a 100644 --- a/Moose Development/Moose/Ops/Auftrag.lua +++ b/Moose Development/Moose/Ops/Auftrag.lua @@ -1772,13 +1772,9 @@ end --- Assign airwing squadron(s) to the mission. Only these squads will be considered for the job. -- @param #AUFTRAG self --- @param #table Squadrons A table of SQUADRONs or a single SQUADRON object. +-- @param #table Squadrons A table of SQUADRON(s). **Has to be a table {}** even if a single squad is given. -- @return #AUFTRAG self function AUFTRAG:AssignSquadrons(Squadrons) - - if Squadrons:IsInstanceOf("SQUADRON") then - Squadrons={Squadrons} - end for _,_squad in pairs(Squadrons) do local squadron=_squad --Ops.Squadron#SQUADRON diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index 44da6ed34..dc1911eda 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -332,6 +332,8 @@ function FLIGHTGROUP:New(group) self:__Status(-2) self:__QueueUpdate(-3) + --self.Timer=SCHEDULER:New() + return self end diff --git a/Moose Development/Moose/Ops/NavyGroup.lua b/Moose Development/Moose/Ops/NavyGroup.lua index 9aeec162b..9312b19c2 100644 --- a/Moose Development/Moose/Ops/NavyGroup.lua +++ b/Moose Development/Moose/Ops/NavyGroup.lua @@ -66,7 +66,7 @@ NAVYGROUP = { --- NavyGroup version. -- @field #string version -NAVYGROUP.version="0.1.0" +NAVYGROUP.version="0.5.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list diff --git a/Moose Development/Moose/Ops/OpsGroup.lua b/Moose Development/Moose/Ops/OpsGroup.lua index 578830e22..c4358afbf 100644 --- a/Moose Development/Moose/Ops/OpsGroup.lua +++ b/Moose Development/Moose/Ops/OpsGroup.lua @@ -262,7 +262,7 @@ OPSGROUP.TaskType={ --- NavyGroup version. -- @field #string version -OPSGROUP.version="0.2.0" +OPSGROUP.version="0.5.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list diff --git a/Moose Development/Moose/Ops/Squadron.lua b/Moose Development/Moose/Ops/Squadron.lua index e21e681c1..67f67419c 100644 --- a/Moose Development/Moose/Ops/Squadron.lua +++ b/Moose Development/Moose/Ops/Squadron.lua @@ -37,10 +37,10 @@ -- @field #number callsigncounter Counter to increase callsign names for new assets. -- @field Ops.AirWing#AIRWING airwing The AIRWING object the squadron belongs to. -- @field #number Ngroups Number of asset flight groups this squadron has. --- @field #number engageRange Engagement range in meters. +-- @field #number engageRange Mission range in meters. -- @field #string attribute Generalized attribute of the squadron template group. -- @field #number tankerSystem For tanker squads, the refuel system used (boom=0 or probpe=1). Default nil. --- @field #number refuelSystem For refuelable squads, the refuel system used (boom=0 or probpe=1). Default nil. +-- @field #number refuelSystem For refuelable squads, the refuel system used (boom=0 or probe=1). Default nil. -- @field #table tacanChannel List of TACAN channels available to the squadron. -- @field #number radioFreq Radio frequency in MHz the squad uses. -- @field #number radioModu Radio modulation the squad uses. diff --git a/Moose Development/Moose/Ops/Target.lua b/Moose Development/Moose/Ops/Target.lua index 80fdb9497..a4e44a61f 100644 --- a/Moose Development/Moose/Ops/Target.lua +++ b/Moose Development/Moose/Ops/Target.lua @@ -110,7 +110,7 @@ _TARGETID=0 --- TARGET class version. -- @field #string version -TARGET.version="0.0.1" +TARGET.version="0.1.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list