mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
58 lines
2.3 KiB
Lua
58 lines
2.3 KiB
Lua
--- DESTROYGROUPSTASK
|
|
-- @module DESTROYGROUPSTASK
|
|
|
|
|
|
|
|
--- The DESTROYGROUPSTASK class
|
|
-- @type
|
|
DESTROYGROUPSTASK = {
|
|
ClassName = "DESTROYGROUPSTASK",
|
|
GoalVerb = "Destroy Groups",
|
|
}
|
|
|
|
--- Creates a new DESTROYGROUPSTASK.
|
|
-- @param #DESTROYGROUPSTASK self
|
|
-- @param #string DestroyGroupType String describing the group to be destroyed.
|
|
-- @param #string DestroyUnitType String describing the unit to be destroyed.
|
|
-- @param #list<#string> DestroyGroupNames Table of string containing the name of the groups to be destroyed before task is completed.
|
|
-- @param #number DestroyPercentage defines the %-tage that needs to be destroyed to achieve mission success. eg. If in the Group there are 10 units, then a value of 75 would require 8 units to be destroyed from the Group to complete the @{TASK}.
|
|
---@return DESTROYGROUPSTASK
|
|
function DESTROYGROUPSTASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage )
|
|
local self = BASE:Inherit( self, DESTROYBASETASK:New( DestroyGroupType, DestroyUnitType, DestroyGroupNames, DestroyPercentage ) )
|
|
self:F()
|
|
|
|
self.Name = 'Destroy Groups'
|
|
self.GoalVerb = "Destroy " .. DestroyGroupType
|
|
|
|
_EVENTDISPATCHER:OnDead( self.EventDead , self )
|
|
_EVENTDISPATCHER:OnCrash( self.EventDead , self )
|
|
|
|
return self
|
|
end
|
|
|
|
--- Report Goal Progress.
|
|
-- @param #DESTROYGROUPSTASK self
|
|
-- @param Dcs.DCSWrapper.Group#Group DestroyGroup Group structure describing the group to be evaluated.
|
|
-- @param Dcs.DCSWrapper.Unit#Unit DestroyUnit Unit structure describing the Unit to be evaluated.
|
|
-- @return #number The DestroyCount reflecting the amount of units destroyed within the group.
|
|
function DESTROYGROUPSTASK:ReportGoalProgress( DestroyGroup, DestroyUnit )
|
|
self:F( { DestroyGroup, DestroyUnit, self.DestroyPercentage } )
|
|
|
|
local DestroyGroupSize = DestroyGroup:getSize() - 1 -- When a DEAD event occurs, the getSize is still one larger than the destroyed unit.
|
|
local DestroyGroupInitialSize = DestroyGroup:getInitialSize()
|
|
self:T( { DestroyGroupSize, DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) } )
|
|
|
|
local DestroyCount = 0
|
|
if DestroyGroup then
|
|
if DestroyGroupSize <= DestroyGroupInitialSize - ( DestroyGroupInitialSize * self.DestroyPercentage / 100 ) then
|
|
DestroyCount = 1
|
|
end
|
|
else
|
|
DestroyCount = 1
|
|
end
|
|
|
|
self:T( DestroyCount )
|
|
|
|
return DestroyCount
|
|
end
|