mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
#OPERATION
* Added GetTargets() #TARGET * Also call Dead() when no targets left over #PLAYERTASKCONTROLLER * Added FSM events for Flaring, Smoking, and Illumination * Added Illumination of targets in menu if it is night * Rename menu parent setting to SetParentMenu(Menu)
This commit is contained in:
parent
1fc541a9df
commit
37a00f25bc
@ -467,7 +467,7 @@ function OPERATION:SetPhaseConditonOver(Phase, Condition)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Add codition function when the given phase is over. Must return a `#boolean`.
|
--- Add condition function when the given phase is over. Must return a `#boolean`.
|
||||||
-- @param #OPERATION self
|
-- @param #OPERATION self
|
||||||
-- @param #OPERATION.Phase Phase The phase.
|
-- @param #OPERATION.Phase Phase The phase.
|
||||||
-- @param #function Function Function that needs to be `true`before the phase is over.
|
-- @param #function Function Function that needs to be `true`before the phase is over.
|
||||||
@ -739,6 +739,20 @@ function OPERATION:AddTarget(Target, Phase)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Add Targets from operation.
|
||||||
|
-- @param #OPERATION self
|
||||||
|
-- @param #OPERATION.Phase Phase
|
||||||
|
-- @return #table Targets Table of #TARGET objects
|
||||||
|
function OPERATION:GetTargets(Phase)
|
||||||
|
local N = {}
|
||||||
|
for _,_target in pairs(self.targets) do
|
||||||
|
local target=_target --Ops.Target#TARGET
|
||||||
|
if target:IsAlive() and (Phase==nil or target.phase==Phase) then
|
||||||
|
table.insert(N,target)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return N
|
||||||
|
end
|
||||||
|
|
||||||
--- Count targets alive.
|
--- Count targets alive.
|
||||||
-- @param #OPERATION self
|
-- @param #OPERATION self
|
||||||
@ -896,7 +910,7 @@ function OPERATION:onafterStart(From, Event, To)
|
|||||||
|
|
||||||
-- Debug message.
|
-- Debug message.
|
||||||
self:T(self.lid..string.format("Starting Operation!"))
|
self:T(self.lid..string.format("Starting Operation!"))
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -967,6 +981,8 @@ function OPERATION:onafterStatusUpdate(From, Event, To)
|
|||||||
|
|
||||||
-- Next status update.
|
-- Next status update.
|
||||||
self:__StatusUpdate(-30)
|
self:__StatusUpdate(-30)
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -978,7 +994,6 @@ end
|
|||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param #OPERATION.Phase Phase The new phase.
|
|
||||||
function OPERATION:onafterPhaseNext(From, Event, To)
|
function OPERATION:onafterPhaseNext(From, Event, To)
|
||||||
|
|
||||||
-- Get next phase.
|
-- Get next phase.
|
||||||
@ -996,6 +1011,7 @@ function OPERATION:onafterPhaseNext(From, Event, To)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -1023,6 +1039,7 @@ function OPERATION:onafterPhaseChange(From, Event, To, Phase)
|
|||||||
-- Phase is active.
|
-- Phase is active.
|
||||||
self:SetPhaseStatus(Phase, OPERATION.PhaseStatus.ACTIVE)
|
self:SetPhaseStatus(Phase, OPERATION.PhaseStatus.ACTIVE)
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "BranchSwitch" event.
|
--- On after "BranchSwitch" event.
|
||||||
@ -1038,7 +1055,8 @@ function OPERATION:onafterBranchSwitch(From, Event, To, Branch)
|
|||||||
|
|
||||||
-- Set active branch.
|
-- Set active branch.
|
||||||
self.branchActive=Branch
|
self.branchActive=Branch
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Over" event.
|
--- On after "Over" event.
|
||||||
@ -1062,7 +1080,9 @@ function OPERATION:onafterOver(From, Event, To)
|
|||||||
local phase=_phase --#OPERATION.Phase
|
local phase=_phase --#OPERATION.Phase
|
||||||
self:SetPhaseStatus(phase, OPERATION.PhaseStatus.OVER)
|
self:SetPhaseStatus(phase, OPERATION.PhaseStatus.OVER)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -654,7 +654,7 @@ function PLAYERTASK:onafterStatus(From, Event, To)
|
|||||||
|
|
||||||
-- Check Target status
|
-- Check Target status
|
||||||
local targetdead = false
|
local targetdead = false
|
||||||
if self.Target:IsDead() or self.Target:IsDestroyed() then
|
if self.Target:IsDead() or self.Target:IsDestroyed() or self.Target:CountTargets() == 0 then
|
||||||
targetdead = true
|
targetdead = true
|
||||||
self:__Success(-2)
|
self:__Success(-2)
|
||||||
status = "Success"
|
status = "Success"
|
||||||
@ -1397,7 +1397,7 @@ PLAYERTASKCONTROLLER.Messages = {
|
|||||||
|
|
||||||
--- PLAYERTASK class version.
|
--- PLAYERTASK class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
PLAYERTASKCONTROLLER.version="0.1.44"
|
PLAYERTASKCONTROLLER.version="0.1.45"
|
||||||
|
|
||||||
--- Create and run a new TASKCONTROLLER instance.
|
--- Create and run a new TASKCONTROLLER instance.
|
||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
@ -1474,6 +1474,9 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
|
|||||||
self:AddTransition("*", "TaskCancelled", "*")
|
self:AddTransition("*", "TaskCancelled", "*")
|
||||||
self:AddTransition("*", "TaskSuccess", "*")
|
self:AddTransition("*", "TaskSuccess", "*")
|
||||||
self:AddTransition("*", "TaskFailed", "*")
|
self:AddTransition("*", "TaskFailed", "*")
|
||||||
|
self:AddTransition("*", "TaskTargetSmoked", "*")
|
||||||
|
self:AddTransition("*", "TaskTargetFlared", "*")
|
||||||
|
self:AddTransition("*", "TaskTargetIlluminated", "*")
|
||||||
self:AddTransition("*", "TaskRepeatOnFailed", "*")
|
self:AddTransition("*", "TaskRepeatOnFailed", "*")
|
||||||
self:AddTransition("*", "Stop", "Stopped")
|
self:AddTransition("*", "Stop", "Stopped")
|
||||||
|
|
||||||
@ -1544,6 +1547,30 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param Ops.PlayerTask#PLAYERTASK Task
|
-- @param Ops.PlayerTask#PLAYERTASK Task
|
||||||
|
|
||||||
|
--- On After "TaskTargetSmoked" event. Task smoked.
|
||||||
|
-- @function [parent=#PLAYERTASKCONTROLLER] OnAfterTaskTargetSmoked
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Ops.PlayerTask#PLAYERTASK Task
|
||||||
|
|
||||||
|
--- On After "TaskTargetFlared" event. Task flared.
|
||||||
|
-- @function [parent=#PLAYERTASKCONTROLLER] OnAfterTaskTargetFlared
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Ops.PlayerTask#PLAYERTASK Task
|
||||||
|
|
||||||
|
--- On After "TaskTargetIlluminated" event. Task illuminated.
|
||||||
|
-- @function [parent=#PLAYERTASKCONTROLLER] OnAfterTaskTargetIlluminated
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Ops.PlayerTask#PLAYERTASK Task
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- [Internal] Init localization
|
--- [Internal] Init localization
|
||||||
@ -2869,6 +2896,7 @@ function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client)
|
|||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||||
end
|
end
|
||||||
|
self:__TaskTargetSmoked(5,task)
|
||||||
else
|
else
|
||||||
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
||||||
end
|
end
|
||||||
@ -2897,6 +2925,36 @@ function PLAYERTASKCONTROLLER:_FlareTask(Group, Client)
|
|||||||
if self.UseSRS then
|
if self.UseSRS then
|
||||||
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||||
end
|
end
|
||||||
|
self:__TaskTargetFlared(5,task)
|
||||||
|
else
|
||||||
|
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
||||||
|
end
|
||||||
|
if not self.NoScreenOutput then
|
||||||
|
local m=MESSAGE:New(text,15,"Tasking"):ToClient(Client)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- [Internal] Illuminate task location
|
||||||
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
|
-- @param Wrapper.Group#GROUP Group
|
||||||
|
-- @param Wrapper.Client#CLIENT Client
|
||||||
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
|
function PLAYERTASKCONTROLLER:_IlluminateTask(Group, Client)
|
||||||
|
self:T(self.lid.."_IlluminateTask")
|
||||||
|
local playername, ttsplayername = self:_GetPlayerName(Client)
|
||||||
|
local text = ""
|
||||||
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
|
local task = self.TasksPerPlayer:ReadByID(playername) -- Ops.PlayerTask#PLAYERTASK
|
||||||
|
task:FlareTarget()
|
||||||
|
local textmark = self.gettext:GetEntry("FLARETASK",self.locale)
|
||||||
|
text = string.format(textmark, ttsplayername, self.MenuName or self.Name, task.PlayerTaskNr)
|
||||||
|
self:T(self.lid..text)
|
||||||
|
--local m=MESSAGE:New(text,"10","Tasking"):ToAll()
|
||||||
|
if self.UseSRS then
|
||||||
|
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||||
|
end
|
||||||
|
self:__TaskTargetIlluminated(5,task)
|
||||||
else
|
else
|
||||||
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
||||||
end
|
end
|
||||||
@ -2912,7 +2970,7 @@ end
|
|||||||
-- @param Wrapper.Client#CLIENT Client
|
-- @param Wrapper.Client#CLIENT Client
|
||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
|
function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
|
||||||
self:T(self.lid.."_FlareTask")
|
self:T(self.lid.."_AbortTask")
|
||||||
local playername, ttsplayername = self:_GetPlayerName(Client)
|
local playername, ttsplayername = self:_GetPlayerName(Client)
|
||||||
local text = ""
|
local text = ""
|
||||||
if self.TasksPerPlayer:HasUniqueID(playername) then
|
if self.TasksPerPlayer:HasUniqueID(playername) then
|
||||||
@ -3080,6 +3138,10 @@ function PLAYERTASKCONTROLLER:_BuildMenus(Client,enforced,fromsuccess)
|
|||||||
-- no smoking/flaring here if A2A or designer has set noflaresmokemenu to true
|
-- no smoking/flaring here if A2A or designer has set noflaresmokemenu to true
|
||||||
local smoke = MENU_GROUP_COMMAND_DELAYED:New(group,menusmoke,active,self._SmokeTask,self,group,client)
|
local smoke = MENU_GROUP_COMMAND_DELAYED:New(group,menusmoke,active,self._SmokeTask,self,group,client)
|
||||||
local flare = MENU_GROUP_COMMAND_DELAYED:New(group,menuflare,active,self._FlareTask,self,group,client)
|
local flare = MENU_GROUP_COMMAND_DELAYED:New(group,menuflare,active,self._FlareTask,self,group,client)
|
||||||
|
local IsNight = client:GetCoordinate():IsNight()
|
||||||
|
if IsNight then
|
||||||
|
local light = MENU_GROUP_COMMAND_DELAYED:New(group,menuflare,active,self._IlluminateTask,self,group,client)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local abort = MENU_GROUP_COMMAND_DELAYED:New(group,menuabort,active,self._AbortTask,self,group,client)
|
local abort = MENU_GROUP_COMMAND_DELAYED:New(group,menuabort,active,self._AbortTask,self,group,client)
|
||||||
@ -3244,7 +3306,7 @@ end
|
|||||||
-- @param #PLAYERTASKCONTROLLER self
|
-- @param #PLAYERTASKCONTROLLER self
|
||||||
-- @param Core.Menu#MENU_MISSION Menu
|
-- @param Core.Menu#MENU_MISSION Menu
|
||||||
-- @return #PLAYERTASKCONTROLLER self
|
-- @return #PLAYERTASKCONTROLLER self
|
||||||
function PLAYERTASKCONTROLLER:SetParentName(Menu)
|
function PLAYERTASKCONTROLLER:SetParentMenu(Menu)
|
||||||
self:T(self.lid.."SetParentName")
|
self:T(self.lid.."SetParentName")
|
||||||
self.MenuParent = Menu
|
self.MenuParent = Menu
|
||||||
return self
|
return self
|
||||||
|
|||||||
@ -617,7 +617,9 @@ function TARGET:onafterStatus(From, Event, To)
|
|||||||
-- Log output verbose=1.
|
-- Log output verbose=1.
|
||||||
if self.verbose>=1 then
|
if self.verbose>=1 then
|
||||||
local text=string.format("%s: Targets=%d/%d Life=%.1f/%.1f Damage=%.1f", fsmstate, self:CountTargets(), self.N0, self:GetLife(), self:GetLife0(), self:GetDamage())
|
local text=string.format("%s: Targets=%d/%d Life=%.1f/%.1f Damage=%.1f", fsmstate, self:CountTargets(), self.N0, self:GetLife(), self:GetLife0(), self:GetDamage())
|
||||||
if damaged then
|
if self:CountTargets() == 0 then
|
||||||
|
text=text.." Dead!"
|
||||||
|
elseif damaged then
|
||||||
text=text.." Damaged!"
|
text=text.." Damaged!"
|
||||||
end
|
end
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
@ -633,7 +635,11 @@ function TARGET:onafterStatus(From, Event, To)
|
|||||||
end
|
end
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if self:CountTargets() == 0 then
|
||||||
|
self:Dead()
|
||||||
|
end
|
||||||
|
|
||||||
-- Update status again in 30 sec.
|
-- Update status again in 30 sec.
|
||||||
if self:IsAlive() then
|
if self:IsAlive() then
|
||||||
self:__Status(-self.TStatus)
|
self:__Status(-self.TStatus)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user