From 153ff7bd5864cba274e61b7fced573b1694e5223 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Sun, 10 Jul 2016 14:44:55 +0200 Subject: [PATCH] Inform state changes --- Moose Development/Moose/DetectionManager.lua | 21 ++++++++++++++---- Moose Development/Moose/Message.lua | 2 +- Moose Development/Moose/Process.lua | 10 +++++++-- Moose Development/Moose/Process_Assign.lua | 2 +- Moose Development/Moose/Process_CAS.lua | 2 +- Moose Development/Moose/Process_Route.lua | 2 +- Moose Development/Moose/Process_SEAD.lua | 3 ++- Moose Development/Moose/Set.lua | 2 +- Moose Development/Moose/StateMachine.lua | 5 +++++ Moose Development/Moose/Task.lua | 13 +++++++++++ Moose Development/Moose/Task_SEAD.lua | 5 ++++- .../Moose_Test_TASK_DISPATCHER.miz | Bin 27376 -> 28034 bytes 12 files changed, 54 insertions(+), 13 deletions(-) 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 0102a8dd49a3a9610907befa1383c1e47d23bb3d..2226db4167a903dc3313ecbe24cff2639a0b83b2 100644 GIT binary patch delta 13157 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