mirror of
https://github.com/FlightControl-Master/MOOSE_MISSIONS.git
synced 2025-08-15 10:37:46 +00:00
MOOSE demonstration missions [skip ci]
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,77 @@
|
||||
-- At startup of the overall mission, we spawn 10 possible escort planes in "Uncontrolled" state.
|
||||
|
||||
EscortSpawn = SPAWN:NewWithAlias( "Red A2G Escort Template", "Red A2G Escort AI" )
|
||||
|
||||
Escort = {} -- #list<#number>
|
||||
|
||||
EscortClients = SET_CLIENT:New():FilterPrefixes( "Red A2G Pilot" ):FilterStart()
|
||||
|
||||
-- We setup a process where a new spawn of a client plane will trigger a menu option
|
||||
-- to request an escort from the pool of escorts.
|
||||
|
||||
EventHandlerBirth = EVENTHANDLER:New()
|
||||
|
||||
EventHandlerBirth:HandleEvent( EVENTS.Birth )
|
||||
|
||||
|
||||
function SpawnNewEscorts( EscortUnit )
|
||||
env.info("new escort")
|
||||
local ID = EscortUnit:GetID()
|
||||
Escort[ID] = Escort[ID] or {}
|
||||
Escort[ID].Set = SET_GROUP:New():FilterCoalitions( "red" ):FilterPrefixes( "Red A2G Escort AI" ):_FilterStart()
|
||||
-- Spawn a new escort
|
||||
local EscortGroup = EscortSpawn:SpawnAtAirbase( AIRBASE:FindByName( AIRBASE.Caucasus.Sochi_Adler ), SPAWN.Takeoff.Cold )
|
||||
Escort[ID].Set:AddGroup( EscortGroup )
|
||||
|
||||
-- Now setup the AI_ESCORT to make the new spawned escort follow the EscortUnit.
|
||||
Escort[ID].Escort = AI_ESCORT:New( EscortUnit, Escort[ID].Set, "Escort A2G", "Briefing" )
|
||||
Escort[ID].Escort:Menus()
|
||||
Escort[ID].Escort:__Start( 5 )
|
||||
end
|
||||
|
||||
--- @param Core.Event#EVENT self
|
||||
-- @param Core.Event#EVENTDATA EventData
|
||||
function EventHandlerBirth:OnEventBirth( EventData )
|
||||
|
||||
local EventUnit = EventData.IniUnit
|
||||
local EventGroup = EventUnit:GetGroup()
|
||||
|
||||
if EscortClients:FindClient( EventUnit:GetName() ) then
|
||||
|
||||
if not EventGroup.MenuRequestEscort then
|
||||
EventGroup.MenuRequestEscort = MENU_GROUP_COMMAND:New( EventGroup, "Request A2G Escort", nil,
|
||||
function( EventUnit )
|
||||
env.info("call")
|
||||
local ID = EventUnit:GetID()
|
||||
if Escort[ID] then
|
||||
-- There is already an escort group set spawned previously. Let's check if the escorts are still alive.
|
||||
local EscortGroupSet = Escort[ID].Set
|
||||
local OneEscortAlive = false
|
||||
EscortGroupSet:ForEachGroupAlive(
|
||||
function( EscortGroup )
|
||||
OneEscortAlive = true
|
||||
end
|
||||
)
|
||||
|
||||
if OneEscortAlive == false then
|
||||
SpawnNewEscorts( EventUnit )
|
||||
end
|
||||
|
||||
else
|
||||
SpawnNewEscorts( EventUnit )
|
||||
|
||||
end
|
||||
|
||||
end, EventUnit
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
local FollowGroupSet = SET_GROUP:New():FilterCategories( { "plane" } ):FilterCoalitions( "red" ):FilterPrefixes( { "Red A2G Escort" } )
|
||||
|
||||
local LeaderUnit = UNIT:FindByName( "Leader" )
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user