def gotAllRooms(self):
        self.notify.debug('mint %s: got all rooms' % self.doId)
        self.roomWatcher.destroy()
        self.roomWatcher = None
        self.geom = render.attachNewNode('mint%s' % self.doId)
        for doId in self.roomDoIds:
            self.rooms.append(base.cr.doId2do[doId])
            self.rooms[-1].setMint(self)

        self.notify.info('mintId %s, floor %s, %s' % (self.mintId, self.floorNum, self.rooms[0].avIdList))
        rng = self.layout.getRng()
        numRooms = self.layout.getNumRooms()
        for i, room in enumerate(self.rooms):
            if i == 0:
                room.getGeom().reparentTo(self.geom)
            else:
                room.attachTo(self.hallways[i - 1], rng)
            self.allRooms.append(room)
            self.listenForFloorEvents(room)
            if i < numRooms - 1:
                hallway = MintRoom.MintRoom(self.layout.getHallwayModel(i))
                hallway.attachTo(room, rng)
                hallway.setRoomNum(i * 2 + 1)
                hallway.initFloorCollisions()
                hallway.enter()
                self.hallways.append(hallway)
                self.allRooms.append(hallway)
                self.listenForFloorEvents(hallway)

        def handleCameraRayFloorCollision(collEntry, self = self):
            name = collEntry.getIntoNode().getName()
            self.notify.debug('camera floor ray collided with: %s' % name)
            prefix = MintRoom.MintRoom.FloorCollPrefix
            prefixLen = len(prefix)
            if name[:prefixLen] == prefix:
                try:
                    roomNum = int(name[prefixLen:])
                except:
                    DistributedLevel.notify.warning('Invalid zone floor collision node: %s' % name)
                else:
                    self.camEnterRoom(roomNum)

        self.accept('on-floor', handleCameraRayFloorCollision)
        if bboard.has('mintRoom'):
            self.warpToRoom(bboard.get('mintRoom'))
        firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent()

        def handleFirstSetZoneDone():
            self.notify.debug('mintHandleFirstSetZoneDone')
            bboard.post(DistributedMint.ReadyPost, self)

        self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone)
        zoneList = [OTPGlobals.UberZone, self.zoneId]
        for room in self.rooms:
            zoneList.extend(room.zoneIds)

        base.cr.sendSetZoneMsg(self.zoneId, zoneList)
        self.accept('takingScreenshot', self.handleScreenshot)
        return
Exemple #2
0
    def gotAllRooms(self):
        self.notify.debug('mint %s: got all rooms' % self.doId)
        self.roomWatcher.destroy()
        self.roomWatcher = None

        self.geom = render.attachNewNode('mint%s' % self.doId)

        # fill out our table of rooms
        for doId in self.roomDoIds:
            self.rooms.append(base.cr.doId2do[doId])
            self.rooms[-1].setMint(self)

        self.notify.info('mintId %s, floor %s, %s' % (
            self.mintId, self.floorNum, self.rooms[0].avIdList))

        rng = self.layout.getRng()
        numRooms = self.layout.getNumRooms()

        for i, room in enumerate(self.rooms):
            # there's a hallway between each pair of rooms
            if i == 0:
                room.getGeom().reparentTo(self.geom)
            else:
                # attach the room to the preceding hallway
                room.attachTo(self.hallways[i-1], rng)
            self.allRooms.append(room)
            self.listenForFloorEvents(room)
            
            if i < (numRooms-1):
                # add a hallway leading out of the room
                hallway = MintRoom.MintRoom(self.layout.getHallwayModel(i))
                hallway.attachTo(room, rng)
                hallway.setRoomNum((i*2)+1)
                hallway.initFloorCollisions()
                hallway.enter()
                self.hallways.append(hallway)
                self.allRooms.append(hallway)
                self.listenForFloorEvents(hallway)

        # listen for camera-ray/floor collision events
        def handleCameraRayFloorCollision(collEntry, self=self):
            name = collEntry.getIntoNode().getName()
            self.notify.debug('camera floor ray collided with: %s' % name)
            prefix = MintRoom.MintRoom.FloorCollPrefix
            prefixLen = len(prefix)
            if (name[:prefixLen] == prefix):
                try:
                    roomNum = int(name[prefixLen:])
                except:
                    DistributedLevel.notify.warning(
                        'Invalid zone floor collision node: %s'
                        % name)
                else:
                    self.camEnterRoom(roomNum)
        self.accept('on-floor', handleCameraRayFloorCollision)

        if bboard.has('mintRoom'):
            self.warpToRoom(bboard.get('mintRoom'))

        # get this event name before we send out our first setZone
        firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent()
        # wait until the first viz setZone completes before announcing
        # that we're ready to go
        def handleFirstSetZoneDone():
            self.notify.debug('mintHandleFirstSetZoneDone')
            # NOW we're ready.
            bboard.post(DistributedMint.ReadyPost, self)
        self.acceptOnce(firstSetZoneDoneEvent, handleFirstSetZoneDone)

        # listen to all of the network zones; no network visibility for now
        zoneList = [OTPGlobals.UberZone, self.zoneId]
        for room in self.rooms:
            zoneList.extend(room.zoneIds)
        base.cr.sendSetZoneMsg(self.zoneId, zoneList)

        self.accept('takingScreenshot', self.handleScreenshot)