class Controller(ConnectionListener): def __init__(self): os.environ['SDL_VIDEO_CENTERED'] = '1' pygame.init() self.servtype = "LAN" self.pumpthejam = False self.clientid = None self.gameid = None self.connected = False self.host = socket.gethostbyname(socket.gethostname()) self.port = 8000 self.ctype = "" self.nickname = "Per Gessle" self.allready = False self.joined = "" #KEYMAPPING AND EVENT MAPPING self.keymap = {} self.keymap_singlepress = {} self.events = {} #NECESSARY VARIABLES self.state = S_MENU self.screen = pygame.display.set_mode(SCREEN_SIZE) #pygame.FULLSCREEN | pygame.DOUBLEBUF self.caption = pygame.display.set_caption(CAPTION) self.font = pygame.font.SysFont('monospace', 20) self.clock = pygame.time.Clock() #SELF DEPENDANT self.world = World(self.screen) self.menu = Menu(self) #Mouse.load_cursor(self.screen) Sound.load_sounds() Sound.Sounds["mainmenu"].play() self.register_eventhandler(pygame.QUIT, self.quit) self.register_key(pygame.K_ESCAPE, self.quit, singlepress = True) """---------------------------------------------------WILL BE MOVED TO MENU STATE----------------------------------------------------------""" self.player = Player(self, (500,500), pygame.K_1, pygame.K_2, pygame.K_3, pygame.K_4) self.player.spells[0] = Firebolt(1) self.player.spells[1] = LightningStrike(1) self.player.spells[2] = Firebolt(1) self.player.spells[3] = Firebolt(1) SpellWindow.load_windows(self) """---------------------------------------------------WILL BE MOVED TO MENU STATE----------------------------------------------------------""" def run(self): while True: #MOUSE AND KEYBOARD REGISTER UPDATE (pygame) Mpos = pygame.mouse.get_pos() # (x, y) self.keys = pygame.key.get_pressed() self.mouse = pygame.mouse.get_pressed() """-------------------------------------MENU------------------------------------------""" if self.state == S_MENU: for event in pygame.event.get(): for event_type, callback in self.events.iteritems(): if event.type == event_type: callback(event) self.menu.update_and_draw() """-------------------------------------GAME------------------------------------------""" if self.state == S_GAME: for event in pygame.event.get(): for event_type, callback in self.events.iteritems(): if event.type == event_type: callback(event) if event.type == pygame.KEYDOWN: for event_key in self.keymap_singlepress.iterkeys(): if event.key == event_key: self.keymap_singlepress[(event_key)](event) for event_key in self.keymap.iterkeys(): if self.keys[event_key]: self.keymap[(event_key)]() #AFTER ALL THE F*****G FOR LOOPS self.world.draw() self.player.update() self.player.draw() Enemy.draw_enemies() Spell.update_spells(self.screen) SpellWindow.draw() self.TellNetwork_playerpos() connection.Pump() self.Pump() #ESSENTIAL STUFF if self.pumpthejam: self.pump() pygame.display.flip() self.clock.tick(FPS) """-------------------------------------FUNCTIONS------------------------------------------""" def register_key(self, event_key, callback, singlepress = False): if singlepress == False: self.keymap[(event_key)] = callback else: self.keymap_singlepress[(event_key)] = callback def register_eventhandler(self, event_type, callback): self.events[event_type] = callback def start_game(self): self.player.wake() self.state = S_GAME def pump(self): connection.Pump() self.Pump() def quit(self, event): pygame.quit() sys.exit() """-------------------------------------NETWORK------------------------------------------""" def Network_response(self, data): self.clientid = data["clientid"] self.Send({"action" : "init", "type" : self.ctype, "clientid" : self.clientid, "name" : self.nickname}) self.connected = True def Network_playerjoin(self, data): if self.joined == "": self.joined += str(data["name"]) else: self.joined = self.joined + ", " + str(data["name"]) def Network_allready(self, data): pass def Network_newenemy(self, data): id_ = data["clientid"] Enemy(id_, self.screen) def Network_startgame(self, data): self.start_game() self.menu.state = None def Network_enemypos(self, data): clientid = data["clientid"] x, y = data["x"], data["y"] for enemy in Enemy.List: if enemy.clientid == clientid: enemy.x, enemy.y = x, y def TellNetwork_playerpos(self): self.Send({"action" : "playerpos", "clientid" : self.clientid, "x" : self.player.x, "y" : self.player.y})