Mercurial > pyntnclick
changeset 596:5496dcd16a84 pyntnclick
Add pyntnclick.engine, based on mamba
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 18:22:57 +0200 |
parents | 59f1ee3f5632 |
children | c0e0b3d5730c |
files | pyntnclick/engine.py pyntnclick/main.py |
diffstat | 2 files changed, 68 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pyntnclick/engine.py Sat Feb 11 18:22:57 2012 +0200 @@ -0,0 +1,67 @@ +"""Game engine and top-level game loop.""" + +import pygame +import pygame.event +import pygame.display +import pygame.time +from pygame.locals import QUIT, USEREVENT + + +class Engine(object): + def __init__(self, game_description): + self._screen = None + self._game_description = game_description + + def set_screen(self, screen): + if self._screen is not None: + self._screen.on_exit() + self._screen = screen + if self._screen is not None: + self._screen.on_enter() + + def run(self): + """Game loop.""" + + get_events = pygame.event.get + flip = pygame.display.flip + clock = pygame.time.Clock() + while True: + events = get_events() + for ev in events: + if ev.type == QUIT: + return + elif ScreenChangeEvent.matches(ev): + self.set_habitat(ev.habitat) + else: + self._screen.dispatch(ev) + surface = pygame.display.get_surface() + self._habitat.draw(surface) + flip() + self._fps = 1000.0 / clock.tick( + self.game_description.constants.fps) + + +class UserEvent(object): + """A user event type allowing subclassing, + to provide an infinate number of user-defined events + """ + + TYPE = "UNKNOWN" + + @classmethod + def post(cls, **kws): + ev = pygame.event.Event(USEREVENT, utype=cls.TYPE, **kws) + pygame.event.post(ev) + + @classmethod + def matches(cls, ev): + return ev.type == USEREVENT and ev.utype == cls.TYPE + + +class ScreenChangeEvent(UserEvent): + + TYPE = "SCREEN_CHANGE" + + @classmethod + def post(cls, screen): + super(ScreenChangeEvent, cls).post(screen=screen)
--- a/pyntnclick/main.py Sat Feb 11 18:18:59 2012 +0200 +++ b/pyntnclick/main.py Sat Feb 11 18:22:57 2012 +0200 @@ -34,7 +34,7 @@ self.menu_screen = MenuScreen(self, game_description) self.game_screen = GameScreen(self, game_description) self.end_screen = EndScreen(self, game_description) - self.set_timer(game_description.constants.frame_rate) + #self.set_timer(game_description.constants.frame_rate) self.show_screen(self.menu_screen)