diff --git a/direct/src/level/DistributedLevel.py b/direct/src/level/DistributedLevel.py index 7da6d72b42..72c2bc349d 100755 --- a/direct/src/level/DistributedLevel.py +++ b/direct/src/level/DistributedLevel.py @@ -3,6 +3,7 @@ from ClockDelta import * from PythonUtil import Functor, sameElements, list2dict, uniqueElements from IntervalGlobal import * +from ToontownMsgTypes import * import ToontownGlobals import DistributedObject import Level @@ -58,6 +59,9 @@ class DistributedLevel(DistributedObject.DistributedObject, ) self.zonesEnteredList = [] self.fColorZones = 0 + # we use these to track setZone requests + self.setZonesRequested = 0 + self.setZonesReceived = 0 def generate(self): DistributedLevel.notify.debug('generate') @@ -412,6 +416,10 @@ class DistributedLevel(DistributedObject.DistributedObject, self.camEnterZone(zoneNum) self.accept('on-floor', handleCameraRayFloorCollision) + # register our datagram handler to listen for setZone msgs + self.oldTcrHandler = toonbase.tcr.handler + toonbase.tcr.handler = self.handleDatagram + # if no viz, listen to all the zones if not DistributedLevel.WantVisibility: zoneNums = list(self.zoneNums) @@ -426,6 +434,24 @@ class DistributedLevel(DistributedObject.DistributedObject, def shutdownVisibility(self): taskMgr.remove(self.uniqueName(DistributedLevel.VisChangeTaskName)) + toonbase.tcr.handler = self.oldTcrHandler + + def getSetZoneCompleteEvent(self, num): + return self.uniqueName('setZoneComplete-%s' % num) + + def getNextSetZoneCompleteEvent(self): + return self.uniqueName('setZoneComplete-%s' % self.setZonesRequested) + + def handleDatagram(self, msgType, di): + if msgType == CLIENT_DONE_SET_ZONE_RESP: + print 'setZone %s complete' % self.setZonesReceived + messenger.send(self.getSetZoneCompleteEvent(self.setZonesReceived)) + self.setZonesReceived += 1 + + if self.oldTcrHandler is None: + toonbase.tcr.handleUnexpectedMsgType(msgType, di) + else: + self.oldTcrHandler(msgType, di) def toonEnterZone(self, zoneNum, ouchLevel=None): """ @@ -516,6 +542,7 @@ class DistributedLevel(DistributedObject.DistributedObject, self.hideZone(rz) self.setVisibility(visibleZoneNums.keys()) + self.setZonesRequested += 1 self.curZoneNum = zoneNum self.curVisibleZoneNums = visibleZoneNums