Esempio n. 1
0
    def __init__(self,
                 view,
                 framerate):
        super(UIController, self).__init__()

        self.view = view

        self._terminate_flag = True

        # Wiring
        self.game_clock = GameClock(framerate)

        self.pygameEventDispatcher = PygameEventDispatcher()
        self.keyPressEventDispatcher = KeyPressEventDispatcher(self.pygameEventDispatcher)
        self.keyHoldEventDispatcher = KeyHoldEventDispatcher(self.pygameEventDispatcher)
        self.mouseEventDispatcher = MouseEventDispatcher(self.pygameEventDispatcher)

        self.pygameEventDispatcher.observe(pygame.locals.QUIT, self._on_quit)
        self.keyPressEventDispatcher.observe(
            (pygame.locals.KEYDOWN, pygame.locals.K_q),
            self._on_quit)
        self.mouseEventDispatcher.observe(MouseEventDispatcher.CLICK, self._on_click)
        self.mouseEventDispatcher.observe(MouseEventDispatcher.MOVE, self._on_move)

        self.keyPressEventDispatcher.observe(
            (pygame.locals.KEYDOWN, pygame.locals.K_SPACE),
            lambda *args, **kwargs: self.game_clock.toggle()
        )

        notify_walk = lambda dx, dy:\
            lambda *args, **kwargs:\
                self.notify(UIController.MOVE, (dx, dy))
        self.keyHoldEventDispatcher.observe(pygame.locals.K_UP, notify_walk(0, -1))
        self.keyHoldEventDispatcher.observe(pygame.locals.K_DOWN, notify_walk(0, 1))
        self.keyHoldEventDispatcher.observe(pygame.locals.K_LEFT, notify_walk(-1, 0))
        self.keyHoldEventDispatcher.observe(pygame.locals.K_RIGHT, notify_walk(1, 0))