This commit is contained in:
FlightControl_Master 2017-07-25 12:54:15 +02:00
parent 3924d2d8fc
commit c3ee9306f3
5 changed files with 131 additions and 67 deletions

View File

@ -155,7 +155,6 @@ do -- ACT_ACCOUNT_DEADS
-- @extends #ACT_ACCOUNT -- @extends #ACT_ACCOUNT
ACT_ACCOUNT_DEADS = { ACT_ACCOUNT_DEADS = {
ClassName = "ACT_ACCOUNT_DEADS", ClassName = "ACT_ACCOUNT_DEADS",
TargetSetUnit = nil,
} }
@ -163,13 +162,10 @@ do -- ACT_ACCOUNT_DEADS
-- @param #ACT_ACCOUNT_DEADS self -- @param #ACT_ACCOUNT_DEADS self
-- @param Set#SET_UNIT TargetSetUnit -- @param Set#SET_UNIT TargetSetUnit
-- @param #string TaskName -- @param #string TaskName
function ACT_ACCOUNT_DEADS:New( TargetSetUnit, TaskName ) function ACT_ACCOUNT_DEADS:New()
-- Inherits from BASE -- Inherits from BASE
local self = BASE:Inherit( self, ACT_ACCOUNT:New() ) -- #ACT_ACCOUNT_DEADS local self = BASE:Inherit( self, ACT_ACCOUNT:New() ) -- #ACT_ACCOUNT_DEADS
self.TargetSetUnit = TargetSetUnit
self.TaskName = TaskName
self.DisplayInterval = 30 self.DisplayInterval = 30
self.DisplayCount = 30 self.DisplayCount = 30
self.DisplayMessage = true self.DisplayMessage = true
@ -181,8 +177,8 @@ do -- ACT_ACCOUNT_DEADS
function ACT_ACCOUNT_DEADS:Init( FsmAccount ) function ACT_ACCOUNT_DEADS:Init( FsmAccount )
self.TargetSetUnit = FsmAccount.TargetSetUnit self.Task = self:GetTask()
self.TaskName = FsmAccount.TaskName self.TaskName = self.Task:GetName()
end end
--- Process Events --- Process Events
@ -196,7 +192,7 @@ do -- ACT_ACCOUNT_DEADS
function ACT_ACCOUNT_DEADS:onenterReport( ProcessUnit, Task, From, Event, To ) function ACT_ACCOUNT_DEADS:onenterReport( ProcessUnit, Task, From, Event, To )
self:E( { ProcessUnit, From, Event, To } ) self:E( { ProcessUnit, From, Event, To } )
self:Message( "Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:GetUnitTypesText() .. " targets left to be destroyed." ) self:Message( "Your group with assigned " .. self.TaskName .. " task has " .. Task.TargetSetUnit:GetUnitTypesText() .. " targets left to be destroyed." )
end end
@ -211,7 +207,7 @@ do -- ACT_ACCOUNT_DEADS
function ACT_ACCOUNT_DEADS:onafterEvent( ProcessClient, Task, From, Event, To, EventData ) function ACT_ACCOUNT_DEADS:onafterEvent( ProcessClient, Task, From, Event, To, EventData )
self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } ) self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } )
if self.TargetSetUnit:FindUnit( EventData.IniUnitName ) then if Task.TargetSetUnit:FindUnit( EventData.IniUnitName ) then
local PlayerName = ProcessClient:GetPlayerName() local PlayerName = ProcessClient:GetPlayerName()
local PlayerHit = self.PlayerHits and self.PlayerHits[EventData.IniUnitName] local PlayerHit = self.PlayerHits and self.PlayerHits[EventData.IniUnitName]
if PlayerHit == PlayerName then if PlayerHit == PlayerName then
@ -235,13 +231,13 @@ do -- ACT_ACCOUNT_DEADS
local TaskGroup = ProcessClient:GetGroup() local TaskGroup = ProcessClient:GetGroup()
self.TargetSetUnit:Remove( EventData.IniUnitName ) Task.TargetSetUnit:Remove( EventData.IniUnitName )
self:Message( "You have destroyed a target. Your group assigned with task " .. self.TaskName .. " has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." ) self:Message( "You have destroyed a target.\nYour group assigned with task " .. self.TaskName .. " has\n" .. Task.TargetSetUnit:Count() .. " targets ( " .. Task.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." )
local PlayerName = ProcessClient:GetPlayerName() local PlayerName = ProcessClient:GetPlayerName()
Task:AddProgress( PlayerName, "Destroyed " .. EventData.IniTypeName, timer.getTime(), 1 ) Task:AddProgress( PlayerName, "Destroyed " .. EventData.IniTypeName, timer.getTime(), 1 )
if self.TargetSetUnit:Count() > 0 then if Task.TargetSetUnit:Count() > 0 then
self:__More( 1 ) self:__More( 1 )
else else
self:__NoMore( 1 ) self:__NoMore( 1 )
@ -260,10 +256,10 @@ do -- ACT_ACCOUNT_DEADS
self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } ) self:T( { ProcessClient:GetName(), Task:GetName(), From, Event, To, EventData } )
local TaskGroup = ProcessClient:GetGroup() local TaskGroup = ProcessClient:GetGroup()
self.TargetSetUnit:Remove( EventData.IniUnitName ) Task.TargetSetUnit:Remove( EventData.IniUnitName )
self:Message( "One of the task targets has been destroyed. Your group assigned with task " .. self.TaskName .. " has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." ) self:Message( "One of the task targets has been destroyed.\nYour group assigned with task " .. self.TaskName .. " has\n" .. Task.TargetSetUnit:Count() .. " targets ( " .. Task.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." )
if self.TargetSetUnit:Count() > 0 then if Task.TargetSetUnit:Count() > 0 then
self:__More( 1 ) self:__More( 1 )
else else
self:__NoMore( 1 ) self:__NoMore( 1 )

View File

@ -302,7 +302,7 @@ do -- DETECTION_BASE
-- @field Core.Zone#ZONE_UNIT Zone -- The Zone of the detected area. -- @field Core.Zone#ZONE_UNIT Zone -- The Zone of the detected area.
-- @field #boolean Changed Documents if the detected area has changes. -- @field #boolean Changed Documents if the detected area has changes.
-- @field #table Changes A list of the changes reported on the detected area. (It is up to the user of the detected area to consume those changes). -- @field #table Changes A list of the changes reported on the detected area. (It is up to the user of the detected area to consume those changes).
-- @field #number ItemID -- The identifier of the detected area. -- @field #number ID -- The identifier of the detected area.
-- @field #boolean FriendliesNearBy Indicates if there are friendlies within the detected area. -- @field #boolean FriendliesNearBy Indicates if there are friendlies within the detected area.
-- @field Wrapper.Unit#UNIT NearestFAC The nearest FAC near the Area. -- @field Wrapper.Unit#UNIT NearestFAC The nearest FAC near the Area.
@ -1073,14 +1073,14 @@ do -- DETECTION_BASE
function DETECTION_BASE:AddChangeItem( DetectedItem, ChangeCode, ItemUnitType ) function DETECTION_BASE:AddChangeItem( DetectedItem, ChangeCode, ItemUnitType )
DetectedItem.Changed = true DetectedItem.Changed = true
local ItemID = DetectedItem.ItemID local ID = DetectedItem.ID
DetectedItem.Changes = DetectedItem.Changes or {} DetectedItem.Changes = DetectedItem.Changes or {}
DetectedItem.Changes[ChangeCode] = DetectedItem.Changes[ChangeCode] or {} DetectedItem.Changes[ChangeCode] = DetectedItem.Changes[ChangeCode] or {}
DetectedItem.Changes[ChangeCode].ItemID = ItemID DetectedItem.Changes[ChangeCode].ID = ID
DetectedItem.Changes[ChangeCode].ItemUnitType = ItemUnitType DetectedItem.Changes[ChangeCode].ItemUnitType = ItemUnitType
self:T( { "Change on Detection Item:", DetectedItem.ItemID, ChangeCode, ItemUnitType } ) self:T( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ItemUnitType } )
return self return self
end end
@ -1095,15 +1095,15 @@ do -- DETECTION_BASE
function DETECTION_BASE:AddChangeUnit( DetectedItem, ChangeCode, ChangeUnitType ) function DETECTION_BASE:AddChangeUnit( DetectedItem, ChangeCode, ChangeUnitType )
DetectedItem.Changed = true DetectedItem.Changed = true
local ItemID = DetectedItem.ItemID local ID = DetectedItem.ID
DetectedItem.Changes = DetectedItem.Changes or {} DetectedItem.Changes = DetectedItem.Changes or {}
DetectedItem.Changes[ChangeCode] = DetectedItem.Changes[ChangeCode] or {} DetectedItem.Changes[ChangeCode] = DetectedItem.Changes[ChangeCode] or {}
DetectedItem.Changes[ChangeCode][ChangeUnitType] = DetectedItem.Changes[ChangeCode][ChangeUnitType] or 0 DetectedItem.Changes[ChangeCode][ChangeUnitType] = DetectedItem.Changes[ChangeCode][ChangeUnitType] or 0
DetectedItem.Changes[ChangeCode][ChangeUnitType] = DetectedItem.Changes[ChangeCode][ChangeUnitType] + 1 DetectedItem.Changes[ChangeCode][ChangeUnitType] = DetectedItem.Changes[ChangeCode][ChangeUnitType] + 1
DetectedItem.Changes[ChangeCode].ItemID = ItemID DetectedItem.Changes[ChangeCode].ID = ID
self:T( { "Change on Detection Item:", DetectedItem.ItemID, ChangeCode, ChangeUnitType } ) self:T( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ChangeUnitType } )
return self return self
end end
@ -1628,7 +1628,7 @@ do -- DETECTION_UNITS
if ChangeCode == "AU" then if ChangeCode == "AU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
@ -1638,7 +1638,7 @@ do -- DETECTION_UNITS
if ChangeCode == "RU" then if ChangeCode == "RU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
@ -1915,7 +1915,7 @@ do -- DETECTION_TYPES
if ChangeCode == "AU" then if ChangeCode == "AU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
@ -1925,7 +1925,7 @@ do -- DETECTION_TYPES
if ChangeCode == "RU" then if ChangeCode == "RU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
@ -2376,39 +2376,39 @@ do -- DETECTION_AREAS
for ChangeCode, ChangeData in pairs( DetectedItem.Changes ) do for ChangeCode, ChangeData in pairs( DetectedItem.Changes ) do
if ChangeCode == "AA" then if ChangeCode == "AA" then
MT[#MT+1] = "Detected new area " .. ChangeData.ItemID .. ". The center target is a " .. ChangeData.ItemUnitType .. "." MT[#MT+1] = "Detected new area " .. ChangeData.ID .. ". The center target is a " .. ChangeData.ItemUnitType .. "."
end end
if ChangeCode == "RAU" then if ChangeCode == "RAU" then
MT[#MT+1] = "Changed area " .. ChangeData.ItemID .. ". Removed the center target." MT[#MT+1] = "Changed area " .. ChangeData.ID .. ". Removed the center target."
end end
if ChangeCode == "AAU" then if ChangeCode == "AAU" then
MT[#MT+1] = "Changed area " .. ChangeData.ItemID .. ". The new center target is a " .. ChangeData.ItemUnitType .. "." MT[#MT+1] = "Changed area " .. ChangeData.ID .. ". The new center target is a " .. ChangeData.ItemUnitType .. "."
end end
if ChangeCode == "RA" then if ChangeCode == "RA" then
MT[#MT+1] = "Removed old area " .. ChangeData.ItemID .. ". No more targets in this area." MT[#MT+1] = "Removed old area " .. ChangeData.ID .. ". No more targets in this area."
end end
if ChangeCode == "AU" then if ChangeCode == "AU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
MT[#MT+1] = "Detected for area " .. ChangeData.ItemID .. " new target(s) " .. table.concat( MTUT, ", " ) .. "." MT[#MT+1] = "Detected for area " .. ChangeData.ID .. " new target(s) " .. table.concat( MTUT, ", " ) .. "."
end end
if ChangeCode == "RU" then if ChangeCode == "RU" then
local MTUT = {} local MTUT = {}
for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do for ChangeUnitType, ChangeUnitCount in pairs( ChangeData ) do
if ChangeUnitType ~= "ItemID" then if ChangeUnitType ~= "ID" then
MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType MTUT[#MTUT+1] = ChangeUnitCount .. " of " .. ChangeUnitType
end end
end end
MT[#MT+1] = "Removed for area " .. ChangeData.ItemID .. " invisible or destroyed target(s) " .. table.concat( MTUT, ", " ) .. "." MT[#MT+1] = "Removed for area " .. ChangeData.ID .. " invisible or destroyed target(s) " .. table.concat( MTUT, ", " ) .. "."
end end
end end
@ -2559,7 +2559,7 @@ do -- DETECTION_AREAS
local DetectedItem = DetectedItemData -- #DETECTION_BASE.DetectedItem local DetectedItem = DetectedItemData -- #DETECTION_BASE.DetectedItem
if DetectedItem then if DetectedItem then
self:T( "Detection Area #" .. DetectedItem.ItemID ) self:T( "Detection Area #" .. DetectedItem.ID )
local DetectedSet = DetectedItem.Set local DetectedSet = DetectedItem.Set
if not self:IsDetectedObjectIdentified( DetectedObject ) and DetectedUnit:IsInZone( DetectedItem.Zone ) then if not self:IsDetectedObjectIdentified( DetectedObject ) and DetectedUnit:IsInZone( DetectedItem.Zone ) then
self:IdentifyDetectedObject( DetectedObject ) self:IdentifyDetectedObject( DetectedObject )
@ -2607,7 +2607,7 @@ do -- DETECTION_AREAS
--- @param Wrapper.Unit#UNIT DetectedUnit --- @param Wrapper.Unit#UNIT DetectedUnit
function( DetectedUnit ) function( DetectedUnit )
if DetectedUnit:IsAlive() then if DetectedUnit:IsAlive() then
--self:T( "Detected Set #" .. DetectedItem.ItemID .. ":" .. DetectedUnit:GetName() ) --self:T( "Detected Set #" .. DetectedItem.ID .. ":" .. DetectedUnit:GetName() )
if DETECTION_AREAS._FlareDetectedUnits or self._FlareDetectedUnits then if DETECTION_AREAS._FlareDetectedUnits or self._FlareDetectedUnits then
DetectedUnit:FlareGreen() DetectedUnit:FlareGreen()
end end

View File

@ -75,7 +75,7 @@ do -- TASK_A2A
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" ) Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" ) Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), {} ) Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New(), {} )
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" ) Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )

View File

@ -75,7 +75,7 @@ do -- TASK_A2G
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" ) Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" ) Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), {} ) Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New(), {} )
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" ) Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )
@ -165,6 +165,15 @@ do -- TASK_A2G
return self return self
end end
--- @param #TASK_A2G self
-- @param Core.Set#SET_UNIT TargetSetUnit The set of targets.
function TASK_A2G:SetTargetSetUnit( TargetSetUnit )
self.TargetSetUnit = TargetSetUnit
end
--- @param #TASK_A2G self --- @param #TASK_A2G self
function TASK_A2G:GetPlannedMenuText() function TASK_A2G:GetPlannedMenuText()
@ -319,17 +328,23 @@ do -- TASK_A2G_SEAD
"Execute a Suppression of Enemy Air Defenses.\n" "Execute a Suppression of Enemy Air Defenses.\n"
) )
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate() self:UpdateTaskInfo()
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
self:SetInfo( "Threat", "[" .. string.rep( "", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
local DetectedItemsCount = TargetSetUnit:Count()
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
return self return self
end end
function TASK_A2G_SEAD:UpdateTaskInfo()
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
self:SetInfo( "Threat", "[" .. string.rep( "", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
local DetectedItemsCount = self.TargetSetUnit:Count()
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
end
function TASK_A2G_SEAD:ReportOrder( ReportGroup ) function TASK_A2G_SEAD:ReportOrder( ReportGroup )
local Coordinate = self.TaskInfo.Coordinates.TaskInfoText local Coordinate = self.TaskInfo.Coordinates.TaskInfoText
local Distance = ReportGroup:GetCoordinate():Get2DDistance( Coordinate ) local Distance = ReportGroup:GetCoordinate():Get2DDistance( Coordinate )
@ -440,16 +455,22 @@ do -- TASK_A2G_BAI
"Execute a Battlefield Air Interdiction of a group of enemy targets.\n" "Execute a Battlefield Air Interdiction of a group of enemy targets.\n"
) )
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate() self:UpdateTaskInfo()
return self
end
function TASK_A2G_BAI:UpdateTaskInfo()
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
self:SetInfo( "Coordinates", TargetCoordinate, 10 ) self:SetInfo( "Coordinates", TargetCoordinate, 10 )
self:SetInfo( "Threat", "[" .. string.rep( "", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 ) self:SetInfo( "Threat", "[" .. string.rep( "", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
local DetectedItemsCount = TargetSetUnit:Count() local DetectedItemsCount = self.TargetSetUnit:Count()
local DetectedItemsTypes = TargetSetUnit:GetTypeNames() local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 ) self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
return self end
end
function TASK_A2G_BAI:ReportOrder( ReportGroup ) function TASK_A2G_BAI:ReportOrder( ReportGroup )
@ -562,16 +583,22 @@ do -- TASK_A2G_CAS
"Beware of friendlies at the vicinity!\n" "Beware of friendlies at the vicinity!\n"
) )
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate() self:UpdateTaskInfo()
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
self:SetInfo( "Threat", "[" .. string.rep( "", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
local DetectedItemsCount = TargetSetUnit:Count()
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
return self return self
end end
function TASK_A2G_CAS:UpdateTaskInfo()
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
self:SetInfo( "Threat", "[" .. string.rep( "", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
local DetectedItemsCount = self.TargetSetUnit:Count()
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
end
function TASK_A2G_CAS:ReportOrder( ReportGroup ) function TASK_A2G_CAS:ReportOrder( ReportGroup )
local Coordinate = self.TaskInfo.Coordinates.TaskInfoText local Coordinate = self.TaskInfo.Coordinates.TaskInfoText

View File

@ -81,7 +81,7 @@ do -- TASK_A2G_DISPATCHER
--- Creates a SEAD task when there are targets for it. --- Creates a SEAD task when there are targets for it.
-- @param #TASK_A2G_DISPATCHER self -- @param #TASK_A2G_DISPATCHER self
-- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem -- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem
-- @return Set#SET_UNIT TargetSetUnit: The target set of units. -- @return Core.Set#SET_UNIT TargetSetUnit: The target set of units.
-- @return #nil If there are no targets to be set. -- @return #nil If there are no targets to be set.
function TASK_A2G_DISPATCHER:EvaluateSEAD( DetectedItem ) function TASK_A2G_DISPATCHER:EvaluateSEAD( DetectedItem )
self:F( { DetectedItem.ItemID } ) self:F( { DetectedItem.ItemID } )
@ -109,7 +109,8 @@ do -- TASK_A2G_DISPATCHER
--- Creates a CAS task when there are targets for it. --- Creates a CAS task when there are targets for it.
-- @param #TASK_A2G_DISPATCHER self -- @param #TASK_A2G_DISPATCHER self
-- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem -- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem
-- @return Tasking.Task#TASK -- @return Core.Set#SET_UNIT TargetSetUnit: The target set of units.
-- @return #nil If there are no targets to be set.
function TASK_A2G_DISPATCHER:EvaluateCAS( DetectedItem ) function TASK_A2G_DISPATCHER:EvaluateCAS( DetectedItem )
self:F( { DetectedItem.ItemID } ) self:F( { DetectedItem.ItemID } )
@ -137,7 +138,8 @@ do -- TASK_A2G_DISPATCHER
--- Creates a BAI task when there are targets for it. --- Creates a BAI task when there are targets for it.
-- @param #TASK_A2G_DISPATCHER self -- @param #TASK_A2G_DISPATCHER self
-- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem -- @param Functional.Detection#DETECTION_AREAS.DetectedItem DetectedItem
-- @return Tasking.Task#TASK -- @return Core.Set#SET_UNIT TargetSetUnit: The target set of units.
-- @return #nil If there are no targets to be set.
function TASK_A2G_DISPATCHER:EvaluateBAI( DetectedItem, FriendlyCoalition ) function TASK_A2G_DISPATCHER:EvaluateBAI( DetectedItem, FriendlyCoalition )
self:F( { DetectedItem.ItemID } ) self:F( { DetectedItem.ItemID } )
@ -230,7 +232,8 @@ do -- TASK_A2G_DISPATCHER
local TaskIndex = DetectedItem.Index local TaskIndex = DetectedItem.Index
local DetectedItemChanged = DetectedItem.Changed local DetectedItemChanged = DetectedItem.Changed
local Task = self.Tasks[TaskIndex] local Task = self.Tasks[TaskIndex] -- Tasking.Task_A2G#TASK_A2A
Task = self:EvaluateRemoveTask( Mission, Task, TaskIndex, DetectedItemChanged ) -- Task will be removed if it is planned and changed. Task = self:EvaluateRemoveTask( Mission, Task, TaskIndex, DetectedItemChanged ) -- Task will be removed if it is planned and changed.
-- Evaluate SEAD -- Evaluate SEAD
@ -266,7 +269,46 @@ do -- TASK_A2G_DISPATCHER
else else
self:E("This should not happen") self:E("This should not happen")
end end
else
-- If there is a Task and the task was assigned, then we check if the task was changed ... If it was, we need to reevaluate the targets.
if Task:IsStateAssigned() then
if DetectedItemChanged == true then -- The detection has changed, thus a new TargetSet is to be evaluated and set
local TargetsReport = REPORT:New()
if Task:IsInstanceOf( TASK_A2G_SEAD ) then
local TargetSetUnit = self:EvaluateSEAD( DetectedItem ) -- Returns a SetUnit if there are targets to be SEADed...
if TargetSetUnit then
Task:SetTargetSetUnit( TargetSetUnit )
Task:UpdateTaskInfo()
TargetsReport:Add( Detection:GetChangeText( DetectedItem ) )
end
else
if Task:IsInstanceOf( TASK_A2G_CAS ) then
local TargetSetUnit = self:EvaluateCAS( DetectedItem ) -- Returns a SetUnit if there are targets to be CASed...
if TargetSetUnit then
Task:SetTargetSetUnit( TargetSetUnit )
Task:UpdateTaskInfo()
TargetsReport:Add( Detection:GetChangeText( DetectedItem ) )
end
else
if Task:IsInstanceOf( TASK_A2G_BAI ) then
local TargetSetUnit = self:EvaluateBAI( DetectedItem ) -- Returns a SetUnit if there are targets to be BAIed...
if TargetSetUnit then
Task:SetTargetSetUnit( TargetSetUnit )
Task:UpdateTaskInfo()
TargetsReport:Add( Detection:GetChangeText( DetectedItem ) )
end
end
end
end
-- Now we send to each group the changes.
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
local TargetsText = TargetsReport:Text(", ")
if ( Mission:IsGroupAssigned(TaskGroup) ) and TargetsText ~= "" then
Mission:GetCommandCenter():MessageToGroup( string.format( "Task %s has change of targets:\n %s", Task:GetName(), TargetsText ), TaskGroup )
end
end
end
end
end end
@ -278,7 +320,6 @@ do -- TASK_A2G_DISPATCHER
Mission:GetCommandCenter():SetMenu() Mission:GetCommandCenter():SetMenu()
local TaskText = TaskReport:Text(", ") local TaskText = TaskReport:Text(", ")
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
if ( not Mission:IsGroupAssigned(TaskGroup) ) and TaskText ~= "" then if ( not Mission:IsGroupAssigned(TaskGroup) ) and TaskText ~= "" then
Mission:GetCommandCenter():MessageToGroup( string.format( "%s has tasks %s. Subscribe to a task using the radio menu.", Mission:GetName(), TaskText ), TaskGroup ) Mission:GetCommandCenter():MessageToGroup( string.format( "%s has tasks %s. Subscribe to a task using the radio menu.", Mission:GetName(), TaskText ), TaskGroup )