def enter(self): self._g_root = greenlet.getcurrent() self._g_loop = greenlet.greenlet(self._loop) self.message_log = MessageLog() self.level = Level(self, self.DUNGEON_SIZE_X, self.DUNGEON_SIZE_Y) self.game.window.push_handlers(self) self._g_loop.switch()
class PlayLevelState(GameState): DUNGEON_SIZE_X = 100 DUNGEON_SIZE_Y = 100 def enter(self): self._g_root = greenlet.getcurrent() self._g_loop = greenlet.greenlet(self._loop) self.message_log = MessageLog() self.level = Level(self, self.DUNGEON_SIZE_X, self.DUNGEON_SIZE_Y) self.game.window.push_handlers(self) self._g_loop.switch() def exit(self): self.game.window.remove_handlers(self) self.level.render_system.dispose() def on_key_press(self, sym, mod): key = pyglet.window.key if sym == key.ESCAPE: self.game.quit() return pyglet.event.EVENT_HANDLED command = None if sym == key.NUM_8: command = Command(Command.MOVE, (0, 1)) elif sym == key.NUM_2: command = Command(Command.MOVE, (0, -1)) elif sym == key.NUM_4: command = Command(Command.MOVE, (-1, 0)) elif sym == key.NUM_6: command = Command(Command.MOVE, (1, 0)) elif sym == key.NUM_7: command = Command(Command.MOVE, (-1, 1)) elif sym == key.NUM_9: command = Command(Command.MOVE, (1, 1)) elif sym == key.NUM_1: command = Command(Command.MOVE, (-1, -1)) elif sym == key.NUM_3: command = Command(Command.MOVE, (1, -1)) elif sym == key.NUM_5: command = Command(Command.WAIT, None) elif sym == key.G: command = Command(Command.PICKUP, None) elif sym == key.D: command = Command(Command.DROP, None) if command is not None: self._g_loop.switch(command) def on_draw(self): self.level.render_system.draw() def _loop(self): while True: self.level.tick() def get_command(self): command = self._g_root.switch() self.message_log.mark_as_seen() return command