mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Updates for visibility of squadrons before start.
This commit is contained in:
@@ -502,9 +502,10 @@ function AI_A2A:onafterStatus()
|
|||||||
|
|
||||||
if RTB == true then
|
if RTB == true then
|
||||||
self:__RTB( 0.5 )
|
self:__RTB( 0.5 )
|
||||||
|
else
|
||||||
|
self:__Status( 10 )
|
||||||
end
|
end
|
||||||
|
|
||||||
self:__Status( 10 )
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1030,26 +1030,29 @@ do -- AI_A2A_DISPATCHER
|
|||||||
for SquadronName, DefenderSquadron in pairs( self.DefenderSquadrons ) do
|
for SquadronName, DefenderSquadron in pairs( self.DefenderSquadrons ) do
|
||||||
DefenderSquadron.Resource = {}
|
DefenderSquadron.Resource = {}
|
||||||
for Resource = 1, DefenderSquadron.ResourceCount do
|
for Resource = 1, DefenderSquadron.ResourceCount do
|
||||||
local TemplateID = math.random( 1, #DefenderSquadron.Spawn )
|
self:ParkDefender( DefenderSquadron )
|
||||||
local Spawn = DefenderSquadron.Spawn[ TemplateID ] -- Core.Spawn#SPAWN
|
|
||||||
Spawn:InitGrouping( 1 )
|
|
||||||
local SpawnGroup
|
|
||||||
if DefenderSquadron.Uncontrolled then
|
|
||||||
SpawnGroup = Spawn:SpawnAtAirbase( DefenderSquadron.Airbase, SPAWN.Takeoff.Cold )
|
|
||||||
else
|
|
||||||
Spawn:InitLateActivated( true )
|
|
||||||
SpawnGroup = Spawn:SpawnAtAirbase( DefenderSquadron.Airbase, SPAWN.Takeoff.Cold )
|
|
||||||
end
|
|
||||||
local GroupName = SpawnGroup:GetName()
|
|
||||||
DefenderSquadron.Resources = DefenderSquadron.Resources or {}
|
|
||||||
DefenderSquadron.Resources[TemplateID] = DefenderSquadron.Resources[TemplateID] or {}
|
|
||||||
DefenderSquadron.Resources[TemplateID][GroupName] = {}
|
|
||||||
DefenderSquadron.Resources[TemplateID][GroupName] = SpawnGroup
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- @param #AI_A2A_DISPATCHER self
|
||||||
|
function AI_A2A_DISPATCHER:ParkDefender( DefenderSquadron )
|
||||||
|
local TemplateID = math.random( 1, #DefenderSquadron.Spawn )
|
||||||
|
local Spawn = DefenderSquadron.Spawn[ TemplateID ] -- Core.Spawn#SPAWN
|
||||||
|
Spawn:InitGrouping( 1 )
|
||||||
|
local SpawnGroup
|
||||||
|
if self:IsSquadronVisible( DefenderSquadron.Name ) then
|
||||||
|
SpawnGroup = Spawn:SpawnAtAirbase( DefenderSquadron.Airbase, SPAWN.Takeoff.Cold )
|
||||||
|
local GroupName = SpawnGroup:GetName()
|
||||||
|
DefenderSquadron.Resources = DefenderSquadron.Resources or {}
|
||||||
|
DefenderSquadron.Resources[TemplateID] = DefenderSquadron.Resources[TemplateID] or {}
|
||||||
|
DefenderSquadron.Resources[TemplateID][GroupName] = {}
|
||||||
|
DefenderSquadron.Resources[TemplateID][GroupName] = SpawnGroup
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- @param #AI_A2A_DISPATCHER self
|
--- @param #AI_A2A_DISPATCHER self
|
||||||
-- @param Core.Event#EVENTDATA EventData
|
-- @param Core.Event#EVENTDATA EventData
|
||||||
function AI_A2A_DISPATCHER:OnEventBaseCaptured( EventData )
|
function AI_A2A_DISPATCHER:OnEventBaseCaptured( EventData )
|
||||||
@@ -1090,6 +1093,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:RemoveDefenderFromSquadron( Squadron, Defender )
|
self:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
end
|
end
|
||||||
DefenderUnit:Destroy()
|
DefenderUnit:Destroy()
|
||||||
|
self:ParkDefender( Squadron, Defender )
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if DefenderUnit:GetLife() ~= DefenderUnit:GetLife0() then
|
if DefenderUnit:GetLife() ~= DefenderUnit:GetLife0() then
|
||||||
@@ -1116,6 +1120,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:RemoveDefenderFromSquadron( Squadron, Defender )
|
self:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
end
|
end
|
||||||
DefenderUnit:Destroy()
|
DefenderUnit:Destroy()
|
||||||
|
self:ParkDefender( Squadron, Defender )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1607,6 +1612,29 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Check if the Squadron is visible before startup of the dispatcher.
|
||||||
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
|
-- @param #string SquadronName The squadron name.
|
||||||
|
-- @return #bool true if visible.
|
||||||
|
-- @usage
|
||||||
|
--
|
||||||
|
-- -- Set the Squadron visible before startup of dispatcher.
|
||||||
|
-- local IsVisible = A2ADispatcher:IsSquadronVisible( "Mineralnye" )
|
||||||
|
--
|
||||||
|
function AI_A2A_DISPATCHER:IsSquadronVisible( SquadronName )
|
||||||
|
|
||||||
|
self.DefenderSquadrons[SquadronName] = self.DefenderSquadrons[SquadronName] or {}
|
||||||
|
|
||||||
|
local DefenderSquadron = self:GetSquadron( SquadronName )
|
||||||
|
|
||||||
|
if DefenderSquadron then
|
||||||
|
return DefenderSquadron.Uncontrolled == true
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
--- Set a CAP for a Squadron.
|
--- Set a CAP for a Squadron.
|
||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
-- @param #string SquadronName The squadron name.
|
-- @param #string SquadronName The squadron name.
|
||||||
@@ -2705,57 +2733,75 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
---
|
---
|
||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
function AI_A2A_DISPATCHER:ResourceActivate( DefenderSquadron )
|
function AI_A2A_DISPATCHER:ResourceActivate( DefenderSquadron, DefendersNeeded )
|
||||||
|
|
||||||
local SquadronName = DefenderSquadron.Name
|
local SquadronName = DefenderSquadron.Name
|
||||||
|
DefendersNeeded = DefendersNeeded or 4
|
||||||
-- Here we CAP the new planes.
|
|
||||||
-- The Resources table is filled in advance.
|
|
||||||
local TemplateID = math.random( 1, #DefenderSquadron.Spawn ) -- Choose the template.
|
|
||||||
|
|
||||||
-- We determine the grouping based on the parameters set.
|
|
||||||
local DefenderGrouping = DefenderSquadron.Grouping or self.DefenderDefault.Grouping
|
local DefenderGrouping = DefenderSquadron.Grouping or self.DefenderDefault.Grouping
|
||||||
self:F( { DefenderGrouping = DefenderGrouping } )
|
DefenderGrouping = ( DefenderGrouping < DefendersNeeded ) and DefenderGrouping or DefendersNeeded
|
||||||
--Spawn:InitGrouping( DefenderGrouping )
|
|
||||||
|
|
||||||
-- New we will form the group to spawn in.
|
if self:IsSquadronVisible( SquadronName ) then
|
||||||
-- We search for the first free resource matching the template.
|
|
||||||
local DefenderUnitIndex = 1
|
-- Here we CAP the new planes.
|
||||||
local DefenderCAPTemplate = nil
|
-- The Resources table is filled in advance.
|
||||||
local DefenderName = nil
|
local TemplateID = math.random( 1, #DefenderSquadron.Spawn ) -- Choose the template.
|
||||||
for GroupName, DefenderGroup in pairs( DefenderSquadron.Resources[TemplateID] or {} ) do
|
|
||||||
self:F( { GroupName = GroupName } )
|
-- We determine the grouping based on the parameters set.
|
||||||
local DefenderTemplate = _DATABASE:GetGroupTemplate( GroupName )
|
self:F( { DefenderGrouping = DefenderGrouping } )
|
||||||
if DefenderUnitIndex == 1 then
|
|
||||||
DefenderCAPTemplate = UTILS.DeepCopy( DefenderTemplate )
|
-- New we will form the group to spawn in.
|
||||||
self.DefenderCAPIndex = self.DefenderCAPIndex + 1
|
-- We search for the first free resource matching the template.
|
||||||
DefenderCAPTemplate.name = SquadronName .. "#" .. self.DefenderCAPIndex .. "#" .. GroupName
|
local DefenderUnitIndex = 1
|
||||||
DefenderName = DefenderCAPTemplate.name
|
local DefenderCAPTemplate = nil
|
||||||
else
|
local DefenderName = nil
|
||||||
-- Add the unit in the template to the DefenderCAPTemplate.
|
for GroupName, DefenderGroup in pairs( DefenderSquadron.Resources[TemplateID] or {} ) do
|
||||||
local DefenderUnitTemplate = DefenderTemplate.units[1]
|
self:F( { GroupName = GroupName } )
|
||||||
DefenderCAPTemplate.units[DefenderUnitIndex] = DefenderUnitTemplate
|
local DefenderTemplate = _DATABASE:GetGroupTemplate( GroupName )
|
||||||
|
if DefenderUnitIndex == 1 then
|
||||||
|
DefenderCAPTemplate = UTILS.DeepCopy( DefenderTemplate )
|
||||||
|
self.DefenderCAPIndex = self.DefenderCAPIndex + 1
|
||||||
|
DefenderCAPTemplate.name = SquadronName .. "#" .. self.DefenderCAPIndex .. "#" .. GroupName
|
||||||
|
DefenderName = DefenderCAPTemplate.name
|
||||||
|
else
|
||||||
|
-- Add the unit in the template to the DefenderCAPTemplate.
|
||||||
|
local DefenderUnitTemplate = DefenderTemplate.units[1]
|
||||||
|
DefenderCAPTemplate.units[DefenderUnitIndex] = DefenderUnitTemplate
|
||||||
|
end
|
||||||
|
DefenderUnitIndex = DefenderUnitIndex + 1
|
||||||
|
DefenderSquadron.Resources[TemplateID][GroupName] = nil
|
||||||
|
if DefenderUnitIndex > DefenderGrouping then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
if DefenderCAPTemplate then
|
||||||
|
local TakeoffMethod = self:GetSquadronTakeoff( SquadronName )
|
||||||
|
local SpawnGroup = GROUP:Register( DefenderName )
|
||||||
|
DefenderCAPTemplate.lateActivation = nil
|
||||||
|
DefenderCAPTemplate.uncontrolled = nil
|
||||||
|
local Takeoff = self:GetSquadronTakeoff( SquadronName )
|
||||||
|
DefenderCAPTemplate.route.points[1].type = GROUPTEMPLATE.Takeoff[Takeoff][1] -- type
|
||||||
|
DefenderCAPTemplate.route.points[1].action = GROUPTEMPLATE.Takeoff[Takeoff][2] -- action
|
||||||
|
local Defender = _DATABASE:Spawn( DefenderCAPTemplate )
|
||||||
|
|
||||||
|
self:AddDefenderToSquadron( DefenderSquadron, Defender, DefenderGrouping )
|
||||||
|
return Defender, DefenderGrouping
|
||||||
end
|
end
|
||||||
DefenderUnitIndex = DefenderUnitIndex + 1
|
else
|
||||||
DefenderSquadron.Resources[TemplateID][GroupName] = nil
|
local Spawn = DefenderSquadron.Spawn[ math.random( 1, #DefenderSquadron.Spawn ) ] -- Core.Spawn#SPAWN
|
||||||
if DefenderUnitIndex > DefenderGrouping then
|
if DefenderGrouping then
|
||||||
break
|
Spawn:InitGrouping( DefenderGrouping )
|
||||||
|
else
|
||||||
|
Spawn:InitGrouping()
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
local TakeoffMethod = self:GetSquadronTakeoff( SquadronName )
|
||||||
|
local Defender = Spawn:SpawnAtAirbase( DefenderSquadron.Airbase, TakeoffMethod, DefenderSquadron.TakeoffAltitude or self.DefenderDefault.TakeoffAltitude ) -- Wrapper.Group#GROUP
|
||||||
local TakeoffMethod = self:GetSquadronTakeoff( SquadronName )
|
return Defender, DefenderGrouping
|
||||||
local SpawnGroup = GROUP:Register( DefenderName )
|
end
|
||||||
DefenderCAPTemplate.lateActivation = nil
|
|
||||||
DefenderCAPTemplate.uncontrolled = nil
|
|
||||||
local Takeoff = self:GetSquadronTakeoff( SquadronName )
|
|
||||||
DefenderCAPTemplate.route.points[1].type = GROUPTEMPLATE.Takeoff[Takeoff][1] -- type
|
|
||||||
DefenderCAPTemplate.route.points[1].action = GROUPTEMPLATE.Takeoff[Takeoff][2] -- action
|
|
||||||
local Defender = _DATABASE:Spawn( DefenderCAPTemplate )
|
|
||||||
|
|
||||||
self:AddDefenderToSquadron( DefenderSquadron, Defender, DefenderGrouping )
|
|
||||||
|
|
||||||
return Defender, DefenderGrouping
|
return nil, nil
|
||||||
end
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -2824,9 +2870,9 @@ do -- AI_A2A_DISPATCHER
|
|||||||
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
Defender:Destroy()
|
Defender:Destroy()
|
||||||
|
self:ParkDefender( Squadron, Defender )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2941,19 +2987,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
while ( DefendersNeeded > 0 ) do
|
while ( DefendersNeeded > 0 ) do
|
||||||
|
|
||||||
local DefenderGCI, DefenderGrouping = self:ResourceActivate( DefenderSquadron )
|
local DefenderGCI, DefenderGrouping = self:ResourceActivate( DefenderSquadron, DefendersNeeded )
|
||||||
|
|
||||||
-- local Spawn = DefenderSquadron.Spawn[ math.random( 1, #DefenderSquadron.Spawn ) ] -- Core.Spawn#SPAWN
|
|
||||||
-- local DefenderGrouping = ( DefenderGrouping < DefendersNeeded ) and DefenderGrouping or DefendersNeeded
|
|
||||||
-- if DefenderGrouping then
|
|
||||||
-- Spawn:InitGrouping( DefenderGrouping )
|
|
||||||
-- else
|
|
||||||
-- Spawn:InitGrouping()
|
|
||||||
-- end
|
|
||||||
--
|
|
||||||
-- local TakeoffMethod = self:GetSquadronTakeoff( ClosestDefenderSquadronName )
|
|
||||||
-- local DefenderGCI = Spawn:SpawnAtAirbase( DefenderSquadron.Airbase, TakeoffMethod, DefenderSquadron.TakeoffAltitude or self.DefenderDefault.TakeoffAltitude ) -- Wrapper.Group#GROUP
|
|
||||||
-- self:F( { GCIDefender = DefenderGCI:GetName() } )
|
|
||||||
|
|
||||||
DefendersNeeded = DefendersNeeded - DefenderGrouping
|
DefendersNeeded = DefendersNeeded - DefenderGrouping
|
||||||
|
|
||||||
@@ -3023,6 +3057,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
Defender:Destroy()
|
Defender:Destroy()
|
||||||
|
self:ParkDefender( Squadron, Defender )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end -- if DefenderGCI then
|
end -- if DefenderGCI then
|
||||||
|
|||||||
Reference in New Issue
Block a user