diff --git a/direct/src/distributed/DistributedCartesianGrid.py b/direct/src/distributed/DistributedCartesianGrid.py index f1d7fe930b..639df98038 100755 --- a/direct/src/distributed/DistributedCartesianGrid.py +++ b/direct/src/distributed/DistributedCartesianGrid.py @@ -5,6 +5,7 @@ from direct.interval.IntervalGlobal import * from direct.distributed.DistributedNode import DistributedNode from direct.task import Task from direct.gui import DirectGuiGlobals +from direct.showbase.EventGroup import EventGroup if __debug__: # For grid drawing @@ -76,10 +77,17 @@ class DistributedCartesianGrid(DistributedNode, CartesianGridBase): taskMgr.add( self.processVisibility, self.taskName("processVisibility")) - def stopProcessVisibility(self, clearAll=False): + def stopProcessVisibility(self, clearAll=False, event=None): taskMgr.remove(self.taskName("processVisibility")) + if event is not None: + eventGroup = EventGroup('DistCartesianGrid.stopProcessVis', + doneEvent=event) if self.gridVisContext is not None: - self.cr.removeInterest(self.gridVisContext) + if event is not None: + removeEvent = eventGroup.newEvent('%s.removeInterest' % self.doId) + else: + removeEvent = None + self.cr.removeInterest(self.gridVisContext, removeEvent) self.gridVisContext = None self.visAvatar = None self.visZone = None @@ -87,7 +95,11 @@ class DistributedCartesianGrid(DistributedNode, CartesianGridBase): # sometimes we also need to remove vis avatar from # my parent if it is also a grid if (clearAll): - self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility() + if event is not None: + parentEvent = eventGroup.newEvent('%s.parent.removeInterest' % self.doId) + else: + parentEvent = None + self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility(event=parentEvent) def processVisibility(self, task): pos = self.visAvatar.getPos(self)