Mercurial > sypikslang
view gamelib/engine.py @ 71:20b01d100ff5
fucking pep8
author | Rizmari Versfeld <rizziepit@gmail.com> |
---|---|
date | Tue, 08 May 2012 23:11:03 +0200 |
parents | 7309392d9ca9 |
children | e386ec5d179b |
line wrap: on
line source
# -*- coding: utf-8 -*- # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 """Game engine stuff""" import pygame from pygame.locals import (MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEMOTION, QUIT, USEREVENT) from pygame.time import Clock from gamelib.constants import FPS class UserEvent(object): # Handy event wrapper TYPE = "unknown" @classmethod def post(cls, **kw): event = pygame.event.Event(USEREVENT, utype=cls.TYPE, **kw) pygame.event.post(event) @classmethod def matches(cls, event): return event.type == USEREVENT and event.utype == cls.TYPE class AddWindow(UserEvent): # Add the given window to the top of the window stack TYPE = "ADD_WINDOW" @classmethod def post(cls, window): super(AddWindow, cls).post(window=window) class PopWindow(UserEvent): # Pop a window off the top of the window stack TYPE = "POP_WINDOW" @classmethod def post(cls): super(PopWindow, cls).post() class Engine(object): def __init__(self, screen): self._window_stack = [] self._running = False self._mouse_down = False self._screen = screen def run(self, window): clock = Clock() self._window_stack.append(window) self._running = True self._mouse_down = False while self._running: self.process_input() self.draw() clock.tick(FPS) def draw(self): #for view in self._window_stack: self._window_stack[-1].draw(self._screen) pygame.display.flip() def process_input(self): for event in pygame.event.get(): if self._mouse_down: if event.type == MOUSEBUTTONUP: self._mouse_down = False self._window_stack[-1].on_mouse_up(event.pos) elif event.type == MOUSEMOTION: self._window_stack[-1].on_mouse_move(event.pos) elif not self._mouse_down and event.type == MOUSEBUTTONDOWN: self._mouse_down = True self._window_stack[-1].on_mouse_down(event.pos) elif event.type == QUIT: self._running = False elif AddWindow.matches(event): self._window_stack.append(event.window) elif PopWindow.matches(event): self._window_stack.pop()