def gotAllRooms(self): self.notify.debug('stage %s: got all rooms' % self.doId) if self.roomWatcher: self.roomWatcher.destroy() self.roomWatcher = None self.geom = render.attachNewNode('stage%s' % self.doId) for doId in self.roomDoIds: self.rooms.append(base.cr.doId2do[doId]) self.rooms[-1].setStage(self) self.notify.info('stageId %s, floor %s, %s' % (self.stageId, 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 = StageRoom.StageRoom(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) self.placeToon() def handleCameraRayFloorCollision(collEntry, self=self): name = collEntry.getIntoNode().getName() self.notify.debug('camera floor ray collided with: %s' % name) prefix = StageRoom.StageRoom.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) print(collEntry) print() self.accept('on-floor', handleCameraRayFloorCollision) if bboard.has('stageRoom'): self.warpToRoom(bboard.get('stageRoom')) firstSetZoneDoneEvent = self.cr.getNextSetZoneDoneEvent() def handleFirstSetZoneDone(): self.notify.debug('stageHandleFirstSetZoneDone') bboard.post(DistributedStage.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) base.transitions.irisIn() taskMgr.doMethodLater(0.25, self._delayedInit, 'delayedInit') return
def gotAllRooms(self): self.notify.debug('stage %s: got all rooms' % self.doId) self.roomWatcher.destroy() self.roomWatcher = None self.geom = render.attachNewNode('stage%s' % self.doId) # fill out our table of rooms for doId in self.roomDoIds: self.rooms.append(base.cr.doId2do[doId]) self.rooms[-1].setStage(self) self.notify.info('stageId %s, floor %s, %s' % (self.stageId, 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 = StageRoom.StageRoom(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) self.placeToon() # 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 = StageRoom.StageRoom.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) print(collEntry) print() self.accept('on-floor', handleCameraRayFloorCollision) if bboard.has('stageRoom'): self.warpToRoom(bboard.get('stageRoom')) # 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('stageHandleFirstSetZoneDone') # NOW we're ready. bboard.post(DistributedStage.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) base.transitions.irisIn() #this next bit is a hack, but it's the only thing that works reliably taskMgr.doMethodLater(0.25, self._delayedInit, "delayedInit")