diff --git a/Moose Development/Moose/Actions/Act_Account.lua b/Moose Development/Moose/Actions/Act_Account.lua index 14e83b07f..7b91d657f 100644 --- a/Moose Development/Moose/Actions/Act_Account.lua +++ b/Moose Development/Moose/Actions/Act_Account.lua @@ -78,7 +78,6 @@ do -- ACT_ACCOUNT self:AddTransition( "Account", "NoMore", "Accounted") self:AddTransition( "*", "Fail", "Failed") - self:AddEndState( "Accounted" ) self:AddEndState( "Failed" ) self:SetStartState( "Assigned" ) @@ -97,6 +96,7 @@ do -- ACT_ACCOUNT function ACT_ACCOUNT:onafterStart( ProcessUnit, From, Event, To ) self:HandleEvent( EVENTS.Dead, self.onfuncEventDead ) + self:HandleEvent( EVENTS.Crash, self.onfuncEventCrash ) self:__Wait( 1 ) end @@ -206,7 +206,7 @@ do -- ACT_ACCOUNT_DEADS function ACT_ACCOUNT_DEADS:onenterAccount( ProcessUnit, Task, From, Event, To, EventData ) self:T( { ProcessUnit, EventData, From, Event, To } ) - self:T({self.Controllable}) + self:T( { self.Controllable } ) self.TargetSetUnit:Flush() @@ -215,7 +215,7 @@ do -- ACT_ACCOUNT_DEADS self:T( "Sending Message" ) local TaskGroup = ProcessUnit:GetGroup() 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 self:T( { "After sending Message" } ) end @@ -247,4 +247,16 @@ do -- ACT_ACCOUNT_DEADS 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 diff --git a/Moose Development/Moose/Actions/Act_Route.lua b/Moose Development/Moose/Actions/Act_Route.lua index 56d0a849c..4c36460a9 100644 --- a/Moose Development/Moose/Actions/Act_Route.lua +++ b/Moose Development/Moose/Actions/Act_Route.lua @@ -198,7 +198,7 @@ do -- ACT_ROUTE RouteText = Coordinate:ToStringFromRP( ShortestReferencePoint, ShortestReferenceName, Controllable ) end else - RouteText = self.Coordinate:ToString( Controllable ) + RouteText = Coordinate:ToString( Controllable ) end end diff --git a/Moose Development/Moose/Core/Fsm.lua b/Moose Development/Moose/Core/Fsm.lua index 6d47cc158..385f50a27 100644 --- a/Moose Development/Moose/Core/Fsm.lua +++ b/Moose Development/Moose/Core/Fsm.lua @@ -1084,12 +1084,7 @@ end self.Task:Fail() end - - function FSM_PROCESS:onenterSuccess( ProcessUnit ) - self:T( "Success" ) - - self.Task:Success() - end + --- StateMachine callback function for a FSM_PROCESS -- @param #FSM_PROCESS self diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index eed59c0bc..0152e5cb8 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -802,7 +802,7 @@ end -- @param #SET_GROUP self -- @return #SET_GROUP self function SET_GROUP:FilterCategoryAirplane() - self:FilterCategories( "airplane" ) + self:FilterCategories( "plane" ) return self end diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 8d86586ac..0b86e8d68 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -170,6 +170,36 @@ function TASK:New( Mission, SetGroupAssign, TaskName, TaskType, TaskBriefing ) self:AddTransition( "Assigned", "Fail", "Failed" ) self:AddTransition( "Assigned", "Abort", "Aborted" ) 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( "*", "PlayerAborted", "*" ) self:AddTransition( "*", "PlayerDead", "*" ) @@ -479,7 +509,7 @@ do -- Group Assignment local TaskUnit = UnitData -- Wrapper.Unit#UNIT local PlayerName = TaskUnit:GetPlayerName() self:E(PlayerName) - if PlayerName ~= nil or PlayerName ~= "" then + if PlayerName ~= nil and PlayerName ~= "" then self:AssignToUnit( TaskUnit ) CommandCenter:MessageToGroup( 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 ) + -- When the task is assigned, the task goal needs to be checked of the derived classes. + self:__Goal( -10 ) -- Polymorphic + self:SetMenu() end end diff --git a/Moose Development/Moose/Tasking/Task_A2A.lua b/Moose Development/Moose/Tasking/Task_A2A.lua index 33a6f806f..578226a1f 100644 --- a/Moose Development/Moose/Tasking/Task_A2A.lua +++ b/Moose Development/Moose/Tasking/Task_A2A.lua @@ -75,14 +75,14 @@ do -- TASK_A2A Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" ) 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:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} ) Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" ) - Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" ) - Fsm:AddTransition( "Accounted", "Success", "Success" ) +-- Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" ) +-- Fsm:AddTransition( "Accounted", "Success", "Success" ) Fsm:AddTransition( "Rejected", "Reject", "Aborted" ) Fsm:AddTransition( "Failed", "Fail", "Failed" ) @@ -170,7 +170,7 @@ do -- TASK_A2A function TASK_A2A:GetPlannedMenuText() return self:GetStateString() .. " - " .. self:GetTaskName() .. " ( " .. self.TargetSetUnit:GetUnitTypesText() .. " )" end - + --- @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 #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 Core.Set#SET_UNIT TargetSetUnit -- @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 ) local self = BASE:Inherit( self, TASK_A2A:New( Mission, SetGroup, TaskName, TargetSetUnit, "INTERCEPT", TaskBriefing ) ) -- #TASK_A2A_INTERCEPT self:F() @@ -376,6 +376,21 @@ do -- TASK_A2A_INTERCEPT return self 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 @@ -438,6 +453,17 @@ do -- TASK_A2A_SWEEP return self 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 @@ -498,5 +524,17 @@ do -- TASK_A2A_ENGAGE return self 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 diff --git a/Moose Development/Moose/Tasking/Task_A2G.lua b/Moose Development/Moose/Tasking/Task_A2G.lua index f333d4935..208d4d6a6 100644 --- a/Moose Development/Moose/Tasking/Task_A2G.lua +++ b/Moose Development/Moose/Tasking/Task_A2G.lua @@ -75,14 +75,14 @@ do -- TASK_A2G Fsm:AddTransition( { "ArrivedAtRendezVous", "HoldingAtRendezVous" }, "Engage", "Engaging" ) 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:AddProcess( "Engaging", "RouteToTargetZone", ACT_ROUTE_ZONE:New(), {} ) Fsm:AddProcess( "Engaging", "RouteToTargetPoint", ACT_ROUTE_POINT:New(), {} ) Fsm:AddTransition( "Engaging", "RouteToTargets", "Engaging" ) - Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" ) - Fsm:AddTransition( "Accounted", "Success", "Success" ) + --Fsm:AddTransition( "Accounted", "DestroyedAll", "Accounted" ) + --Fsm:AddTransition( "Accounted", "Success", "Success" ) Fsm:AddTransition( "Rejected", "Reject", "Aborted" ) Fsm:AddTransition( "Failed", "Fail", "Failed" ) @@ -369,6 +369,17 @@ do -- TASK_A2G_SEAD return self 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 do -- TASK_A2G_BAI @@ -422,6 +433,17 @@ do -- TASK_A2G_BAI return self 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 do -- TASK_A2G_CAS @@ -475,4 +497,15 @@ do -- TASK_A2G_CAS return self 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