+""" Engine for moving controll scenes and tranistions between them.
+"""
+
+import pygame.display
+import pygame.event
+import pygame.time
+
+import pygame.locals as pgl
+
+from .constants import FPS
+
+
+class Engine(object):
+ def __init__(self, screen, gamestate):
+ self._screen = screen
+ self._gamestate = gamestate
+ self._scene = None
+
+ def set_scene(self, scene):
+ if self._scene is not None:
+ self._scene.exit(self._gamestate)
+ self._scene = scene
+ self._scene.enter(self._gamestate)
+
+ def run(self):
+ clock = pygame.time.Clock()
+
+ while True:
+ events = pygame.event.get()
+ for ev in events:
+ if ev.type == pgl.QUIT:
+ return
+ else:
+ self._scene.event(ev, self._gamestate)
+
+ self._scene.render(self._screen, self._gamestate)
+ pygame.display.flip()
+
+ clock.tick(FPS)