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
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)