From e22e7f2c584c9948f0823d391d0c0bf5a8546264 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Tue, 27 Mar 2018 15:03:07 +0200 Subject: [PATCH] -- Fix issue SET_AIRBASE does not update #817. --- Moose Development/Moose/Core/Set.lua | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index b02e76168..9d8dd721e 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -152,13 +152,15 @@ function SET_BASE:Remove( ObjectName ) local Object = self.Set[ObjectName] - self:F3( { ObjectName, Object } ) + self:F( { ObjectName, Object } ) if Object then for Index, Key in ipairs( self.Index ) do + self:F( { Index = Index, Key = Key } ) if Key == ObjectName then table.remove( self.Index, Index ) self.Set[ObjectName] = nil + self:Flush(self) break end end @@ -3864,7 +3866,7 @@ function SET_AIRBASE:RemoveAirbasesByName( RemoveAirbaseNames ) local RemoveAirbaseNamesArray = ( type( RemoveAirbaseNames ) == "table" ) and RemoveAirbaseNames or { RemoveAirbaseNames } for RemoveAirbaseID, RemoveAirbaseName in pairs( RemoveAirbaseNamesArray ) do - self:Remove( RemoveAirbaseName.AirbaseName ) + self:Remove( RemoveAirbaseName ) end return self @@ -3926,12 +3928,41 @@ end function SET_AIRBASE:FilterStart() if _DATABASE then - self:_FilterStart() + + -- We use the BaseCaptured event, which is generated by DCS when a base got captured. + self:HandleEvent( EVENTS.BaseCaptured ) + + -- We initialize the first set. + for ObjectName, Object in pairs( self.Database ) do + if self:IsIncludeObject( Object ) then + self:Add( ObjectName, Object ) + else + self:RemoveAirbasesByName( ObjectName ) + end + end end return self end +--- Starts the filtering. +-- @param #SET_AIRBASE self +-- @param Core.Event#EVENT EventData +-- @return #SET_AIRBASE self +function SET_AIRBASE:OnEventBaseCaptured(EventData) + + -- When a base got captured, we reevaluate the set. + for ObjectName, Object in pairs( self.Database ) do + if self:IsIncludeObject( Object ) then + -- We add captured bases on yet in the set. + self:Add( ObjectName, Object ) + else + -- We remove captured bases that are not anymore part of the set. + self:RemoveAirbasesByName( ObjectName ) + end + end + +end --- Handles the Database to check on an event (birth) that the Object was added in the Database. -- This is required, because sometimes the _DATABASE birth event gets called later than the SET_BASE birth event!