Add events.
[tabakrolletjie.git] / tabakrolletjie / engine.py
1 """ Engine for moving controll scenes and tranistions between them.
2 """
3
4 import pygame.display
5 import pygame.event
6 import pygame.time
7
8 import pygame.locals as pgl
9
10 from .constants import FPS
11 from .events import QuitEvent, SceneChangeEvent
12
13
14 class Engine(object):
15     def __init__(self, screen, gamestate):
16         self._screen = screen
17         self._gamestate = gamestate
18         self._scene = None
19
20     def set_scene(self, scene):
21         if self._scene is not None:
22             self._scene.exit(self._gamestate)
23         self._scene = scene
24         if scene is not None:
25             self._scene.enter(self._gamestate)
26
27     def run(self):
28         clock = pygame.time.Clock()
29
30         while True:
31             events = pygame.event.get()
32             for ev in events:
33                 if QuitEvent.matches(ev) or ev.type == pgl.QUIT:
34                     self.set_scene(None)
35                     return
36                 elif SceneChangeEvent.matches(ev):
37                     self.set_scene(ev.scene)
38                 else:
39                     self._scene.event(ev, self._gamestate)
40
41             self._scene.render(self._screen, self._gamestate)
42             pygame.display.flip()
43             clock.tick(FPS)