mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Messaging and Tactical Menu
This commit is contained in:
parent
fd1eb5f601
commit
94476e418e
@ -3104,18 +3104,26 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:F({"CAP Birth", Defender:GetName()})
|
self:F({"CAP Birth", Defender:GetName()})
|
||||||
--self:GetParent(self).onafterBirth( self, Defender, From, Event, To )
|
--self:GetParent(self).onafterBirth( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2A_DISPATCHER
|
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
|
|
||||||
if Squadron then
|
if Squadron then
|
||||||
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " airborne. Starting Patrol." )
|
||||||
Fsm:__Patrol( 2 ) -- Start Patrolling
|
Fsm:__Patrol( 2 ) -- Start Patrolling
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Fsm:onafterRTB( Defender, From, Event, To )
|
function Fsm:onafterRTB( Defender, From, Event, To )
|
||||||
|
|
||||||
self:F({"CAP RTB", Defender:GetName()})
|
self:F({"CAP RTB", Defender:GetName()})
|
||||||
|
|
||||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " returning." )
|
||||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -3291,11 +3299,13 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:F({"GCI Birth", Defender:GetName()})
|
self:F({"GCI Birth", Defender:GetName()})
|
||||||
--self:GetParent(self).onafterBirth( self, Defender, From, Event, To )
|
--self:GetParent(self).onafterBirth( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2A_DISPATCHER
|
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
local DefenderTarget = Dispatcher:GetDefenderTaskTarget( Defender )
|
local DefenderTarget = Dispatcher:GetDefenderTaskTarget( Defender )
|
||||||
|
|
||||||
if DefenderTarget then
|
if DefenderTarget then
|
||||||
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " airborne. Engaging target!" )
|
||||||
Fsm:__Engage( 2, DefenderTarget.Set ) -- Engage on the TargetSetUnit
|
Fsm:__Engage( 2, DefenderTarget.Set ) -- Engage on the TargetSetUnit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -3304,7 +3314,10 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:F({"GCI RTB", Defender:GetName()})
|
self:F({"GCI RTB", Defender:GetName()})
|
||||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " returning." )
|
||||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -3326,9 +3339,12 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:F({"GCI Home", Defender:GetName()})
|
self:F({"GCI Home", Defender:GetName()})
|
||||||
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
|
|
||||||
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " landing." )
|
||||||
|
|
||||||
if Action and Action == "Destroy" then
|
if Action and Action == "Destroy" then
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
Defender:Destroy()
|
Defender:Destroy()
|
||||||
@ -3412,6 +3428,91 @@ do -- AI_A2A_DISPATCHER
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Shows the tactical display.
|
||||||
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
|
function AI_A2A_DISPATCHER:ShowTacticalDisplay( Detection )
|
||||||
|
|
||||||
|
local AreaMsg = {}
|
||||||
|
local TaskMsg = {}
|
||||||
|
local ChangeMsg = {}
|
||||||
|
|
||||||
|
local TaskReport = REPORT:New()
|
||||||
|
|
||||||
|
local Report = REPORT:New( "Tactical Overviews" )
|
||||||
|
|
||||||
|
local DefenderGroupCount = 0
|
||||||
|
|
||||||
|
-- Now that all obsolete tasks are removed, loop through the detected targets.
|
||||||
|
for DetectedItemID, DetectedItem in pairs( Detection:GetDetectedItems() ) do
|
||||||
|
|
||||||
|
local DetectedItem = DetectedItem -- Functional.Detection#DETECTION_BASE.DetectedItem
|
||||||
|
local DetectedSet = DetectedItem.Set -- Core.Set#SET_UNIT
|
||||||
|
local DetectedCount = DetectedSet:Count()
|
||||||
|
local DetectedZone = DetectedItem.Zone
|
||||||
|
|
||||||
|
self:F( { "Target ID", DetectedItem.ItemID } )
|
||||||
|
DetectedSet:Flush( self )
|
||||||
|
|
||||||
|
local DetectedID = DetectedItem.ID
|
||||||
|
local DetectionIndex = DetectedItem.Index
|
||||||
|
local DetectedItemChanged = DetectedItem.Changed
|
||||||
|
|
||||||
|
-- Show tactical situation
|
||||||
|
Report:Add( string.format( "\n- Target %s (%s): (#%d) %s" , DetectedItem.ItemID, DetectedItem.Index, DetectedItem.Set:Count(), DetectedItem.Set:GetObjectNames() ) )
|
||||||
|
for Defender, DefenderTask in pairs( self:GetDefenderTasks() ) do
|
||||||
|
local Defender = Defender -- Wrapper.Group#GROUP
|
||||||
|
if DefenderTask.Target and DefenderTask.Target.Index == DetectedItem.Index then
|
||||||
|
if Defender and Defender:IsAlive() then
|
||||||
|
DefenderGroupCount = DefenderGroupCount + 1
|
||||||
|
local Fuel = Defender:GetFuelMin() * 100
|
||||||
|
local Damage = Defender:GetLife() / Defender:GetLife0() * 100
|
||||||
|
Report:Add( string.format( " - %s*%d/%d (%s - %s): (#%d) F: %3d, D:%3d - %s",
|
||||||
|
Defender:GetName(),
|
||||||
|
Defender:GetSize(),
|
||||||
|
Defender:GetInitialSize(),
|
||||||
|
DefenderTask.Type,
|
||||||
|
DefenderTask.Fsm:GetState(),
|
||||||
|
Defender:GetSize(),
|
||||||
|
Fuel,
|
||||||
|
Damage,
|
||||||
|
Defender:HasTask() == true and "Executing" or "Idle" ) )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Report:Add( "\n- No Targets:")
|
||||||
|
local TaskCount = 0
|
||||||
|
for Defender, DefenderTask in pairs( self:GetDefenderTasks() ) do
|
||||||
|
TaskCount = TaskCount + 1
|
||||||
|
local Defender = Defender -- Wrapper.Group#GROUP
|
||||||
|
if not DefenderTask.Target then
|
||||||
|
if Defender:IsAlive() then
|
||||||
|
local DefenderHasTask = Defender:HasTask()
|
||||||
|
local Fuel = Defender:GetFuelMin() * 100
|
||||||
|
local Damage = Defender:GetLife() / Defender:GetLife0() * 100
|
||||||
|
DefenderGroupCount = DefenderGroupCount + 1
|
||||||
|
Report:Add( string.format( " - %s*%d/%d (%s - %s): (#%d) F: %3d, D:%3d - %s",
|
||||||
|
Defender:GetName(),
|
||||||
|
Defender:GetSize(),
|
||||||
|
Defender:GetInitialSize(),
|
||||||
|
DefenderTask.Type,
|
||||||
|
DefenderTask.Fsm:GetState(),
|
||||||
|
Defender:GetSize(),
|
||||||
|
Fuel,
|
||||||
|
Damage,
|
||||||
|
Defender:HasTask() == true and "Executing" or "Idle" ) )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Report:Add( string.format( "\n- %d Tasks - %d Defender Groups", TaskCount, DefenderGroupCount ) )
|
||||||
|
|
||||||
|
self:F( Report:Text( "\n" ) )
|
||||||
|
trigger.action.outText( Report:Text( "\n" ), 25 )
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
--- Assigns A2A AI Tasks in relation to the detected items.
|
--- Assigns A2A AI Tasks in relation to the detected items.
|
||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
|
|||||||
@ -3521,15 +3521,15 @@ do -- AI_A2G_DISPATCHER
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Fsm:onafterPatrolRoute( Defender, From, Event, To, AttackSetUnit )
|
function Fsm:onafterPatrolRoute( Defender, From, Event, To )
|
||||||
self:F({"Defender PatrolRoute", Defender:GetName()})
|
self:F({"Defender PatrolRoute", Defender:GetName()})
|
||||||
self:GetParent(self).onafterPatrolRoute( self, Defender, From, Event, To, AttackSetUnit )
|
self:GetParent(self).onafterPatrolRoute( self, Defender, From, Event, To )
|
||||||
|
|
||||||
local DefenderName = Defender:GetCallsign()
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2G_DISPATCHER
|
local Dispatcher = self:GetDispatcher() -- #AI_A2G_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
if Squadron then
|
if Squadron then
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " returning." )
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " patrolling." )
|
||||||
end
|
end
|
||||||
|
|
||||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||||
@ -3627,7 +3627,7 @@ do -- AI_A2G_DISPATCHER
|
|||||||
self:F( { DefenderTarget = DefenderTarget } )
|
self:F( { DefenderTarget = DefenderTarget } )
|
||||||
|
|
||||||
if DefenderTarget then
|
if DefenderTarget then
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " airborne." )
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " airborne. Engaging!" )
|
||||||
Fsm:EngageRoute( DefenderTarget.Set ) -- Engage on the TargetSetUnit
|
Fsm:EngageRoute( DefenderTarget.Set ) -- Engage on the TargetSetUnit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -3644,7 +3644,7 @@ do -- AI_A2G_DISPATCHER
|
|||||||
local FirstUnit = AttackSetUnit:GetFirst()
|
local FirstUnit = AttackSetUnit:GetFirst()
|
||||||
local Coordinate = FirstUnit:GetCoordinate() -- Core.Point#COORDINATE
|
local Coordinate = FirstUnit:GetCoordinate() -- Core.Point#COORDINATE
|
||||||
|
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " on route, bearing " .. Coordinate:ToString( Defender ) )
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " on route to ground target at " .. Coordinate:ToStringA2G( Defender ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -3659,7 +3659,7 @@ do -- AI_A2G_DISPATCHER
|
|||||||
if FirstUnit then
|
if FirstUnit then
|
||||||
local Coordinate = FirstUnit:GetCoordinate()
|
local Coordinate = FirstUnit:GetCoordinate()
|
||||||
|
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " engaging target, bearing " .. Coordinate:ToString( Defender ) )
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " engaging ground target at " .. Coordinate:ToStringA2G( Defender ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -3669,7 +3669,7 @@ do -- AI_A2G_DISPATCHER
|
|||||||
local DefenderName = Defender:GetCallsign()
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2G_DISPATCHER
|
local Dispatcher = self:GetDispatcher() -- #AI_A2G_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " RTB." )
|
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " returning." )
|
||||||
|
|
||||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||||
|
|
||||||
@ -3684,7 +3684,7 @@ do -- AI_A2G_DISPATCHER
|
|||||||
local DefenderName = Defender:GetCallsign()
|
local DefenderName = Defender:GetCallsign()
|
||||||
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2G_DISPATCHER
|
local Dispatcher = Fsm:GetDispatcher() -- #AI_A2G_DISPATCHER
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " lost control." )
|
--Dispatcher:MessageToPlayers( "Squadron " .. Squadron.Name .. ", " .. DefenderName .. " lost control." )
|
||||||
|
|
||||||
if Defender:IsAboveRunway() then
|
if Defender:IsAboveRunway() then
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
|
|||||||
@ -222,6 +222,26 @@ do -- DETECTION MANAGER
|
|||||||
return self._ReportDisplayTime
|
return self._ReportDisplayTime
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Set a command center to communicate actions to the players reporting to the command center.
|
||||||
|
-- @param #DETECTION_MANAGER self
|
||||||
|
-- @param Tasking.CommandCenter#COMMANDCENTER CommandCenter The command center.
|
||||||
|
-- @return #DETECTION_MANGER self
|
||||||
|
function DETECTION_MANAGER:SetTacticalMenu( DispatcherMainMenuText, DispatcherMenuText )
|
||||||
|
|
||||||
|
local DispatcherMainMenu = MENU_MISSION:New( DispatcherMainMenuText, nil )
|
||||||
|
local DispatcherMenu = MENU_MISSION_COMMAND:New( DispatcherMenuText, DispatcherMainMenu,
|
||||||
|
function()
|
||||||
|
self:ShowTacticalDisplay( self.Detection )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Set a command center to communicate actions to the players reporting to the command center.
|
--- Set a command center to communicate actions to the players reporting to the command center.
|
||||||
-- @param #DETECTION_MANAGER self
|
-- @param #DETECTION_MANAGER self
|
||||||
-- @param Tasking.CommandCenter#COMMANDCENTER CommandCenter The command center.
|
-- @param Tasking.CommandCenter#COMMANDCENTER CommandCenter The command center.
|
||||||
@ -242,9 +262,12 @@ do -- DETECTION MANAGER
|
|||||||
|
|
||||||
self:F( { Message = Message } )
|
self:F( { Message = Message } )
|
||||||
|
|
||||||
|
if not self.PreviousMessage or self.PreviousMessage ~= Message then
|
||||||
|
self.PreviousMessage = Message
|
||||||
if self.CC then
|
if self.CC then
|
||||||
self.CC:MessageToCoalition( Message )
|
self.CC:MessageToCoalition( Message )
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user