diff --git a/Moose Development/Moose/DetectionManager.lua b/Moose Development/Moose/DetectionManager.lua index 00d92bac9..a2a9fd869 100644 --- a/Moose Development/Moose/DetectionManager.lua +++ b/Moose Development/Moose/DetectionManager.lua @@ -278,7 +278,12 @@ function TASK_DISPATCHER:EvaluateTaskSEAD( Mission, DetectedArea ) DetectedArea.Tasks = DetectedArea.Tasks or {} if RadarCount > 0 then if not DetectedArea.Tasks.SEADTask then - local Task = TASK_SEAD:New( Mission, DetectedSet, DetectedZone ) + -- Here we're doing something advanced... We're copying the DetectedSet, but making a new Set only with Radar units in it. + local TargetSetUnit = SET_UNIT:New() + TargetSetUnit:CopyFilter( DetectedSet ) + TargetSetUnit:FilterHasRadar( Unit.RadarType.AS ) + TargetSetUnit:FilterStart() + local Task = TASK_SEAD:New( Mission, TargetSetUnit, DetectedZone ) self.Mission:AddTask( Task ) MT[#MT+1] = "SEAD" DetectedArea.Tasks.SEADTask = Task @@ -288,8 +293,12 @@ function TASK_DISPATCHER:EvaluateTaskSEAD( Mission, DetectedArea ) -- Abort Task end end - - return table.concat( MT, "," ) + + if MT ~= {} then + return table.concat( MT, "," ) + else + return "" + end end --- Creates a CAS task when there are targets for it. @@ -321,7 +330,11 @@ function TASK_DISPATCHER:EvaluateTaskCAS( Mission, DetectedArea ) end end - return table.concat( MT, "," ) + if MT ~= {} then + return table.concat( MT, "," ) + else + return "" + end end --- Creates a string of the detected items in a @{Detection}. diff --git a/Moose Development/Moose/Message.lua b/Moose Development/Moose/Message.lua index 03f74f190..bc44263bc 100644 --- a/Moose Development/Moose/Message.lua +++ b/Moose Development/Moose/Message.lua @@ -59,7 +59,7 @@ function MESSAGE:New( MessageText, MessageDuration, MessageCategory ) self.MessageCategory = "" end - self.MessageDuration = MessageDuration + self.MessageDuration = MessageDuration or 5 self.MessageTime = timer.getTime() self.MessageText = MessageText diff --git a/Moose Development/Moose/Process.lua b/Moose Development/Moose/Process.lua index 67f41f8fc..25cbd5617 100644 --- a/Moose Development/Moose/Process.lua +++ b/Moose Development/Moose/Process.lua @@ -6,6 +6,7 @@ -- @field Unit#UNIT ProcessUnit -- @field Task#TASK Task -- @field StateMachine#STATEMACHINE_TASK Fsm +-- @field #string ProcessName -- @extends Base#BASE PROCESS = { ClassName = "TASK", @@ -16,14 +17,17 @@ PROCESS = { --- Instantiates a new TASK Base. Should never be used. Interface Class. -- @param #PROCESS self +-- @param #string ProcessName +-- @param Task#TASK_BASE Task -- @param Unit#UNIT ProcessUnit -- @return #PROCESS self -function PROCESS:New( Task, ProcessUnit ) +function PROCESS:New( ProcessName, Task, ProcessUnit ) local self = BASE:Inherit( self, BASE:New() ) self:F() self.ProcessUnit = ProcessUnit self.Task = Task + self.ProcessName = ProcessName self.AllowEvents = true @@ -66,13 +70,15 @@ end --- StateMachine callback function for a PROCESS -- @param #PROCESS self --- @param StateMachine#STATEMACHINE_TASK Fsm +-- @param StateMachine#STATEMACHINE_PROCESS Fsm -- @param #string Event -- @param #string From -- @param #string To function PROCESS:OnStateChange( Fsm, Event, From, To ) self:E( { Event, From, To, self.ProcessUnit.UnitName } ) + MESSAGE:New( "Process " .. self.ProcessName .. " : " .. Event .. " changed to state " .. To, 15 ):ToAll() + if self.Scores[To] then local Scoring = self.Task:GetScoring() diff --git a/Moose Development/Moose/Process_Assign.lua b/Moose Development/Moose/Process_Assign.lua index 6d65febab..7a21aa97b 100644 --- a/Moose Development/Moose/Process_Assign.lua +++ b/Moose Development/Moose/Process_Assign.lua @@ -19,7 +19,7 @@ PROCESS_ASSIGN = { function PROCESS_ASSIGN:New( Task, ProcessUnit, TaskBriefing ) -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( Task, ProcessUnit ) ) -- #PROCESS_ASSIGN + local self = BASE:Inherit( self, PROCESS:New( "ASSIGN", Task, ProcessUnit ) ) -- #PROCESS_ASSIGN self.TaskBriefing = TaskBriefing diff --git a/Moose Development/Moose/Process_CAS.lua b/Moose Development/Moose/Process_CAS.lua index 1d2bcc661..92a0a03ae 100644 --- a/Moose Development/Moose/Process_CAS.lua +++ b/Moose Development/Moose/Process_CAS.lua @@ -21,7 +21,7 @@ PROCESS_CAS = { function PROCESS_CAS:New( Task, ProcessUnit, TargetSetUnit ) -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( Task, ProcessUnit ) ) -- #PROCESS_CAS + local self = BASE:Inherit( self, PROCESS:New( "CAS", Task, ProcessUnit ) ) -- #PROCESS_CAS self.TargetSetUnit = TargetSetUnit diff --git a/Moose Development/Moose/Process_Route.lua b/Moose Development/Moose/Process_Route.lua index 35cc6a676..1c93e16d8 100644 --- a/Moose Development/Moose/Process_Route.lua +++ b/Moose Development/Moose/Process_Route.lua @@ -19,7 +19,7 @@ PROCESS_ROUTE = { function PROCESS_ROUTE:New( Task, ProcessUnit, TargetZone ) -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( Task, ProcessUnit ) ) -- #PROCESS_ROUTE + local self = BASE:Inherit( self, PROCESS:New( "ROUTE", Task, ProcessUnit ) ) -- #PROCESS_ROUTE self.TargetZone = TargetZone self.DisplayInterval = 30 diff --git a/Moose Development/Moose/Process_SEAD.lua b/Moose Development/Moose/Process_SEAD.lua index 7ccf4d325..ed4e0ea98 100644 --- a/Moose Development/Moose/Process_SEAD.lua +++ b/Moose Development/Moose/Process_SEAD.lua @@ -21,7 +21,7 @@ PROCESS_SEAD = { function PROCESS_SEAD:New( Task, ProcessUnit, TargetSetUnit ) -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( Task, ProcessUnit ) ) -- #PROCESS_SEAD + local self = BASE:Inherit( self, PROCESS:New( "SEAD", Task, ProcessUnit ) ) -- #PROCESS_SEAD self.TargetSetUnit = TargetSetUnit @@ -75,6 +75,7 @@ end -- @param Event#EVENTDATA Event function PROCESS_SEAD:OnHitTarget( Fsm, Event, From, To, Event ) + MESSAGE:New( "TargetCount = " .. self.TargetSetUnit:Count(), 15 ):ToAll() if self.TargetSetUnit:Count() > 0 then self:NextEvent( Fsm.MoreTargets ) else diff --git a/Moose Development/Moose/Set.lua b/Moose Development/Moose/Set.lua index 189372ac6..b4555773f 100644 --- a/Moose Development/Moose/Set.lua +++ b/Moose Development/Moose/Set.lua @@ -1453,7 +1453,7 @@ function SET_UNIT:IsIncludeObject( MUnit ) if self.Filter.RadarTypes then local MUnitRadar = false for RadarTypeID, RadarType in pairs( self.Filter.RadarTypes ) do - self:T3( { "Radar:", RadarType } ) + self:E( { "Radar:", RadarType } ) if MUnit:HasSensors( Unit.SensorType.RADAR, RadarType ) then MUnitRadar = true end diff --git a/Moose Development/Moose/StateMachine.lua b/Moose Development/Moose/StateMachine.lua index 02e2167f5..3be3a4c8a 100644 --- a/Moose Development/Moose/StateMachine.lua +++ b/Moose Development/Moose/StateMachine.lua @@ -1,4 +1,9 @@ --- This module contains the STATEMACHINE class. +-- This development is based on a state machine implementation made by Conroy Kyle. +-- The state machine can be found here: https://github.com/kyleconroy/lua-state-machine +-- +-- I've taken the development and enhanced it to make the state machine hierarchical... +-- It is a fantastic development, this module. -- -- === -- diff --git a/Moose Development/Moose/Task.lua b/Moose Development/Moose/Task.lua index e92cf732a..bd2007aea 100644 --- a/Moose Development/Moose/Task.lua +++ b/Moose Development/Moose/Task.lua @@ -332,6 +332,19 @@ function TASK_BASE:SetBriefing( TaskBriefing ) return self end +--- StateMachine callback function for a TASK +-- @param #TASK_BASE self +-- @param StateMachine#STATEMACHINE_TASK Fsm +-- @param #string Event +-- @param #string From +-- @param #string To +-- @param Event#EVENTDATA Event +function TASK_BASE:OnStateChange( Fsm, Event, From, To ) + + MESSAGE:New( "Task " .. self.TaskName .. " : " .. Event .. " changed to state " .. To, 15 ):ToAll() + self:SetState( self, "State", To ) + +end --- @param #TASK_BASE self diff --git a/Moose Development/Moose/Task_SEAD.lua b/Moose Development/Moose/Task_SEAD.lua index 7b76c2da7..80d6f7385 100644 --- a/Moose Development/Moose/Task_SEAD.lua +++ b/Moose Development/Moose/Task_SEAD.lua @@ -78,12 +78,15 @@ end -- @param #string From -- @param #string To -- @param Event#EVENTDATA Event -function TASK_SEAD:OnNext( Fsm, Event, From, To, Event ) +function TASK_SEAD:OnNext( Fsm, Event, From, To ) self:SetState( self, "State", To ) end + + + --- @param #TASK_SEAD self function TASK_SEAD:_Schedule() self:F2() diff --git a/Moose Test Missions/Moose_Test_TASK_DISPATCHER/Moose_Test_TASK_DISPATCHER.miz b/Moose Test Missions/Moose_Test_TASK_DISPATCHER/Moose_Test_TASK_DISPATCHER.miz index 0102a8dd4..2226db416 100644 Binary files a/Moose Test Missions/Moose_Test_TASK_DISPATCHER/Moose_Test_TASK_DISPATCHER.miz and b/Moose Test Missions/Moose_Test_TASK_DISPATCHER/Moose_Test_TASK_DISPATCHER.miz differ