* Added marking of task on map when also assigned.

* A BAI task won't be converted to a CAS task when a friendly airplane is nearby.
This commit is contained in:
FlightControl_Master 2017-12-20 11:51:23 +01:00
commit e7d48f335c
3 changed files with 46 additions and 22 deletions

View File

@ -1162,6 +1162,26 @@ do -- DETECTION_BASE
return self return self
end end
--- This will allow during friendly search only units of the specified list of categories.
-- @param #DETECTION_BASE self
-- @param #string FriendlyCategories A list of unit categories.
-- @return #DETECTION_BASE
-- @usage
-- -- Only allow Ships and Vehicles to be part of the friendly team.
-- Detection:SetFriendlyCategories( { Unit.Category.SHIP, Unit.Category.GROUND_UNIT } )
function DETECTION_BASE:FilterFriendlyCategories( FriendlyCategories )
self.FriendlyCategories = self.FriendlyCategories or {}
if type( FriendlyCategories ) ~= "table" then
FriendlyCategories = { FriendlyCategories }
end
for ID, FriendlyCategory in pairs( FriendlyCategories ) do
self:F( { FriendlyCategory = FriendlyCategory } )
self.FriendlyCategories[FriendlyCategory] = FriendlyCategory
end
return self
end
--- Returns if there are friendlies nearby the FAC units ... --- Returns if there are friendlies nearby the FAC units ...
-- @param #DETECTION_BASE self -- @param #DETECTION_BASE self
-- @return #boolean true if there are friendlies nearby -- @return #boolean true if there are friendlies nearby
@ -1179,15 +1199,6 @@ do -- DETECTION_BASE
return DetectedItem.FriendliesNearBy return DetectedItem.FriendliesNearBy
end 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 ... --- Returns if there are friendlies nearby the intercept ...
-- @param #DETECTION_BASE self -- @param #DETECTION_BASE self
-- @return #boolean trhe if there are friendlies near the intercept. -- @return #boolean trhe if there are friendlies near the intercept.
@ -1269,6 +1280,7 @@ do -- DETECTION_BASE
local EnemyCoalition = DetectedUnit:GetCoalition() local EnemyCoalition = DetectedUnit:GetCoalition()
local FoundUnitCoalition = FoundDCSUnit:getCoalition() local FoundUnitCoalition = FoundDCSUnit:getCoalition()
local FoundUnitCategory = FoundDCSUnit:getDesc().category
local FoundUnitName = FoundDCSUnit:getName() local FoundUnitName = FoundDCSUnit:getName()
local FoundUnitGroupName = FoundDCSUnit:getGroup():getName() local FoundUnitGroupName = FoundDCSUnit:getGroup():getName()
local EnemyUnitName = DetectedUnit:GetName() local EnemyUnitName = DetectedUnit:GetName()
@ -1291,21 +1303,32 @@ do -- DETECTION_BASE
end end
end end
local FoundUnitOfOtherCategory = false
if FoundUnitOfOtherCategory == false then
-- Now we check if the found unit is one of the allowed friendly categories.
for ID, FriendlyCategory in pairs( self.FriendlyCategories or {} ) do
self:F( { "Friendly Category:", FriendlyCategory = FriendlyCategory, FoundUnitCategory = FoundUnitCategory } )
if FriendlyCategory ~= FoundUnitCategory then
FoundUnitOfOtherCategory = true
break
end
end
end
self:F( { "Friendlies near Target:", FoundUnitName, FoundUnitCoalition, EnemyUnitName, EnemyCoalition, FoundUnitInReportSetGroup } ) self:F( { "Friendlies near Target:", FoundUnitName, FoundUnitCoalition, EnemyUnitName, EnemyCoalition, FoundUnitInReportSetGroup } )
if FoundUnitCoalition ~= EnemyCoalition and FoundUnitInReportSetGroup == false then if FoundUnitCoalition ~= EnemyCoalition and FoundUnitInReportSetGroup == false and FoundUnitOfOtherCategory == false then
local FriendlyUnit = UNIT:Find( FoundDCSUnit ) local FriendlyUnit = UNIT:Find( FoundDCSUnit )
local FriendlyUnitName = FriendlyUnit:GetName() local FriendlyUnitName = FriendlyUnit:GetName()
local FriendlyUnitCategory = FriendlyUnit:GetDesc().category local FriendlyUnitCategory = FriendlyUnit:GetDesc().category
--if ( not self.FriendliesCategory ) or ( self.FriendliesCategory and ( self.FriendliesCategory == FriendlyUnitCategory ) ) then DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {}
DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} DetectedItem.FriendliesNearBy[FriendlyUnitName] = FriendlyUnit
DetectedItem.FriendliesNearBy[FriendlyUnitName] = FriendlyUnit local Distance = DetectedUnitCoord:Get2DDistance( FriendlyUnit:GetCoordinate() )
local Distance = DetectedUnitCoord:Get2DDistance( FriendlyUnit:GetCoordinate() ) DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {}
DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} DetectedItem.FriendliesDistance[Distance] = FriendlyUnit
DetectedItem.FriendliesDistance[Distance] = FriendlyUnit self:T( { "Friendlies Found:", FriendlyUnitName = FriendlyUnitName, Distance = Distance, FriendlyUnitCategory = FriendlyUnitCategory, FriendliesCategory = self.FriendliesCategory } )
self:T( { "Friendlies Found:", FriendlyUnitName = FriendlyUnitName, Distance = Distance, FriendlyUnitCategory = FriendlyUnitCategory, FriendliesCategory = self.FriendliesCategory } )
--end
return true return true
end end

