diff --git a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua index 74c3b5746..dd1264b7a 100644 --- a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua @@ -1239,7 +1239,7 @@ do -- AI_A2A_DISPATCHER --- Set the default CAP limit for squadrons, which will be used to determine how many CAP can be airborne at the same time for the squadron. - -- The default CAP time interval is 1 CAP. + -- The default CAP limit is 1 CAP, which means one CAP group being spawned. -- @param #AI_A2A_DISPATCHER self -- @param #number CapLimit The maximum amount of CAP that can be airborne at the same time for the squadron. -- @return #AI_A2A_DISPATCHER @@ -1497,7 +1497,7 @@ do -- AI_A2A_DISPATCHER end - --- + --- Set a CAP for a Squadron. -- @param #AI_A2A_DISPATCHER self -- @param #string SquadronName The squadron name. -- @param Core.Zone#ZONE_BASE Zone The @{Zone} object derived from @{Zone#ZONE_BASE} that defines the zone wherein the CAP will be executed. @@ -1549,9 +1549,13 @@ do -- AI_A2A_DISPATCHER return self end - --- + --- Set the squadron CAP parameters. -- @param #AI_A2A_DISPATCHER self -- @param #string SquadronName The squadron name. + -- @param #number CapLimit (optional) The maximum amount of CAP groups to be spawned. Note that a CAP is a group, so can consist out of 1 to 4 airplanes. The default is 1 CAP group. + -- @param #number LowInterval (optional) The minimum time boundary in seconds when a new CAP will be spawned. The default is 180 seconds. + -- @param #number HighInterval (optional) The maximum time boundary in seconds when a new CAP will be spawned. The default is 600 seconds. + -- @param #number Probability Is not in use, you can skip this parameter. -- @return #AI_A2A_DISPATCHER -- @usage -- @@ -1577,10 +1581,10 @@ do -- AI_A2A_DISPATCHER local Cap = self.DefenderSquadrons[SquadronName].Cap if Cap then - Cap.LowInterval = LowInterval or 300 + Cap.LowInterval = LowInterval or 180 Cap.HighInterval = HighInterval or 600 Cap.Probability = Probability or 1 - Cap.CapLimit = CapLimit + Cap.CapLimit = CapLimit or 1 Cap.Scheduler = Cap.Scheduler or SCHEDULER:New( self ) local Scheduler = Cap.Scheduler -- Core.Scheduler#SCHEDULER local ScheduleID = Cap.ScheduleID diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index b2ce1538b..a09616279 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -1140,7 +1140,7 @@ do -- DETECTION_BASE end - do -- Threat + do -- NearBy calculations --- Returns if there are friendlies nearby the FAC units ... -- @param #DETECTION_BASE self @@ -1157,6 +1157,15 @@ do -- DETECTION_BASE return DetectedItem.FriendliesNearBy end + + --- Filters friendly units by unit category. + -- @param #DETECTION_BASE self + -- @param FriendliesCategory + -- @return #DETECTION_BASE + function DETECTION_BASE:FilterFriendliesCategory( FriendliesCategory ) + self.FriendliesCategory = FriendliesCategory + return self + end --- Returns if there are friendlies nearby the intercept ... -- @param #DETECTION_BASE self @@ -1245,15 +1254,18 @@ do -- DETECTION_BASE --self:F( { "Friendlies search:", FoundUnitName, FoundUnitCoalition, EnemyUnitName, EnemyCoalition, FoundUnitInReportSetGroup } ) if FoundUnitCoalition ~= EnemyCoalition and FoundUnitInReportSetGroup == false then - DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} local FriendlyUnit = UNIT:Find( FoundDCSUnit ) local FriendlyUnitName = FriendlyUnit:GetName() - - DetectedItem.FriendliesNearBy[FriendlyUnitName] = FriendlyUnit + local FriendlyUnitCategory = FriendlyUnit:GetDesc().category + self:T( { FriendlyUnitCategory = FriendlyUnitCategory, FriendliesCategory = self.FriendliesCategory } ) - local Distance = DetectedUnitCoord:Get2DDistance( FriendlyUnit:GetCoordinate() ) - DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} - DetectedItem.FriendliesDistance[Distance] = FriendlyUnit + if ( not self.FriendliesCategory ) or ( self.FriendliesCategory and ( self.FriendliesCategory == FriendlyUnitCategory ) ) then + DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} + DetectedItem.FriendliesNearBy[FriendlyUnitName] = FriendlyUnit + local Distance = DetectedUnitCoord:Get2DDistance( FriendlyUnit:GetCoordinate() ) + DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} + DetectedItem.FriendliesDistance[Distance] = FriendlyUnit + end return true end @@ -1269,23 +1281,28 @@ do -- DETECTION_BASE --- @param Wrapper.Unit#UNIT PlayerUnit function( PlayerUnitName ) local PlayerUnit = UNIT:FindByName( PlayerUnitName ) - + local PlayerUnitCategory = PlayerUnit:GetDesc().category + if PlayerUnit and PlayerUnit:IsInZone(DetectionZone) then - DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} - local PlayerUnitName = PlayerUnit:GetName() - - DetectedItem.PlayersNearBy = DetectedItem.PlayersNearBy or {} - DetectedItem.PlayersNearBy[PlayerUnitName] = PlayerUnit - - DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} - DetectedItem.FriendliesNearBy[PlayerUnitName] = PlayerUnit - - local CenterCoord = DetectedUnit:GetCoordinate() + if ( not self.FriendliesCategory ) or ( self.FriendliesCategory and ( self.FriendliesCategory == PlayerUnitCategory ) ) then - local Distance = CenterCoord:Get2DDistance( PlayerUnit:GetCoordinate() ) - DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} - DetectedItem.FriendliesDistance[Distance] = PlayerUnit + DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} + local PlayerUnitName = PlayerUnit:GetName() + + DetectedItem.PlayersNearBy = DetectedItem.PlayersNearBy or {} + DetectedItem.PlayersNearBy[PlayerUnitName] = PlayerUnit + + DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} + DetectedItem.FriendliesNearBy[PlayerUnitName] = PlayerUnit + + local CenterCoord = DetectedUnit:GetCoordinate() + + local Distance = CenterCoord:Get2DDistance( PlayerUnit:GetCoordinate() ) + DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} + DetectedItem.FriendliesDistance[Distance] = PlayerUnit + + end end end ) diff --git a/Moose Development/Moose/Tasking/Task_A2G_Dispatcher.lua b/Moose Development/Moose/Tasking/Task_A2G_Dispatcher.lua index 9de721ff4..8857bb4ce 100644 --- a/Moose Development/Moose/Tasking/Task_A2G_Dispatcher.lua +++ b/Moose Development/Moose/Tasking/Task_A2G_Dispatcher.lua @@ -59,6 +59,7 @@ do -- TASK_A2G_DISPATCHER self.Mission = Mission self.Detection:FilterCategories( Unit.Category.GROUND_UNIT, Unit.Category.SHIP ) + self.Detection:FilterFriendliesCategory( Unit.Category.GROUND_UNIT ) self:AddTransition( "Started", "Assign", "Started" ) diff --git a/docs/Documentation/AI_A2A_Dispatcher.html b/docs/Documentation/AI_A2A_Dispatcher.html index a44b0d577..6cc0cf345 100644 --- a/docs/Documentation/AI_A2A_Dispatcher.html +++ b/docs/Documentation/AI_A2A_Dispatcher.html @@ -757,13 +757,13 @@ Per one, two, three, four?

AI_A2A_DISPATCHER:SetSquadronCap(SquadronName, Zone, FloorAltitude, CeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, EngageMinSpeed, EngageMaxSpeed, AltType) - +

Set a CAP for a Squadron.

AI_A2A_DISPATCHER:SetSquadronCapInterval(SquadronName, CapLimit, LowInterval, HighInterval, Probability) - +

Set the squadron CAP parameters.

@@ -3293,7 +3293,7 @@ or

Set the default CAP limit for squadrons, which will be used to determine how many CAP can be airborne at the same time for the squadron.

-

The default CAP time interval is 1 CAP.

+

The default CAP limit is 1 CAP, which means one CAP group being spawned.

Parameter