Fixed bug during detection, when i unit got destroyed, the detection stopped. Fixed now

Added a test :IsAlive
This commit is contained in:
FlightControl 2016-06-22 09:31:44 +02:00
parent 08116dab2c
commit 062f34bd26
5 changed files with 2073 additions and 361 deletions

View File

@ -111,32 +111,34 @@ function DETECTION_BASE:_DetectionScheduler( SchedulerName )
if self.DetectedUnits then
for DetectedUnitName, DetectedUnitData in pairs( self.DetectedUnits ) do
local DetectedUnit = DetectedUnitData.DetectedUnit -- Unit#UNIT
self:T( DetectedUnit:GetName() )
if #self.DetectedUnitSets == 0 then
self:T( { "Adding Unit Set #", 1 } )
self.DetectedUnitSets[1] = {}
self.DetectedUnitSets[1].Zone = ZONE_UNIT:New( DetectedUnitName, DetectedUnit, self.DetectionZoneRange )
self.DetectedUnitSets[1].Set = SET_UNIT:New()
self.DetectedUnitSets[1].Set:AddUnit( DetectedUnit )
else
local AddedToSet = false
for DetectedUnitSetID, DetectedUnitSetData in pairs( self.DetectedUnitSets ) do
self:T( "Detected Unit Set #" .. DetectedUnitSetID )
local DetectedUnitSet = DetectedUnitSetData.Set -- Set#SET_UNIT
local DetectedZone = DetectedUnitSetData.Zone -- Zone#ZONE_UNIT
if DetectedUnit:IsInZone( DetectedZone ) then
self:T( "Adding to Unit Set #" .. DetectedUnitSetID )
self.DetectedUnitSets[DetectedUnitSetID].Set:AddUnit( DetectedUnit )
AddedToSet = true
if DetectedUnit and DetectedUnit:IsAlive() then
self:T( DetectedUnit:GetName() )
if #self.DetectedUnitSets == 0 then
self:T( { "Adding Unit Set #", 1 } )
self.DetectedUnitSets[1] = {}
self.DetectedUnitSets[1].Zone = ZONE_UNIT:New( DetectedUnitName, DetectedUnit, self.DetectionZoneRange )
self.DetectedUnitSets[1].Set = SET_UNIT:New()
self.DetectedUnitSets[1].Set:AddUnit( DetectedUnit )
else
local AddedToSet = false
for DetectedUnitSetID, DetectedUnitSetData in pairs( self.DetectedUnitSets ) do
self:T( "Detected Unit Set #" .. DetectedUnitSetID )
local DetectedUnitSet = DetectedUnitSetData.Set -- Set#SET_UNIT
local DetectedZone = DetectedUnitSetData.Zone -- Zone#ZONE_UNIT
if DetectedUnit:IsInZone( DetectedZone ) then
self:T( "Adding to Unit Set #" .. DetectedUnitSetID )
self.DetectedUnitSets[DetectedUnitSetID].Set:AddUnit( DetectedUnit )
AddedToSet = true
end
end
if AddedToSet == false then
self:T( "Adding new Unit Set #" .. #self.DetectedUnitSets+1 )
self.DetectedUnitSets[#self.DetectedUnitSets+1] = {}
self.DetectedUnitSets[#self.DetectedUnitSets].Zone = ZONE_UNIT:New( DetectedUnitName, DetectedUnit, self.DetectionZoneRange )
self.DetectedUnitSets[#self.DetectedUnitSets].Set = SET_UNIT:New()
self.DetectedUnitSets[#self.DetectedUnitSets].Set:AddUnit( DetectedUnit )
end
end
if AddedToSet == false then
self:T( "Adding new Unit Set #" .. #self.DetectedUnitSets+1 )
self.DetectedUnitSets[#self.DetectedUnitSets+1] = {}
self.DetectedUnitSets[#self.DetectedUnitSets].Zone = ZONE_UNIT:New( DetectedUnitName, DetectedUnit, self.DetectionZoneRange )
self.DetectedUnitSets[#self.DetectedUnitSets].Set = SET_UNIT:New()
self.DetectedUnitSets[#self.DetectedUnitSets].Set:AddUnit( DetectedUnit )
end
end
end
end

View File

@ -390,7 +390,7 @@ end
-- @param #SET_BASE self
-- @param Event#EVENTDATA Event
function SET_BASE:_EventOnDeadOrCrash( Event )
self:F3( { Event } )
self:F2( { Event } )
if Event.IniDCSUnit then
local ObjectName, Object = self:FindInDatabase( Event )
@ -957,6 +957,10 @@ function SET_UNIT:New()
-- Inherits from BASE
local self = BASE:Inherit( self, SET_BASE:New( _DATABASE.UNITS ) )
_EVENTDISPATCHER:OnBirth( self._EventOnBirth, self )
_EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self )
_EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self )
return self
end
@ -965,6 +969,7 @@ end
-- @param #string AddUnit A single UNIT.
-- @return #SET_UNIT self
function SET_UNIT:AddUnit( AddUnit )
self:F2( AddUnit:GetName() )
self:Add( AddUnit:GetName(), AddUnit )
@ -1151,6 +1156,7 @@ end
function SET_UNIT:FindInDatabase( Event )
self:F3( { Event } )
self:E( { Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] } )
return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName]
end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff