source: nagslang/engine.py@ 128:fbb073720bac

Last change on this file since 128:fbb073720bac was 128:fbb073720bac, checked in by Neil Muller <drnlmuller@…>, 8 years ago

Fill screen with black on scene changes, so small levels aren't surrounded by old cruft

File size: 1.8 KB
RevLine 
[15]1"""Top-level event dispatching and area transition."""
2
[18]3import pygame
[85]4import pygame.locals as pgl
[15]5
6from nagslang import constants
[18]7from nagslang.screens.menu import MenuScreen
[20]8from nagslang.screens.area import AreaScreen
9from nagslang.events import ScreenChange
[15]10
11
12class Engine(object):
[18]13 def __init__(self, surface):
14 self._surface = surface
15 self._clock = pygame.time.Clock()
[15]16 self._fps = constants.FPS
[41]17 self._dt = 1. / self._fps
[20]18 self._world = None # TODO: create the world
19 self._current_screen = None
20 self._screens = {
21 'menu': MenuScreen,
22 'level1': AreaScreen,
23 }
24 self.change_screen('menu')
25
26 def change_screen(self, new_screen):
27 if self._current_screen is not None:
28 self._current_screen.teardown()
[37]29 screen_cls = self._screens[new_screen]
30 self._current_screen = screen_cls(new_screen, self._world)
31 self._current_screen.setup()
[15]32
33 def run(self):
34 running = True
35 while running:
[18]36 for ev in pygame.event.get():
[85]37 if ev.type == pgl.QUIT:
[15]38 running = False
[85]39 elif ev.type == pgl.VIDEORESIZE:
40 pygame.display.set_mode(ev.size,
[128]41 pgl.SWSURFACE | pgl.RESIZABLE)
[85]42 self._surface = pygame.display.get_surface()
[20]43 elif ScreenChange.matches(ev):
[128]44 self._surface.fill(pygame.color.Color(0, 0, 0))
[20]45 self.change_screen(ev.screen)
[18]46 else:
[20]47 self._current_screen.handle_event(ev)
[41]48 self._current_screen.tick(self._dt)
[20]49 self._current_screen.render(self._surface)
[18]50 pygame.display.flip()
[41]51 self._clock.tick(self._fps)
Note: See TracBrowser for help on using the repository browser.