From 24a6d375002234cbc36c7f99b4c78b5f887b30df Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Sun, 11 Dec 2016 11:01:06 +0100 Subject: [PATCH] Progress --- Moose Development/Moose/Core/Event.lua | 9 +- Moose Development/Moose/Core/Point.lua | 2 +- Moose Development/Moose/Core/Zone.lua | 6 +- Moose Development/Moose/Dcs/DCStrigger.lua | 3 + Moose Development/Moose/Fsm/Fsm.lua | 4 +- .../Moose/Functional/AirbasePolice.lua | 130 +++++++++--------- .../Moose/Functional/Detection.lua | 4 +- Moose Development/Moose/Functional/Escort.lua | 8 +- .../Moose/Tasking/CommandCenter.lua | 3 +- Moose Development/Moose/Tasking/Mission.lua | 6 +- Moose Development/Moose/Tasking/Task.lua | 31 ++--- Moose Development/Moose/Wrapper/Unit.lua | 32 +---- .../SET-101 - Group Sets.lua | 6 +- .../TSK-010 - Task Modelling - SEAD.lua | 32 ++++- .../TSK-010 - Task Modelling - SEAD.miz | Bin 28124 -> 28154 bytes .../ZON-100 - Normal Zone.lua | 2 +- .../ZON-400 - Radius Zone.lua | 2 +- .../ZON-500 - Polygon Zone.lua | 2 +- 18 files changed, 136 insertions(+), 146 deletions(-) diff --git a/Moose Development/Moose/Core/Event.lua b/Moose Development/Moose/Core/Event.lua index 623005ae2..f90096791 100644 --- a/Moose Development/Moose/Core/Event.lua +++ b/Moose Development/Moose/Core/Event.lua @@ -87,16 +87,13 @@ function EVENT:Init( EventID, EventClass ) self:F3( { _EVENTCODES[EventID], EventClass } ) if not self.Events[EventID] then - self.Events[EventID] = {} - -- Create a WEAK table to ensure that the garbage collector is cleaning the event links when the object usage is cleaned. - local Meta = {} - setmetatable( self.Events[EventID], Meta ) - Meta.__mode = "k" + self.Events[EventID] = setmetatable( {}, { __mode = "k" } ) + end if not self.Events[EventID][EventClass] then - self.Events[EventID][EventClass] = {} + self.Events[EventID][EventClass] = setmetatable( {}, { __mode = "v" } ) end return self.Events[EventID][EventClass] end diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index 6beef3dc7..4269fb4cc 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -62,7 +62,7 @@ -- @field #number x The x coordinate in 3D space. -- @field #number y The y coordinate in 3D space. -- @field #number z The z coordiante in 3D space. --- @field #POINT_VEC3.SmokeColor SmokeColor +-- @field Utilities.Utils#SMOKECOLOR SmokeColor -- @field Utilities.Utils#FLARECOLOR FlareColor -- @field #POINT_VEC3.RoutePointAltType RoutePointAltType -- @field #POINT_VEC3.RoutePointType RoutePointType diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index e02d256ae..d0b8c635c 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -230,7 +230,7 @@ end --- Smokes the zone boundaries in a color. -- @param #ZONE_BASE self --- @param SmokeColor The smoke color. +-- @param Utilities.Utils#SMOKECOLOR SmokeColor The smoke color. function ZONE_BASE:SmokeZone( SmokeColor ) self:F2( SmokeColor ) @@ -298,7 +298,7 @@ end --- Smokes the zone boundaries in a color. -- @param #ZONE_RADIUS self --- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @param Utilities.Utils#SMOKECOLOR SmokeColor The smoke color. -- @param #number Points (optional) The amount of points in the circle. -- @return #ZONE_RADIUS self function ZONE_RADIUS:SmokeZone( SmokeColor, Points ) @@ -689,7 +689,7 @@ end --- Smokes the zone boundaries in a color. -- @param #ZONE_POLYGON_BASE self --- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color. +-- @param Utilities.Utils#SMOKECOLOR SmokeColor The smoke color. -- @return #ZONE_POLYGON_BASE self function ZONE_POLYGON_BASE:SmokeZone( SmokeColor ) self:F2( SmokeColor ) diff --git a/Moose Development/Moose/Dcs/DCStrigger.lua b/Moose Development/Moose/Dcs/DCStrigger.lua index 408e75689..7bf5360be 100644 --- a/Moose Development/Moose/Dcs/DCStrigger.lua +++ b/Moose Development/Moose/Dcs/DCStrigger.lua @@ -3,3 +3,6 @@ trigger = {} --#timer + + + \ No newline at end of file diff --git a/Moose Development/Moose/Fsm/Fsm.lua b/Moose Development/Moose/Fsm/Fsm.lua index 04b424afa..373b544c8 100644 --- a/Moose Development/Moose/Fsm/Fsm.lua +++ b/Moose Development/Moose/Fsm/Fsm.lua @@ -491,6 +491,8 @@ do -- FSM_PROCESS function FSM_PROCESS:New( Controllable, Task ) local self = BASE:Inherit( self, FSM_CONTROLLABLE:New() ) -- Fsm.Fsm#FSM_PROCESS + + self:F( Controllable, Task ) self:Assign( Controllable, Task ) @@ -631,7 +633,7 @@ do -- FSM_PROCESS self:E( { ProcessUnit, Event, From, To, Dummy, self:IsTrace() } ) if self:IsTrace() then - MESSAGE:New( "Process " .. self.ProcessName .. " : " .. Event .. " changed to state " .. To, 15 ):ToAll() + MESSAGE:New( "Process " .. self:GetClassNameAndID() .. " : " .. Event .. " changed to state " .. To, 15 ):ToAll() end self:E( self.Scores[To] ) diff --git a/Moose Development/Moose/Functional/AirbasePolice.lua b/Moose Development/Moose/Functional/AirbasePolice.lua index 661f64ec0..45af50d9f 100644 --- a/Moose Development/Moose/Functional/AirbasePolice.lua +++ b/Moose Development/Moose/Functional/AirbasePolice.lua @@ -85,18 +85,18 @@ function AIRBASEPOLICE_BASE:New( SetClient, Airbases ) self.Airbases = Airbases for AirbaseID, Airbase in pairs( self.Airbases ) do - Airbase.ZoneBoundary = ZONE_POLYGON_BASE:New( "Boundary", Airbase.PointsBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + Airbase.ZoneBoundary = ZONE_POLYGON_BASE:New( "Boundary", Airbase.PointsBoundary ):SmokeZone(SMOKECOLOR.White):Flush() for PointsRunwayID, PointsRunway in pairs( Airbase.PointsRunways ) do - Airbase.ZoneRunways[PointsRunwayID] = ZONE_POLYGON_BASE:New( "Runway " .. PointsRunwayID, PointsRunway ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + Airbase.ZoneRunways[PointsRunwayID] = ZONE_POLYGON_BASE:New( "Runway " .. PointsRunwayID, PointsRunway ):SmokeZone(SMOKECOLOR.Red):Flush() end end -- -- Template -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) --- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() +-- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) --- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() self.SetClient:ForEachClient( --- @param Wrapper.Client#CLIENT Client @@ -749,197 +749,197 @@ function AIRBASEPOLICE_CAUCASUS:New( SetClient ) -- -- AnapaVityazevo -- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" ) - -- self.Airbases.AnapaVityazevo.ZoneBoundary = ZONE_POLYGON:New( "AnapaVityazevo Boundary", AnapaVityazevoBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.AnapaVityazevo.ZoneBoundary = ZONE_POLYGON:New( "AnapaVityazevo Boundary", AnapaVityazevoBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local AnapaVityazevoRunway1 = GROUP:FindByName( "AnapaVityazevo Runway 1" ) - -- self.Airbases.AnapaVityazevo.ZoneRunways[1] = ZONE_POLYGON:New( "AnapaVityazevo Runway 1", AnapaVityazevoRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.AnapaVityazevo.ZoneRunways[1] = ZONE_POLYGON:New( "AnapaVityazevo Runway 1", AnapaVityazevoRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Batumi -- local BatumiBoundary = GROUP:FindByName( "Batumi Boundary" ) - -- self.Airbases.Batumi.ZoneBoundary = ZONE_POLYGON:New( "Batumi Boundary", BatumiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Batumi.ZoneBoundary = ZONE_POLYGON:New( "Batumi Boundary", BatumiBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local BatumiRunway1 = GROUP:FindByName( "Batumi Runway 1" ) - -- self.Airbases.Batumi.ZoneRunways[1] = ZONE_POLYGON:New( "Batumi Runway 1", BatumiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Batumi.ZoneRunways[1] = ZONE_POLYGON:New( "Batumi Runway 1", BatumiRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Beslan -- local BeslanBoundary = GROUP:FindByName( "Beslan Boundary" ) - -- self.Airbases.Beslan.ZoneBoundary = ZONE_POLYGON:New( "Beslan Boundary", BeslanBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Beslan.ZoneBoundary = ZONE_POLYGON:New( "Beslan Boundary", BeslanBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local BeslanRunway1 = GROUP:FindByName( "Beslan Runway 1" ) - -- self.Airbases.Beslan.ZoneRunways[1] = ZONE_POLYGON:New( "Beslan Runway 1", BeslanRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Beslan.ZoneRunways[1] = ZONE_POLYGON:New( "Beslan Runway 1", BeslanRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Gelendzhik -- local GelendzhikBoundary = GROUP:FindByName( "Gelendzhik Boundary" ) - -- self.Airbases.Gelendzhik.ZoneBoundary = ZONE_POLYGON:New( "Gelendzhik Boundary", GelendzhikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Gelendzhik.ZoneBoundary = ZONE_POLYGON:New( "Gelendzhik Boundary", GelendzhikBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local GelendzhikRunway1 = GROUP:FindByName( "Gelendzhik Runway 1" ) - -- self.Airbases.Gelendzhik.ZoneRunways[1] = ZONE_POLYGON:New( "Gelendzhik Runway 1", GelendzhikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Gelendzhik.ZoneRunways[1] = ZONE_POLYGON:New( "Gelendzhik Runway 1", GelendzhikRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Gudauta -- local GudautaBoundary = GROUP:FindByName( "Gudauta Boundary" ) - -- self.Airbases.Gudauta.ZoneBoundary = ZONE_POLYGON:New( "Gudauta Boundary", GudautaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Gudauta.ZoneBoundary = ZONE_POLYGON:New( "Gudauta Boundary", GudautaBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local GudautaRunway1 = GROUP:FindByName( "Gudauta Runway 1" ) - -- self.Airbases.Gudauta.ZoneRunways[1] = ZONE_POLYGON:New( "Gudauta Runway 1", GudautaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Gudauta.ZoneRunways[1] = ZONE_POLYGON:New( "Gudauta Runway 1", GudautaRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Kobuleti -- local KobuletiBoundary = GROUP:FindByName( "Kobuleti Boundary" ) - -- self.Airbases.Kobuleti.ZoneBoundary = ZONE_POLYGON:New( "Kobuleti Boundary", KobuletiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Kobuleti.ZoneBoundary = ZONE_POLYGON:New( "Kobuleti Boundary", KobuletiBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local KobuletiRunway1 = GROUP:FindByName( "Kobuleti Runway 1" ) - -- self.Airbases.Kobuleti.ZoneRunways[1] = ZONE_POLYGON:New( "Kobuleti Runway 1", KobuletiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Kobuleti.ZoneRunways[1] = ZONE_POLYGON:New( "Kobuleti Runway 1", KobuletiRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- KrasnodarCenter -- local KrasnodarCenterBoundary = GROUP:FindByName( "KrasnodarCenter Boundary" ) - -- self.Airbases.KrasnodarCenter.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarCenter Boundary", KrasnodarCenterBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.KrasnodarCenter.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarCenter Boundary", KrasnodarCenterBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local KrasnodarCenterRunway1 = GROUP:FindByName( "KrasnodarCenter Runway 1" ) - -- self.Airbases.KrasnodarCenter.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarCenter Runway 1", KrasnodarCenterRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.KrasnodarCenter.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarCenter Runway 1", KrasnodarCenterRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- KrasnodarPashkovsky -- local KrasnodarPashkovskyBoundary = GROUP:FindByName( "KrasnodarPashkovsky Boundary" ) - -- self.Airbases.KrasnodarPashkovsky.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarPashkovsky Boundary", KrasnodarPashkovskyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.KrasnodarPashkovsky.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarPashkovsky Boundary", KrasnodarPashkovskyBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local KrasnodarPashkovskyRunway1 = GROUP:FindByName( "KrasnodarPashkovsky Runway 1" ) - -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 1", KrasnodarPashkovskyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 1", KrasnodarPashkovskyRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- local KrasnodarPashkovskyRunway2 = GROUP:FindByName( "KrasnodarPashkovsky Runway 2" ) - -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[2] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 2", KrasnodarPashkovskyRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[2] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 2", KrasnodarPashkovskyRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Krymsk -- local KrymskBoundary = GROUP:FindByName( "Krymsk Boundary" ) - -- self.Airbases.Krymsk.ZoneBoundary = ZONE_POLYGON:New( "Krymsk Boundary", KrymskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Krymsk.ZoneBoundary = ZONE_POLYGON:New( "Krymsk Boundary", KrymskBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local KrymskRunway1 = GROUP:FindByName( "Krymsk Runway 1" ) - -- self.Airbases.Krymsk.ZoneRunways[1] = ZONE_POLYGON:New( "Krymsk Runway 1", KrymskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Krymsk.ZoneRunways[1] = ZONE_POLYGON:New( "Krymsk Runway 1", KrymskRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Kutaisi -- local KutaisiBoundary = GROUP:FindByName( "Kutaisi Boundary" ) - -- self.Airbases.Kutaisi.ZoneBoundary = ZONE_POLYGON:New( "Kutaisi Boundary", KutaisiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Kutaisi.ZoneBoundary = ZONE_POLYGON:New( "Kutaisi Boundary", KutaisiBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local KutaisiRunway1 = GROUP:FindByName( "Kutaisi Runway 1" ) - -- self.Airbases.Kutaisi.ZoneRunways[1] = ZONE_POLYGON:New( "Kutaisi Runway 1", KutaisiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Kutaisi.ZoneRunways[1] = ZONE_POLYGON:New( "Kutaisi Runway 1", KutaisiRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- MaykopKhanskaya -- local MaykopKhanskayaBoundary = GROUP:FindByName( "MaykopKhanskaya Boundary" ) - -- self.Airbases.MaykopKhanskaya.ZoneBoundary = ZONE_POLYGON:New( "MaykopKhanskaya Boundary", MaykopKhanskayaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.MaykopKhanskaya.ZoneBoundary = ZONE_POLYGON:New( "MaykopKhanskaya Boundary", MaykopKhanskayaBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local MaykopKhanskayaRunway1 = GROUP:FindByName( "MaykopKhanskaya Runway 1" ) - -- self.Airbases.MaykopKhanskaya.ZoneRunways[1] = ZONE_POLYGON:New( "MaykopKhanskaya Runway 1", MaykopKhanskayaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.MaykopKhanskaya.ZoneRunways[1] = ZONE_POLYGON:New( "MaykopKhanskaya Runway 1", MaykopKhanskayaRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- MineralnyeVody -- local MineralnyeVodyBoundary = GROUP:FindByName( "MineralnyeVody Boundary" ) - -- self.Airbases.MineralnyeVody.ZoneBoundary = ZONE_POLYGON:New( "MineralnyeVody Boundary", MineralnyeVodyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.MineralnyeVody.ZoneBoundary = ZONE_POLYGON:New( "MineralnyeVody Boundary", MineralnyeVodyBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local MineralnyeVodyRunway1 = GROUP:FindByName( "MineralnyeVody Runway 1" ) - -- self.Airbases.MineralnyeVody.ZoneRunways[1] = ZONE_POLYGON:New( "MineralnyeVody Runway 1", MineralnyeVodyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.MineralnyeVody.ZoneRunways[1] = ZONE_POLYGON:New( "MineralnyeVody Runway 1", MineralnyeVodyRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Mozdok -- local MozdokBoundary = GROUP:FindByName( "Mozdok Boundary" ) - -- self.Airbases.Mozdok.ZoneBoundary = ZONE_POLYGON:New( "Mozdok Boundary", MozdokBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Mozdok.ZoneBoundary = ZONE_POLYGON:New( "Mozdok Boundary", MozdokBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local MozdokRunway1 = GROUP:FindByName( "Mozdok Runway 1" ) - -- self.Airbases.Mozdok.ZoneRunways[1] = ZONE_POLYGON:New( "Mozdok Runway 1", MozdokRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Mozdok.ZoneRunways[1] = ZONE_POLYGON:New( "Mozdok Runway 1", MozdokRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Nalchik -- local NalchikBoundary = GROUP:FindByName( "Nalchik Boundary" ) - -- self.Airbases.Nalchik.ZoneBoundary = ZONE_POLYGON:New( "Nalchik Boundary", NalchikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Nalchik.ZoneBoundary = ZONE_POLYGON:New( "Nalchik Boundary", NalchikBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local NalchikRunway1 = GROUP:FindByName( "Nalchik Runway 1" ) - -- self.Airbases.Nalchik.ZoneRunways[1] = ZONE_POLYGON:New( "Nalchik Runway 1", NalchikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Nalchik.ZoneRunways[1] = ZONE_POLYGON:New( "Nalchik Runway 1", NalchikRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Novorossiysk -- local NovorossiyskBoundary = GROUP:FindByName( "Novorossiysk Boundary" ) - -- self.Airbases.Novorossiysk.ZoneBoundary = ZONE_POLYGON:New( "Novorossiysk Boundary", NovorossiyskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Novorossiysk.ZoneBoundary = ZONE_POLYGON:New( "Novorossiysk Boundary", NovorossiyskBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local NovorossiyskRunway1 = GROUP:FindByName( "Novorossiysk Runway 1" ) - -- self.Airbases.Novorossiysk.ZoneRunways[1] = ZONE_POLYGON:New( "Novorossiysk Runway 1", NovorossiyskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Novorossiysk.ZoneRunways[1] = ZONE_POLYGON:New( "Novorossiysk Runway 1", NovorossiyskRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- SenakiKolkhi -- local SenakiKolkhiBoundary = GROUP:FindByName( "SenakiKolkhi Boundary" ) - -- self.Airbases.SenakiKolkhi.ZoneBoundary = ZONE_POLYGON:New( "SenakiKolkhi Boundary", SenakiKolkhiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.SenakiKolkhi.ZoneBoundary = ZONE_POLYGON:New( "SenakiKolkhi Boundary", SenakiKolkhiBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local SenakiKolkhiRunway1 = GROUP:FindByName( "SenakiKolkhi Runway 1" ) - -- self.Airbases.SenakiKolkhi.ZoneRunways[1] = ZONE_POLYGON:New( "SenakiKolkhi Runway 1", SenakiKolkhiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.SenakiKolkhi.ZoneRunways[1] = ZONE_POLYGON:New( "SenakiKolkhi Runway 1", SenakiKolkhiRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- SochiAdler -- local SochiAdlerBoundary = GROUP:FindByName( "SochiAdler Boundary" ) - -- self.Airbases.SochiAdler.ZoneBoundary = ZONE_POLYGON:New( "SochiAdler Boundary", SochiAdlerBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.SochiAdler.ZoneBoundary = ZONE_POLYGON:New( "SochiAdler Boundary", SochiAdlerBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local SochiAdlerRunway1 = GROUP:FindByName( "SochiAdler Runway 1" ) - -- self.Airbases.SochiAdler.ZoneRunways[1] = ZONE_POLYGON:New( "SochiAdler Runway 1", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.SochiAdler.ZoneRunways[1] = ZONE_POLYGON:New( "SochiAdler Runway 1", SochiAdlerRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- local SochiAdlerRunway2 = GROUP:FindByName( "SochiAdler Runway 2" ) - -- self.Airbases.SochiAdler.ZoneRunways[2] = ZONE_POLYGON:New( "SochiAdler Runway 2", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.SochiAdler.ZoneRunways[2] = ZONE_POLYGON:New( "SochiAdler Runway 2", SochiAdlerRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Soganlug -- local SoganlugBoundary = GROUP:FindByName( "Soganlug Boundary" ) - -- self.Airbases.Soganlug.ZoneBoundary = ZONE_POLYGON:New( "Soganlug Boundary", SoganlugBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Soganlug.ZoneBoundary = ZONE_POLYGON:New( "Soganlug Boundary", SoganlugBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local SoganlugRunway1 = GROUP:FindByName( "Soganlug Runway 1" ) - -- self.Airbases.Soganlug.ZoneRunways[1] = ZONE_POLYGON:New( "Soganlug Runway 1", SoganlugRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Soganlug.ZoneRunways[1] = ZONE_POLYGON:New( "Soganlug Runway 1", SoganlugRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- SukhumiBabushara -- local SukhumiBabusharaBoundary = GROUP:FindByName( "SukhumiBabushara Boundary" ) - -- self.Airbases.SukhumiBabushara.ZoneBoundary = ZONE_POLYGON:New( "SukhumiBabushara Boundary", SukhumiBabusharaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.SukhumiBabushara.ZoneBoundary = ZONE_POLYGON:New( "SukhumiBabushara Boundary", SukhumiBabusharaBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local SukhumiBabusharaRunway1 = GROUP:FindByName( "SukhumiBabushara Runway 1" ) - -- self.Airbases.SukhumiBabushara.ZoneRunways[1] = ZONE_POLYGON:New( "SukhumiBabushara Runway 1", SukhumiBabusharaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.SukhumiBabushara.ZoneRunways[1] = ZONE_POLYGON:New( "SukhumiBabushara Runway 1", SukhumiBabusharaRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- TbilisiLochini -- local TbilisiLochiniBoundary = GROUP:FindByName( "TbilisiLochini Boundary" ) - -- self.Airbases.TbilisiLochini.ZoneBoundary = ZONE_POLYGON:New( "TbilisiLochini Boundary", TbilisiLochiniBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.TbilisiLochini.ZoneBoundary = ZONE_POLYGON:New( "TbilisiLochini Boundary", TbilisiLochiniBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local TbilisiLochiniRunway1 = GROUP:FindByName( "TbilisiLochini Runway 1" ) - -- self.Airbases.TbilisiLochini.ZoneRunways[1] = ZONE_POLYGON:New( "TbilisiLochini Runway 1", TbilisiLochiniRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.TbilisiLochini.ZoneRunways[1] = ZONE_POLYGON:New( "TbilisiLochini Runway 1", TbilisiLochiniRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local TbilisiLochiniRunway2 = GROUP:FindByName( "TbilisiLochini Runway 2" ) - -- self.Airbases.TbilisiLochini.ZoneRunways[2] = ZONE_POLYGON:New( "TbilisiLochini Runway 2", TbilisiLochiniRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.TbilisiLochini.ZoneRunways[2] = ZONE_POLYGON:New( "TbilisiLochini Runway 2", TbilisiLochiniRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- -- -- Vaziani -- local VazianiBoundary = GROUP:FindByName( "Vaziani Boundary" ) - -- self.Airbases.Vaziani.ZoneBoundary = ZONE_POLYGON:New( "Vaziani Boundary", VazianiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Vaziani.ZoneBoundary = ZONE_POLYGON:New( "Vaziani Boundary", VazianiBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local VazianiRunway1 = GROUP:FindByName( "Vaziani Runway 1" ) - -- self.Airbases.Vaziani.ZoneRunways[1] = ZONE_POLYGON:New( "Vaziani Runway 1", VazianiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Vaziani.ZoneRunways[1] = ZONE_POLYGON:New( "Vaziani Runway 1", VazianiRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- @@ -947,10 +947,10 @@ function AIRBASEPOLICE_CAUCASUS:New( SetClient ) -- Template -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) - -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) - -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() return self @@ -1143,49 +1143,49 @@ function AIRBASEPOLICE_NEVADA:New( SetClient ) -- -- Nellis -- local NellisBoundary = GROUP:FindByName( "Nellis Boundary" ) --- self.Airbases.Nellis.ZoneBoundary = ZONE_POLYGON:New( "Nellis Boundary", NellisBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() +-- self.Airbases.Nellis.ZoneBoundary = ZONE_POLYGON:New( "Nellis Boundary", NellisBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local NellisRunway1 = GROUP:FindByName( "Nellis Runway 1" ) --- self.Airbases.Nellis.ZoneRunways[1] = ZONE_POLYGON:New( "Nellis Runway 1", NellisRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.Nellis.ZoneRunways[1] = ZONE_POLYGON:New( "Nellis Runway 1", NellisRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local NellisRunway2 = GROUP:FindByName( "Nellis Runway 2" ) --- self.Airbases.Nellis.ZoneRunways[2] = ZONE_POLYGON:New( "Nellis Runway 2", NellisRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.Nellis.ZoneRunways[2] = ZONE_POLYGON:New( "Nellis Runway 2", NellisRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- McCarran -- local McCarranBoundary = GROUP:FindByName( "McCarran Boundary" ) --- self.Airbases.McCarran.ZoneBoundary = ZONE_POLYGON:New( "McCarran Boundary", McCarranBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() +-- self.Airbases.McCarran.ZoneBoundary = ZONE_POLYGON:New( "McCarran Boundary", McCarranBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local McCarranRunway1 = GROUP:FindByName( "McCarran Runway 1" ) --- self.Airbases.McCarran.ZoneRunways[1] = ZONE_POLYGON:New( "McCarran Runway 1", McCarranRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.McCarran.ZoneRunways[1] = ZONE_POLYGON:New( "McCarran Runway 1", McCarranRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local McCarranRunway2 = GROUP:FindByName( "McCarran Runway 2" ) --- self.Airbases.McCarran.ZoneRunways[2] = ZONE_POLYGON:New( "McCarran Runway 2", McCarranRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.McCarran.ZoneRunways[2] = ZONE_POLYGON:New( "McCarran Runway 2", McCarranRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local McCarranRunway3 = GROUP:FindByName( "McCarran Runway 3" ) --- self.Airbases.McCarran.ZoneRunways[3] = ZONE_POLYGON:New( "McCarran Runway 3", McCarranRunway3 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.McCarran.ZoneRunways[3] = ZONE_POLYGON:New( "McCarran Runway 3", McCarranRunway3 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local McCarranRunway4 = GROUP:FindByName( "McCarran Runway 4" ) --- self.Airbases.McCarran.ZoneRunways[4] = ZONE_POLYGON:New( "McCarran Runway 4", McCarranRunway4 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.McCarran.ZoneRunways[4] = ZONE_POLYGON:New( "McCarran Runway 4", McCarranRunway4 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- Creech -- local CreechBoundary = GROUP:FindByName( "Creech Boundary" ) --- self.Airbases.Creech.ZoneBoundary = ZONE_POLYGON:New( "Creech Boundary", CreechBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() +-- self.Airbases.Creech.ZoneBoundary = ZONE_POLYGON:New( "Creech Boundary", CreechBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local CreechRunway1 = GROUP:FindByName( "Creech Runway 1" ) --- self.Airbases.Creech.ZoneRunways[1] = ZONE_POLYGON:New( "Creech Runway 1", CreechRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.Creech.ZoneRunways[1] = ZONE_POLYGON:New( "Creech Runway 1", CreechRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local CreechRunway2 = GROUP:FindByName( "Creech Runway 2" ) --- self.Airbases.Creech.ZoneRunways[2] = ZONE_POLYGON:New( "Creech Runway 2", CreechRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.Creech.ZoneRunways[2] = ZONE_POLYGON:New( "Creech Runway 2", CreechRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- -- Groom Lake -- local GroomLakeBoundary = GROUP:FindByName( "GroomLake Boundary" ) --- self.Airbases.GroomLake.ZoneBoundary = ZONE_POLYGON:New( "GroomLake Boundary", GroomLakeBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() +-- self.Airbases.GroomLake.ZoneBoundary = ZONE_POLYGON:New( "GroomLake Boundary", GroomLakeBoundary ):SmokeZone(SMOKECOLOR.White):Flush() -- -- local GroomLakeRunway1 = GROUP:FindByName( "GroomLake Runway 1" ) --- self.Airbases.GroomLake.ZoneRunways[1] = ZONE_POLYGON:New( "GroomLake Runway 1", GroomLakeRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.GroomLake.ZoneRunways[1] = ZONE_POLYGON:New( "GroomLake Runway 1", GroomLakeRunway1 ):SmokeZone(SMOKECOLOR.Red):Flush() -- -- local GroomLakeRunway2 = GROUP:FindByName( "GroomLake Runway 2" ) --- self.Airbases.GroomLake.ZoneRunways[2] = ZONE_POLYGON:New( "GroomLake Runway 2", GroomLakeRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() +-- self.Airbases.GroomLake.ZoneRunways[2] = ZONE_POLYGON:New( "GroomLake Runway 2", GroomLakeRunway2 ):SmokeZone(SMOKECOLOR.Red):Flush() end diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 97977bdca..bd5df0de6 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -973,10 +973,10 @@ function DETECTION_AREAS:CreateDetectionSets() end ) if DETECTION_AREAS._FlareDetectedZones or self._FlareDetectedZones then - DetectedZone:FlareZone( POINT_VEC3.SmokeColor.White, 30, math.random( 0,90 ) ) + DetectedZone:FlareZone( SMOKECOLOR.White, 30, math.random( 0,90 ) ) end if DETECTION_AREAS._SmokeDetectedZones or self._SmokeDetectedZones then - DetectedZone:SmokeZone( POINT_VEC3.SmokeColor.White, 30 ) + DetectedZone:SmokeZone( SMOKECOLOR.White, 30 ) end end diff --git a/Moose Development/Moose/Functional/Escort.lua b/Moose Development/Moose/Functional/Escort.lua index aceec0bfc..96a28c453 100644 --- a/Moose Development/Moose/Functional/Escort.lua +++ b/Moose Development/Moose/Functional/Escort.lua @@ -494,10 +494,10 @@ function ESCORT:MenuFlare( MenuTextFormat ) if not self.EscortMenuFlare then self.EscortMenuFlare = MENU_CLIENT:New( self.EscortClient, MenuText, self.EscortMenuReportNavigation, ESCORT._Flare, { ParamSelf = self } ) - self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Green, ParamMessage = "Released a green flare!" } ) - self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Red, ParamMessage = "Released a red flare!" } ) - self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.White, ParamMessage = "Released a white flare!" } ) - self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = UNIT.FlareColor.Yellow, ParamMessage = "Released a yellow flare!" } ) + self.EscortMenuFlareGreen = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release green flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = FLARECOLOR.Green, ParamMessage = "Released a green flare!" } ) + self.EscortMenuFlareRed = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release red flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = FLARECOLOR.Red, ParamMessage = "Released a red flare!" } ) + self.EscortMenuFlareWhite = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release white flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = FLARECOLOR.White, ParamMessage = "Released a white flare!" } ) + self.EscortMenuFlareYellow = MENU_CLIENT_COMMAND:New( self.EscortClient, "Release yellow flare", self.EscortMenuFlare, ESCORT._Flare, { ParamSelf = self, ParamColor = FLARECOLOR.Yellow, ParamMessage = "Released a yellow flare!" } ) end return self diff --git a/Moose Development/Moose/Tasking/CommandCenter.lua b/Moose Development/Moose/Tasking/CommandCenter.lua index 7e049b2de..7157dddff 100644 --- a/Moose Development/Moose/Tasking/CommandCenter.lua +++ b/Moose Development/Moose/Tasking/CommandCenter.lua @@ -64,8 +64,7 @@ function COMMANDCENTER:New( CommandCenterPositionable, CommandCenterName ) self.CommandCenterName = CommandCenterName or CommandCenterPositionable:GetName() self.CommandCenterCoalition = CommandCenterPositionable:GetCoalition() - self.Missions = {} - setmetatable( self.Missions, { __mode = "v" } ) + self.Missions = setmetatable( {}, { __mode = "v" } ) self:EventOnBirth( --- @param #COMMANDCENTER self diff --git a/Moose Development/Moose/Tasking/Mission.lua b/Moose Development/Moose/Tasking/Mission.lua index 388071ee2..0c0390402 100644 --- a/Moose Development/Moose/Tasking/Mission.lua +++ b/Moose Development/Moose/Tasking/Mission.lua @@ -59,7 +59,6 @@ function MISSION:New( CommandCenter, MissionName, MissionPriority, MissionBriefi self.MissionCoalition = MissionCoalition self.Tasks = {} - setmetatable( self.Tasks, { __mode = "v" } ) -- Build the Fsm for the mission. @@ -202,8 +201,9 @@ function MISSION:AddTask( Task ) local TaskName = Task:GetTaskName() self:F( TaskName ) + self.Tasks[TaskName] = self.Tasks[TaskName] or { n = 0 } - + self.Tasks[TaskName] = Task return Task @@ -222,8 +222,6 @@ function MISSION:RemoveTask( Task ) self:F( TaskName ) self.Tasks[TaskName] = self.Tasks[TaskName] or { n = 0 } - Task:CleanUp() -- Cleans all events and sets task to nil to get Garbage Collected - -- Ensure everything gets garbarge collected. self.Tasks[TaskName] = nil Task = nil diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 33c8cb24e..d5a6f39f1 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -55,6 +55,8 @@ -- @field Tasking.Mission#MISSION Mission -- @field Core.Set#SET_GROUP SetGroup The Set of Groups assigned to the Task -- @field Fsm.Fsm#FSM_PROCESS FsmTemplate +-- @field Tasking.Mission#MISSION Mission +-- @field Tasking.CommandCenter#COMMANDCENTER CommandCenter -- @extends Fsm.Fsm#FSM_TASK TASK_BASE = { ClassName = "TASK_BASE", @@ -66,6 +68,8 @@ TASK_BASE = { Menu = {}, SetGroup = nil, FsmTemplate = nil, + Mission = nil, + CommandCenter = nil, } --- Instantiates a new TASK_BASE. Should never be used. Interface Class. @@ -94,6 +98,7 @@ function TASK_BASE:New( Mission, SetGroupAssign, TaskName, TaskType ) self.Fsm = {} self.Mission = Mission + self.CommandCenter = Mission:GetCommandCenter() self.SetGroup = SetGroupAssign @@ -106,6 +111,7 @@ function TASK_BASE:New( Mission, SetGroupAssign, TaskName, TaskType ) self.FsmTemplate = self.FsmTemplate or FSM_PROCESS:New() -- Handle the birth of new planes within the assigned set. + self:EventOnPlayerEnterUnit( --- @param #TASK_BASE self -- @param Core.Event#EVENTDATA EventData @@ -142,7 +148,7 @@ function TASK_BASE:New( Mission, SetGroupAssign, TaskName, TaskType ) self:UnAssignFromUnit( TaskUnit ) self:MessageToGroups( TaskUnit:GetPlayerName() .. " aborted Task " .. self:GetName() ) end - if self:AreUnitsAlive() == false then + if self:HasAliveUnits() == false then self:__Abort( 1 ) end end @@ -170,6 +176,7 @@ function TASK_BASE:New( Mission, SetGroupAssign, TaskName, TaskType ) end ) + Mission:AddTask( self ) return self @@ -279,6 +286,7 @@ end --- Send a message of the @{Task} to the assigned @{Group}s. -- @param #TASK_BASE self function TASK_BASE:MessageToGroups( Message ) + self:F( { Message = Message } ) local Mission = self:GetMission() local CC = Mission:GetCommandCenter() @@ -344,13 +352,15 @@ end --- Returns if the @{Task} has still alive and assigned Units. -- @param #TASK_BASE self -- @return #boolean -function TASK_BASE:HasAliveUnits( TaskGroup ) +function TASK_BASE:HasAliveUnits() + self:F() for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do if self:IsStateAssigned() then if self:IsAssignedToGroup( TaskGroup ) then for TaskUnitID, TaskUnit in pairs( TaskGroup:GetUnits() ) do if TaskUnit:IsAlive() then + self:T( { HasAliveUnits = true } ) return true end end @@ -358,6 +368,7 @@ function TASK_BASE:HasAliveUnits( TaskGroup ) end end + self:T( { HasAliveUnits = true } ) return false end @@ -784,22 +795,6 @@ end ---- Adds a score for the TASK to be achieved. --- @param #FSM_TEMPLATE self --- @param #string TaskStatus is the status of the TASK when the score needs to be given. --- @param #string ScoreText is a text describing the score that is given according the status. --- @param #number Score is a number providing the score of the status. --- @return #FSM_TEMPLATE self -function TASK_BASE:AddScoreTask( TaskStatus, ScoreText, Score ) - self:F2( { TaskStatus, ScoreText, Score } ) - - self.Scores[TaskStatus] = self.Scores[TaskStatus] or {} - self.Scores[TaskStatus].ScoreText = ScoreText - self.Scores[TaskStatus].Score = Score - return self -end - - --- StateMachine callback function for a TASK -- @param #TASK_BASE self -- @param #string Event diff --git a/Moose Development/Moose/Wrapper/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua index 5e2f5b712..65657e3c5 100644 --- a/Moose Development/Moose/Wrapper/Unit.lua +++ b/Moose Development/Moose/Wrapper/Unit.lua @@ -75,39 +75,10 @@ --- The UNIT class -- @type UNIT -- @extends Wrapper.Controllable#CONTROLLABLE --- @field #UNIT.FlareColor FlareColor --- @field #UNIT.SmokeColor SmokeColor UNIT = { ClassName="UNIT", - FlareColor = { - Green = trigger.flareColor.Green, - Red = trigger.flareColor.Red, - White = trigger.flareColor.White, - Yellow = trigger.flareColor.Yellow - }, - SmokeColor = { - Green = trigger.smokeColor.Green, - Red = trigger.smokeColor.Red, - White = trigger.smokeColor.White, - Orange = trigger.smokeColor.Orange, - Blue = trigger.smokeColor.Blue - }, - } +} ---- FlareColor --- @type UNIT.FlareColor --- @field Green --- @field Red --- @field White --- @field Yellow - ---- SmokeColor --- @type UNIT.SmokeColor --- @field Green --- @field Red --- @field White --- @field Orange --- @field Blue --- Unit.SensorType -- @type Unit.SensorType @@ -655,6 +626,7 @@ end --- Signal a flare at the position of the UNIT. -- @param #UNIT self +-- @param Utilities.Utils#FLARECOLOR FlareColor function UNIT:Flare( FlareColor ) self:F2() trigger.action.signalFlare( self:GetVec3(), FlareColor , 0 ) diff --git a/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.lua b/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.lua index 9af754901..534d78e34 100644 --- a/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.lua +++ b/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.lua @@ -121,9 +121,9 @@ GroupZoneCompletely = GROUP:FindByName( "Zone Completely" ) GroupZonePartly = GROUP:FindByName( "Zone Partly" ) GroupZoneNot = GROUP:FindByName( "Zone Not" ) -ZoneCompletely = ZONE_POLYGON:New( "Zone Completely", GroupZoneCompletely ):SmokeZone( POINT_VEC3.SmokeColor.White ) -ZonePartly = ZONE_POLYGON:New( "Zone Partly", GroupZonePartly ):SmokeZone( POINT_VEC3.SmokeColor.White ) -ZoneNot = ZONE_POLYGON:New( "Zone Not", GroupZoneNot ):SmokeZone( POINT_VEC3.SmokeColor.White ) +ZoneCompletely = ZONE_POLYGON:New( "Zone Completely", GroupZoneCompletely ):SmokeZone( SMOKECOLOR.White ) +ZonePartly = ZONE_POLYGON:New( "Zone Partly", GroupZonePartly ):SmokeZone( SMOKECOLOR.White ) +ZoneNot = ZONE_POLYGON:New( "Zone Not", GroupZoneNot ):SmokeZone( SMOKECOLOR.White ) SetVehicleCompletely:ForEachGroupCompletelyInZone( ZoneCompletely, --- @param Wrapper.Group#GROUP MooseGroup diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua index d5545a1d9..171d0532e 100644 --- a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua +++ b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.lua @@ -1,3 +1,4 @@ + -- This test mission is a test bed for the TASKING framework. -- It creates an head quarters (HQ), which contains one mission with one task to be accomplished. -- When the pilot joins the plane, it will need to accept the task using the HQ menu. @@ -102,8 +103,27 @@ FsmSEADTemplate:AddScoreProcess( "Updated", "Account", "Failed", "failed to dest FsmSEADTemplate:AddScore( "Success", "Destroyed all target radars", 250 ) FsmSEADTemplate:AddScore( "Failed", "Failed to destroy all target radars", -100 ) - - +--local TestTask = TASK_BASE:New( Mission, SEADSet, "TEST TASK", "TEST" ) +--TestTask:E("Clean TestTask") +--TestTask = nil +--collectgarbage() +-- +--local TestUnit = GROUP:FindByName( "HQ" ):GetUnit(1) +-- +--local fsm = FSM_PROCESS:New( TestUnit, TaskSEAD ) +-- +--fsm:AddProcess("test","test",FSM_ACCOUNT_DEADS:New( TargetSet, "SEAD" )) +-- +----Mission:AddTask(fsm) +-- +--fsm:E("CLEAN fsm") +--fsm = nil +--collectgarbage() +-- +-- +--TaskSEAD:E("CLEAN TASK") +--TaskSEAD = nil +--collectgarbage() function FsmSEADTemplate:onenterUpdated( TaskUnit ) self:E( { self } ) @@ -112,9 +132,13 @@ function FsmSEADTemplate:onenterUpdated( TaskUnit ) end -local TaskSEAD2 = TASK_BASE:New( Mission, SEADSet, "SEAD Radars Vector 2", "SEAD" ) -- Tasking.Task#TASK_BASE -TaskSEAD2:SetFsmTemplate( TaskSEAD:GetFsmTemplate():Copy() ) +--local TaskSEAD2 = TASK_BASE:New( Mission, SEADSet, "SEAD Radars Vector 2", "SEAD" ) -- Tasking.Task#TASK_BASE +--TaskSEAD2:SetFsmTemplate( TaskSEAD:GetFsmTemplate():Copy() ) --Mission:AddTask( TaskSEAD2 ) +TaskSEAD = nil +FsmSEADTemplate = nil HQ:SetMenu() + +collectgarbage() diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz index 71460895eccfdfaa2836016ba2f41a2dbabc1576..cd32600fe3cc9e2336acda61353db059b3d8d0d9 100644 GIT binary patch delta 14055 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 AssI20 delta 14013 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 diff --git a/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.lua b/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.lua index cfdfbbf70..0cc8bca29 100644 --- a/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.lua +++ b/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.lua @@ -6,7 +6,7 @@ local GroupInside = GROUP:FindByName( "Test Inside Polygon" ) local GroupOutside = GROUP:FindByName( "Test Outside Polygon" ) -local ZoneA = ZONE:New( "Zone A" ):SmokeZone( POINT_VEC3.SmokeColor.White, 90 ) +local ZoneA = ZONE:New( "Zone A" ):SmokeZone( SMOKECOLOR.White, 90 ) Messager = SCHEDULER:New( nil, function() diff --git a/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.lua b/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.lua index 34d4c7699..7eb347e91 100644 --- a/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.lua +++ b/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.lua @@ -7,7 +7,7 @@ local GroupInside = GROUP:FindByName( "Test Inside Polygon" ) local GroupOutside = GROUP:FindByName( "Test Outside Polygon" ) local House = STATIC:FindByName( "House" ) -local ZoneA = ZONE_RADIUS:New( "Zone A", House:GetPointVec2(), 300 ):SmokeZone( POINT_VEC3.SmokeColor.White, 90 ) +local ZoneA = ZONE_RADIUS:New( "Zone A", House:GetPointVec2(), 300 ):SmokeZone( SMOKECOLOR.White, 90 ) Messager = SCHEDULER:New( nil, function() diff --git a/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.lua b/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.lua index 55404345d..e38d859ee 100644 --- a/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.lua +++ b/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.lua @@ -8,7 +8,7 @@ local GroupOutside = GROUP:FindByName( "Test Outside Polygon" ) local GroupPolygon = GROUP:FindByName( "Polygon A" ) -local PolygonZone = ZONE_POLYGON:New( "Polygon A", GroupPolygon ):SmokeZone( POINT_VEC3.SmokeColor.White, 20 ) +local PolygonZone = ZONE_POLYGON:New( "Polygon A", GroupPolygon ):SmokeZone( SMOKECOLOR.White, 20 ) Messager = SCHEDULER:New( nil, function()