mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
* 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:
commit
e7d48f335c
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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" )
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user