Преглед на файлове

support for setZoneComplete events

Darren Ranalli преди 22 години
родител
ревизия
e5043ad51a
променени са 1 файла, в които са добавени 27 реда и са изтрити 0 реда
  1. 27 0
      direct/src/level/DistributedLevel.py

+ 27 - 0
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