Fixes bug that would loop over every unit in the group.

Only the players in a group should be unassigned, not all units.
This commit is contained in:
FlightControl 2017-06-29 10:17:55 +02:00
parent 975566eb3c
commit bccc4abf26
2 changed files with 9 additions and 6 deletions

View File

@ -990,7 +990,6 @@ do -- FSM_PROCESS
-- Copy Processes -- Copy Processes
for ProcessID, Process in pairs( self:GetProcesses() ) do for ProcessID, Process in pairs( self:GetProcesses() ) do
self:E( { Process} )
if Process.fsm then if Process.fsm then
Process.fsm:Remove() Process.fsm:Remove()
Process.fsm = nil Process.fsm = nil

View File

@ -530,8 +530,9 @@ do -- Group Assignment
--- UnAssign the @{Task} from a @{Group}. --- UnAssign the @{Task} from a @{Group}.
-- @param #TASK self -- @param #TASK self
-- @param Wrapper.Group#GROUP TaskGroup
function TASK:UnAssignFromGroup( TaskGroup ) function TASK:UnAssignFromGroup( TaskGroup )
self:F2( { TaskGroup } ) self:F2( { TaskGroup = TaskGroup:GetName() } )
self:ClearGroupAssignment( TaskGroup ) self:ClearGroupAssignment( TaskGroup )
@ -539,7 +540,7 @@ do -- Group Assignment
for UnitID, UnitData in pairs( TaskUnits ) do for UnitID, UnitData in pairs( TaskUnits ) do
local TaskUnit = UnitData -- Wrapper.Unit#UNIT local TaskUnit = UnitData -- Wrapper.Unit#UNIT
local PlayerName = TaskUnit:GetPlayerName() local PlayerName = TaskUnit:GetPlayerName()
if PlayerName ~= nil or PlayerName ~= "" then if PlayerName ~= nil and PlayerName ~= "" then -- Only remove units that have players!
self:UnAssignFromUnit( TaskUnit ) self:UnAssignFromUnit( TaskUnit )
end end
end end
@ -947,7 +948,7 @@ end
-- @param Wrapper.Unit#UNIT TaskUnit -- @param Wrapper.Unit#UNIT TaskUnit
-- @return #TASK self -- @return #TASK self
function TASK:RemoveStateMachine( TaskUnit ) function TASK:RemoveStateMachine( TaskUnit )
self:F( { TaskUnit, self.Fsm[TaskUnit] ~= nil } ) self:F( { TaskUnit = TaskUnit:GetName(), HasFsm = ( self.Fsm[TaskUnit] ~= nil ) } )
--self:E( self.Fsm ) --self:E( self.Fsm )
--for TaskUnitT, Fsm in pairs( self.Fsm ) do --for TaskUnitT, Fsm in pairs( self.Fsm ) do
@ -956,13 +957,16 @@ function TASK:RemoveStateMachine( TaskUnit )
--self.Fsm[TaskUnit] = nil --self.Fsm[TaskUnit] = nil
--end --end
if self.Fsm[TaskUnit] then
self.Fsm[TaskUnit]:Remove() self.Fsm[TaskUnit]:Remove()
self.Fsm[TaskUnit] = nil self.Fsm[TaskUnit] = nil
end
collectgarbage() collectgarbage()
self:E( "Garbage Collected, Processes should be finalized now ...") self:E( "Garbage Collected, Processes should be finalized now ...")
end end
--- Checks if there is a FiniteStateMachine assigned to Task@{Unit} for @{Task} --- Checks if there is a FiniteStateMachine assigned to Task@{Unit} for @{Task}
-- @param #TASK self -- @param #TASK self
-- @param Wrapper.Unit#UNIT TaskUnit -- @param Wrapper.Unit#UNIT TaskUnit