Mercurial > nagslang
view nagslang/engine.py @ 141:076448ba0582
Add a trailing newline
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Mon, 02 Sep 2013 19:04:36 +0200 |
parents | fbb073720bac |
children | cd77974b2a87 |
line wrap: on
line source
"""Top-level event dispatching and area transition.""" import pygame import pygame.locals as pgl from nagslang import constants from nagslang.screens.menu import MenuScreen from nagslang.screens.area import AreaScreen from nagslang.events import ScreenChange class Engine(object): def __init__(self, surface): self._surface = surface self._clock = pygame.time.Clock() self._fps = constants.FPS self._dt = 1. / self._fps self._world = None # TODO: create the world self._current_screen = None self._screens = { 'menu': MenuScreen, 'level1': AreaScreen, } self.change_screen('menu') def change_screen(self, new_screen): if self._current_screen is not None: self._current_screen.teardown() screen_cls = self._screens[new_screen] self._current_screen = screen_cls(new_screen, self._world) self._current_screen.setup() def run(self): running = True while running: for ev in pygame.event.get(): if ev.type == pgl.QUIT: running = False elif ev.type == pgl.VIDEORESIZE: pygame.display.set_mode(ev.size, pgl.SWSURFACE | pgl.RESIZABLE) self._surface = pygame.display.get_surface() elif ScreenChange.matches(ev): self._surface.fill(pygame.color.Color(0, 0, 0)) self.change_screen(ev.screen) else: self._current_screen.handle_event(ev) self._current_screen.tick(self._dt) self._current_screen.render(self._surface) pygame.display.flip() self._clock.tick(self._fps)