mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Improved Task Goal monitoring
This commit is contained in:
parent
6126ec9450
commit
f0c20be967
@ -78,7 +78,6 @@ do -- ACT_ACCOUNT
|
|||||||
self:AddTransition( "Account", "NoMore", "Accounted")
|
self:AddTransition( "Account", "NoMore", "Accounted")
|
||||||
self:AddTransition( "*", "Fail", "Failed")
|
self:AddTransition( "*", "Fail", "Failed")
|
||||||
|
|
||||||
self:AddEndState( "Accounted" )
|
|
||||||
self:AddEndState( "Failed" )
|
self:AddEndState( "Failed" )
|
||||||
|
|
||||||
self:SetStartState( "Assigned" )
|
self:SetStartState( "Assigned" )
|
||||||
@ -97,6 +96,7 @@ do -- ACT_ACCOUNT
|
|||||||
function ACT_ACCOUNT:onafterStart( ProcessUnit, From, Event, To )
|
function ACT_ACCOUNT:onafterStart( ProcessUnit, From, Event, To )
|
||||||
|
|
||||||
self:HandleEvent( EVENTS.Dead, self.onfuncEventDead )
|
self:HandleEvent( EVENTS.Dead, self.onfuncEventDead )
|
||||||
|
self:HandleEvent( EVENTS.Crash, self.onfuncEventCrash )
|
||||||
|
|
||||||
self:__Wait( 1 )
|
self:__Wait( 1 )
|
||||||
end
|
end
|
||||||
@ -206,7 +206,7 @@ do -- ACT_ACCOUNT_DEADS
|
|||||||
function ACT_ACCOUNT_DEADS:onenterAccount( ProcessUnit, Task, From, Event, To, EventData )
|
function ACT_ACCOUNT_DEADS:onenterAccount( ProcessUnit, Task, From, Event, To, EventData )
|
||||||
self:T( { ProcessUnit, EventData, From, Event, To } )
|
self:T( { ProcessUnit, EventData, From, Event, To } )
|
||||||
|
|
||||||
self:T({self.Controllable})
|
self:T( { self.Controllable } )
|
||||||
|
|
||||||
self.TargetSetUnit:Flush()
|
self.TargetSetUnit:Flush()
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ do -- ACT_ACCOUNT_DEADS
|
|||||||
self:T( "Sending Message" )
|
self:T( "Sending Message" )
|
||||||
local TaskGroup = ProcessUnit:GetGroup()
|
local TaskGroup = ProcessUnit:GetGroup()
|
||||||
self.TargetSetUnit:Remove( EventData.IniUnitName )
|
self.TargetSetUnit:Remove( EventData.IniUnitName )
|
||||||
self:Message( "You hit a target. Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." )
|
self:Message( "Target destroyed. Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed." )
|
||||||
end
|
end
|
||||||
self:T( { "After sending Message" } )
|
self:T( { "After sending Message" } )
|
||||||
end
|
end
|
||||||
@ -247,4 +247,16 @@ do -- ACT_ACCOUNT_DEADS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- DCS Events
|
||||||
|
|
||||||
|
--- @param #ACT_ACCOUNT_DEADS self
|
||||||
|
-- @param Event#EVENTDATA EventData
|
||||||
|
function ACT_ACCOUNT_DEADS:onfuncEventCrash( EventData )
|
||||||
|
self:T( { "EventDead", EventData } )
|
||||||
|
|
||||||
|
if EventData.IniDCSUnit then
|
||||||
|
self:Event( EventData )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end -- ACT_ACCOUNT DEADS
|
end -- ACT_ACCOUNT DEADS
|
||||||
|
|||||||
@ -198,7 +198,7 @@ do -- ACT_ROUTE
|
|||||||
RouteText = Coordinate:ToStringFromRP( ShortestReferencePoint, ShortestReferenceName, Controllable )
|
RouteText = Coordinate:ToStringFromRP( ShortestReferencePoint, ShortestReferenceName, Controllable )
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
RouteText = self.Coordinate:ToString( Controllable )
|
RouteText = Coordinate:ToString( Controllable )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1084,12 +1084,7 @@ end
|
|||||||
|
|
||||||
self.Task:Fail()
|
self.Task:Fail()
|
||||||
end
|
end
|
||||||
|
|
||||||
function FSM_PROCESS:onenterSuccess( ProcessUnit )
|
|
||||||
self:T( "Success" )
|
|
||||||
|
|
||||||
self.Task:Success()
|
|
||||||
end
|
|
||||||
|
|
||||||
--- StateMachine callback function for a FSM_PROCESS
|
--- StateMachine callback function for a FSM_PROCESS
|
||||||
-- @param #FSM_PROCESS self
|
-- @param #FSM_PROCESS self
|
||||||
|
|||||||
@ -802,7 +802,7 @@ end
|
|||||||
-- @param #SET_GROUP self
|
-- @param #SET_GROUP self
|
||||||
-- @return #SET_GROUP self
|
-- @return #SET_GROUP self
|
||||||
function SET_GROUP:FilterCategoryAirplane()
|
function SET_GROUP:FilterCategoryAirplane()
|
||||||
self:FilterCategories( "airplane" )
|
self:FilterCategories( "plane" )
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -170,6 +170,36 @@ function TASK:New( Mission, SetGroupAssign, TaskName, TaskType, TaskBriefing )
|
|||||||
self:AddTransition( "Assigned", "Fail", "Failed" )
|
self:AddTransition( "Assigned", "Fail", "Failed" )
|
||||||
self:AddTransition( "Assigned", "Abort", "Aborted" )
|
self:AddTransition( "Assigned", "Abort", "Aborted" )
|
||||||
self:AddTransition( "Assigned", "Cancel", "Cancelled" )
|
self:AddTransition( "Assigned", "Cancel", "Cancelled" )
|
||||||
|
self:AddTransition( "Assigned", "Goal", "*" )
|
||||||
|
|
||||||
|
--- Goal Handler OnBefore for TASK
|
||||||
|
-- @function [parent=#TASK] OnBeforeGoal
|
||||||
|
-- @param #TASK self
|
||||||
|
-- @param Wrapper.Controllable#CONTROLLABLE Controllable
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
-- @return #boolean
|
||||||
|
|
||||||
|
--- Goal Handler OnAfter for TASK
|
||||||
|
-- @function [parent=#TASK] OnAfterGoal
|
||||||
|
-- @param #TASK self
|
||||||
|
-- @param Wrapper.Controllable#CONTROLLABLE Controllable
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
|
||||||
|
--- Goal Trigger for TASK
|
||||||
|
-- @function [parent=#TASK] Goal
|
||||||
|
-- @param #TASK self
|
||||||
|
|
||||||
|
--- Goal Asynchronous Trigger for TASK
|
||||||
|
-- @function [parent=#TASK] __Goal
|
||||||
|
-- @param #TASK self
|
||||||
|
-- @param #number Delay
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self:AddTransition( "*", "PlayerCrashed", "*" )
|
self:AddTransition( "*", "PlayerCrashed", "*" )
|
||||||
self:AddTransition( "*", "PlayerAborted", "*" )
|
self:AddTransition( "*", "PlayerAborted", "*" )
|
||||||
self:AddTransition( "*", "PlayerDead", "*" )
|
self:AddTransition( "*", "PlayerDead", "*" )
|
||||||
@ -479,7 +509,7 @@ do -- Group Assignment
|
|||||||
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
||||||
local PlayerName = TaskUnit:GetPlayerName()
|
local PlayerName = TaskUnit:GetPlayerName()
|
||||||
self:E(PlayerName)
|
self:E(PlayerName)
|
||||||
if PlayerName ~= nil or PlayerName ~= "" then
|
if PlayerName ~= nil and PlayerName ~= "" then
|
||||||
self:AssignToUnit( TaskUnit )
|
self:AssignToUnit( TaskUnit )
|
||||||
CommandCenter:MessageToGroup(
|
CommandCenter:MessageToGroup(
|
||||||
string.format( 'Task "%s": Briefing for player (%s):\n%s',
|
string.format( 'Task "%s": Briefing for player (%s):\n%s',
|
||||||
@ -1158,6 +1188,9 @@ function TASK:onenterAssigned( From, Event, To, PlayerUnit, PlayerName )
|
|||||||
|
|
||||||
self:GetMission():__Start( 1 )
|
self:GetMission():__Start( 1 )
|
||||||
|
|
||||||
|
-- When the task is assigned, the task goal needs to be checked of the derived classes.
|
||||||
|
self:__Goal( -10 ) -- Polymorphic
|
||||||
|
|
||||||
self:SetMenu()
|
self:SetMenu()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -75,14 +75,14 @@ do -- TASK_A2A
|
|||||||
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
|
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
|
||||||
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
|
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
|
||||||
|
|
||||||
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), { Accounted = "Success" } )
|
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), {} )
|
||||||
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
|
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
|
||||||
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
|
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
|
||||||
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )
|
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )
|
||||||
Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" )
|
Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" )
|
||||||
|
|
||||||
Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" )
|
-- Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" )
|
||||||
Fsm:AddTransition( "Accounted", "Success", "Success" )
|
-- Fsm:AddTransition( "Accounted", "Success", "Success" )
|
||||||
Fsm:AddTransition( "Rejected", "Reject", "Aborted" )
|
Fsm:AddTransition( "Rejected", "Reject", "Aborted" )
|
||||||
Fsm:AddTransition( "Failed", "Fail", "Failed" )
|
Fsm:AddTransition( "Failed", "Fail", "Failed" )
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ do -- TASK_A2A
|
|||||||
function TASK_A2A:GetPlannedMenuText()
|
function TASK_A2A:GetPlannedMenuText()
|
||||||
return self:GetStateString() .. " - " .. self:GetTaskName() .. " ( " .. self.TargetSetUnit:GetUnitTypesText() .. " )"
|
return self:GetStateString() .. " - " .. self:GetTaskName() .. " ( " .. self.TargetSetUnit:GetUnitTypesText() .. " )"
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param #TASK_A2A self
|
--- @param #TASK_A2A self
|
||||||
-- @param Core.Point#COORDINATE RendezVousCoordinate The Coordinate object referencing to the 2D point where the RendezVous point is located on the map.
|
-- @param Core.Point#COORDINATE RendezVousCoordinate The Coordinate object referencing to the 2D point where the RendezVous point is located on the map.
|
||||||
-- @param #number RendezVousRange The RendezVousRange that defines when the player is considered to have arrived at the RendezVous point.
|
-- @param #number RendezVousRange The RendezVousRange that defines when the player is considered to have arrived at the RendezVous point.
|
||||||
@ -351,7 +351,7 @@ do -- TASK_A2A_INTERCEPT
|
|||||||
-- @param #string TaskName The name of the Task.
|
-- @param #string TaskName The name of the Task.
|
||||||
-- @param Core.Set#SET_UNIT TargetSetUnit
|
-- @param Core.Set#SET_UNIT TargetSetUnit
|
||||||
-- @param #string TaskBriefing The briefing of the task.
|
-- @param #string TaskBriefing The briefing of the task.
|
||||||
-- @return #TASK_A2A_INTERCEPT self
|
-- @return #TASK_A2A_INTERCEPT
|
||||||
function TASK_A2A_INTERCEPT:New( Mission, SetGroup, TaskName, TargetSetUnit, TaskBriefing )
|
function TASK_A2A_INTERCEPT:New( Mission, SetGroup, TaskName, TargetSetUnit, TaskBriefing )
|
||||||
local self = BASE:Inherit( self, TASK_A2A:New( Mission, SetGroup, TaskName, TargetSetUnit, "INTERCEPT", TaskBriefing ) ) -- #TASK_A2A_INTERCEPT
|
local self = BASE:Inherit( self, TASK_A2A:New( Mission, SetGroup, TaskName, TargetSetUnit, "INTERCEPT", TaskBriefing ) ) -- #TASK_A2A_INTERCEPT
|
||||||
self:F()
|
self:F()
|
||||||
@ -376,6 +376,21 @@ do -- TASK_A2A_INTERCEPT
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- @param #TASK_A2A_INTERCEPT self
|
||||||
|
function TASK_A2A_INTERCEPT:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -438,6 +453,17 @@ do -- TASK_A2A_SWEEP
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param #TASK_A2A_SWEEP self
|
||||||
|
function TASK_A2A_SWEEP:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -498,5 +524,17 @@ do -- TASK_A2A_ENGAGE
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param #TASK_A2A_ENGAGE self
|
||||||
|
function TASK_A2A_ENGAGE:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -75,14 +75,14 @@ do -- TASK_A2G
|
|||||||
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
|
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" )
|
||||||
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
|
Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "HoldAtRendezVous", "HoldingAtRendezVous" )
|
||||||
|
|
||||||
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), { Accounted = "Success" } )
|
Fsm:AddProcess ( "Engaging", "Account", ACT_ACCOUNT_DEADS:New( self.TargetSetUnit, self.TaskType ), {} )
|
||||||
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
|
Fsm:AddTransition( "Engaging", "RouteToTarget", "Engaging" )
|
||||||
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
|
Fsm:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} )
|
||||||
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )
|
Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} )
|
||||||
Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" )
|
Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" )
|
||||||
|
|
||||||
Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" )
|
--Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" )
|
||||||
Fsm:AddTransition( "Accounted", "Success", "Success" )
|
--Fsm:AddTransition( "Accounted", "Success", "Success" )
|
||||||
Fsm:AddTransition( "Rejected", "Reject", "Aborted" )
|
Fsm:AddTransition( "Rejected", "Reject", "Aborted" )
|
||||||
Fsm:AddTransition( "Failed", "Fail", "Failed" )
|
Fsm:AddTransition( "Failed", "Fail", "Failed" )
|
||||||
|
|
||||||
@ -369,6 +369,17 @@ do -- TASK_A2G_SEAD
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param #TASK_A2G_SEAD self
|
||||||
|
function TASK_A2G_SEAD:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
do -- TASK_A2G_BAI
|
do -- TASK_A2G_BAI
|
||||||
@ -422,6 +433,17 @@ do -- TASK_A2G_BAI
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param #TASK_A2G_BAI self
|
||||||
|
function TASK_A2G_BAI:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
do -- TASK_A2G_CAS
|
do -- TASK_A2G_CAS
|
||||||
@ -475,4 +497,15 @@ do -- TASK_A2G_CAS
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param #TASK_A2G_CAS self
|
||||||
|
function TASK_A2G_CAS:onafterGoal( TaskUnit, From, Event, To )
|
||||||
|
local TargetSetUnit = self.TargetSetUnit -- Core.Set#SET_UNIT
|
||||||
|
|
||||||
|
if TargetSetUnit:Count() == 0 then
|
||||||
|
self:Success()
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Goal( -10 )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user