View File

@ -753,7 +753,7 @@ function TASK:SetPlannedMenuForGroup( TaskGroup, MenuTime )
if not Mission:IsGroupAssigned( TaskGroup ) then if not Mission:IsGroupAssigned( TaskGroup ) then
--self:F( { "Replacing Join Task menu" } ) --self:F( { "Replacing Join Task menu" } )
local JoinTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Join Task" ), TaskTypeMenu, self.MenuAssignToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" ) local JoinTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Join Task" ), TaskTypeMenu, self.MenuAssignToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
local MarkTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Mark Task on Map" ), TaskTypeMenu, self.MenuMarkToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" ) local MarkTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Mark Task Location on Map" ), TaskTypeMenu, self.MenuMarkToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
end end
return self return self
@ -787,7 +787,8 @@ function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime )
self.MenuAssigned = self.MenuAssigned or {} self.MenuAssigned = self.MenuAssigned or {}
self.MenuAssigned[TaskGroup] = MENU_GROUP:New( TaskGroup, string.format( "Assigned Task %s", TaskName ), MissionMenu ):SetTime( MenuTime ):SetTag( "Tasking" ) self.MenuAssigned[TaskGroup] = MENU_GROUP:New( TaskGroup, string.format( "Assigned Task %s", TaskName ), MissionMenu ):SetTime( MenuTime ):SetTag( "Tasking" )
local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task Status" ), self.MenuAssigned[TaskGroup], self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" ) local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task Status" ), self.MenuAssigned[TaskGroup], self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Abort Group from Task" ), self.MenuAssigned[TaskGroup], self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" ) local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Abort Task" ), self.MenuAssigned[TaskGroup], self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
local MarkMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Mark Task Location on Map" ), self.MenuAssigned[TaskGroup], self.MenuMarkToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
return self return self
end end

View File

@ -58,8 +58,8 @@ do -- TASK_A2G_DISPATCHER
self.Detection = Detection self.Detection = Detection
self.Mission = Mission self.Mission = Mission
self.Detection:FilterCategories( Unit.Category.GROUND_UNIT, Unit.Category.SHIP ) self.Detection:FilterCategories( { Unit.Category.GROUND_UNIT, Unit.Category.SHIP } )
self.Detection:FilterFriendliesCategory( Unit.Category.GROUND_UNIT ) self.Detection:FilterFriendlyCategories( { Unit.Category.GROUND_UNIT } )
self:AddTransition( "Started", "Assign", "Started" ) self:AddTransition( "Started", "Assign", "Started" )