class main(object): screen = None running = False clock = None world = None cam = None eventManager = None mainChar = None stage = None client = None fps_font = None debug_font = None hud = None escapeMenu = None changeMenu = None otherPlayers = [] status = 0 currentScene = [] charId = 3 controller = None pickups = [] pickupsRendered = True def __init__(self): util.seedRandom() """ PYGAME """ pygame.display.init() pygame.font.init() pygame.mixer.init(22050, -16, 2, 2 ** 20) self.fps_font = pygame.font.Font(None, 24) self.debug_font = pygame.font.Font(None, 15) self.screen = pygame.display.set_mode((util.CANVAS_WIDTH, util.CANVAS_HEIGHT), util.DISPLAY_FLAGS) self.cam = Camera.Camera(self.screen) util.IMAGECACHE.setLoadFunc(util.loadImage) util.SOUNDCACHE.setLoadFunc(util.loadSound) """ WORLD """ self.clock = pygame.time.Clock() """ EVENT MANAGER """ self.eventManager = EventMan.EventMan(pygame.event) self.eventManager.addHandler(self) """ EVENT FUNCTIONS """ def processEvents(self, events): for event in events: if event.type == pygame.QUIT: self.endProgram() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: if self.escapeMenu == None: if self.changeMenu == None: self.escMenu() else: self.escMenuClick(0) def escMenu(self): self.escapeMenu = EscMenu.EscMenu() self.escapeMenu.canChangeChar(self.activeScene.canChangeChar()) self.escapeMenu.canLeaveGame(self.activeScene.canLeaveGame()) self.escapeMenu.setHandler(self.escMenuClick) self.cam.addOverlay(self.escapeMenu) self.eventManager.addHandler(self.escapeMenu) def escMenuClick(self, action): if action == self.escapeMenu.CLICK_QUIT: self.endProgram() elif action == self.escapeMenu.CLICK_CHANGE: self.changeChar() elif action == self.escapeMenu.CLICK_LEAVE: self.client.leaveRoom() self.cam.removeOverlay(self.escapeMenu) self.eventManager.removeHandler(self.escapeMenu) self.escapeMenu = None def changeChar(self): self.changeMenu = ChangeChar.ChangeChar(self.client.charId) self.changeMenu.setHandler(self.changeClick) self.cam.addOverlay(self.changeMenu) self.eventManager.addHandler(self.changeMenu) def changeClick(self, newCharId): self.cam.removeOverlay(self.changeMenu) self.eventManager.removeHandler(self.changeMenu) self.changeMenu = None if newCharId != None: self.client.setCharacter(newCharId) def changeScene(self, NewScene): if self.escapeMenu != None: self.escMenuClick(0) if self.changeMenu != None: self.changeClick(None) self.cam.stopDrawing() self.activeScene.destroy() self.activeScene = NewScene(self) self.activeScene.setUp() self.cam.continueDrawing() def startGame(self): self.changeScene(GameScene) def endGame(self): self.changeScene(RoomScene) """ ONLINE/NETWORKING FUNCTIONS """ def onConnect(self, result): if result: self.changeScene(LobbyScene) else: self.activeScene.setLoading(False) self.activeScene.connectVisible(True) self.activeScene.setErrorMessage("Error: Failed to connect to server.") def onDisconnect(self): self.changeScene(TitleScene) self.activeScene.setLoading(False) self.activeScene.connectVisible(True) self.activeScene.setErrorMessage("Error: Disconnected.") "GO TO HOME SCREEN" def onRoomSwitch(self, action, result): if result: if action == self.client.LEAVING_ROOM: self.changeScene(LobbyScene) else: if self.client.roomState == self.client.stateDict["PLAYING"]: self.changeScene(GameScene) else: self.changeScene(RoomScene) else: if type(self.activeScene) == LobbyScene: self.activeScene.createPop = None if action == self.client.JOINING_ROOM: self.activeScene.doChat(("Failed to join room.", (255, 0, 0))) elif action == self.client.LEAVING_ROOM: self.activeScene.doChat(("Failed to leave room.", (255, 0, 0))) def handleNetworkCall(self, call, args): if self.activeScene != None and self.activeScene.handlesCall(call): self.activeScene.handleCall(call, args) """ MAIN FUNCTION """ def main(self): self.activeScene = TitleScene(self) self.activeScene.setUp() self.mainLoop() def mainLoop(self): self.running = True while self.running: self.clock.tick(util.FRAMERATE) self.eventManager.processEvents() if self.activeScene != None: self.activeScene.mainLoop() self.cam.render() fps = self.fps_font.render("%f" % self.clock.get_fps(), 1, (10, 10, 10)) self.screen.blit(fps, (0, 0)) pygame.display.flip() def endProgram(self): if self.client: self.client.disconnect() self.activeScene.destroy() self.activeScene = None self.running = False """ FLOW CONTROL """ def connect(self, name, server): self.client = GameClient.GameClient(self) if server.find(":") > 0: server = server[: server.find(":")] port = int(server[server.find(":") + 1 :]) else: port = 62227 self.client.connect_async(name, (server, port)) self.activeScene.connectVisible(False) self.activeScene.setLoading(True) """