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
|
||||
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.Phase Phase The phase.
|
||||
-- @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
|
||||
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.
|
||||
-- @param #OPERATION self
|
||||
@ -896,7 +910,7 @@ function OPERATION:onafterStart(From, Event, To)
|
||||
|
||||
-- Debug message.
|
||||
self:T(self.lid..string.format("Starting Operation!"))
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
@ -967,6 +981,8 @@ function OPERATION:onafterStatusUpdate(From, Event, To)
|
||||
|
||||
-- Next status update.
|
||||
self:__StatusUpdate(-30)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -978,7 +994,6 @@ end
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
-- @param #OPERATION.Phase Phase The new phase.
|
||||
function OPERATION:onafterPhaseNext(From, Event, To)
|
||||
|
||||
-- Get next phase.
|
||||
@ -996,6 +1011,7 @@ function OPERATION:onafterPhaseNext(From, Event, To)
|
||||
|
||||
end
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
@ -1023,6 +1039,7 @@ function OPERATION:onafterPhaseChange(From, Event, To, Phase)
|
||||
-- Phase is active.
|
||||
self:SetPhaseStatus(Phase, OPERATION.PhaseStatus.ACTIVE)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- On after "BranchSwitch" event.
|
||||
@ -1038,7 +1055,8 @@ function OPERATION:onafterBranchSwitch(From, Event, To, Branch)
|
||||
|
||||
-- Set active branch.
|
||||
self.branchActive=Branch
|
||||
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- On after "Over" event.
|
||||
@ -1062,7 +1080,9 @@ function OPERATION:onafterOver(From, Event, To)
|
||||
local phase=_phase --#OPERATION.Phase
|
||||
self:SetPhaseStatus(phase, OPERATION.PhaseStatus.OVER)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@ -654,7 +654,7 @@ function PLAYERTASK:onafterStatus(From, Event, To)
|
||||
|
||||
-- Check Target status
|
||||
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
|
||||
self:__Success(-2)
|
||||
status = "Success"
|
||||
@ -1397,7 +1397,7 @@ PLAYERTASKCONTROLLER.Messages = {
|
||||
|
||||
--- PLAYERTASK class version.
|
||||
-- @field #string version
|
||||
PLAYERTASKCONTROLLER.version="0.1.44"
|
||||
PLAYERTASKCONTROLLER.version="0.1.45"
|
||||
|
||||
--- Create and run a new TASKCONTROLLER instance.
|
||||
-- @param #PLAYERTASKCONTROLLER self
|
||||
@ -1474,6 +1474,9 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
|
||||
self:AddTransition("*", "TaskCancelled", "*")
|
||||
self:AddTransition("*", "TaskSuccess", "*")
|
||||
self:AddTransition("*", "TaskFailed", "*")
|
||||
self:AddTransition("*", "TaskTargetSmoked", "*")
|
||||
self:AddTransition("*", "TaskTargetFlared", "*")
|
||||
self:AddTransition("*", "TaskTargetIlluminated", "*")
|
||||
self:AddTransition("*", "TaskRepeatOnFailed", "*")
|
||||
self:AddTransition("*", "Stop", "Stopped")
|
||||
|
||||
@ -1544,6 +1547,30 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
|
||||
-- @param #string To To state.
|
||||
-- @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
|
||||
|
||||
--- [Internal] Init localization
|
||||
@ -2869,6 +2896,7 @@ function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client)
|
||||
if self.UseSRS then
|
||||
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||
end
|
||||
self:__TaskTargetSmoked(5,task)
|
||||
else
|
||||
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
||||
end
|
||||
@ -2897,6 +2925,36 @@ function PLAYERTASKCONTROLLER:_FlareTask(Group, Client)
|
||||
if self.UseSRS then
|
||||
self.SRSQueue:NewTransmission(text,nil,self.SRS,nil,2)
|
||||
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
|
||||
text = self.gettext:GetEntry("NOACTIVETASK",self.locale)
|
||||
end
|
||||
@ -2912,7 +2970,7 @@ end
|
||||
-- @param Wrapper.Client#CLIENT Client
|
||||
-- @return #PLAYERTASKCONTROLLER self
|
||||
function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
|
||||
self:T(self.lid.."_FlareTask")
|
||||
self:T(self.lid.."_AbortTask")
|
||||
local playername, ttsplayername = self:_GetPlayerName(Client)
|
||||
local text = ""
|
||||
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
|
||||
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 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
|
||||
local abort = MENU_GROUP_COMMAND_DELAYED:New(group,menuabort,active,self._AbortTask,self,group,client)
|
||||
@ -3244,7 +3306,7 @@ end
|
||||
-- @param #PLAYERTASKCONTROLLER self
|
||||
-- @param Core.Menu#MENU_MISSION Menu
|
||||
-- @return #PLAYERTASKCONTROLLER self
|
||||
function PLAYERTASKCONTROLLER:SetParentName(Menu)
|
||||
function PLAYERTASKCONTROLLER:SetParentMenu(Menu)
|
||||
self:T(self.lid.."SetParentName")
|
||||
self.MenuParent = Menu
|
||||
return self
|
||||
|
||||
@ -617,7 +617,9 @@ function TARGET:onafterStatus(From, Event, To)
|
||||
-- Log output verbose=1.
|
||||
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())
|
||||
if damaged then
|
||||
if self:CountTargets() == 0 then
|
||||
text=text.." Dead!"
|
||||
elseif damaged then
|
||||
text=text.." Damaged!"
|
||||
end
|
||||
self:I(self.lid..text)
|
||||
@ -633,7 +635,11 @@ function TARGET:onafterStatus(From, Event, To)
|
||||
end
|
||||
self:I(self.lid..text)
|
||||
end
|
||||
|
||||
|
||||
if self:CountTargets() == 0 then
|
||||
self:Dead()
|
||||
end
|
||||
|
||||
-- Update status again in 30 sec.
|
||||
if self:IsAlive() then
|
||||
self:__Status(-self.TStatus)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user