X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Fengine.py;h=4aac2e8e8bb7297ce86e317e4c8e68e5528f5212;hb=c1a180350f935b770c9496a11c3a2da17859587b;hp=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hpb=f3600c28cd6e96abe7c0916860b0cc56b444545f;p=tabakrolletjie.git diff --git a/tabakrolletjie/engine.py b/tabakrolletjie/engine.py index e69de29..4aac2e8 100644 --- a/tabakrolletjie/engine.py +++ b/tabakrolletjie/engine.py @@ -0,0 +1,43 @@ +""" 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 +from .events import QuitEvent, SceneChangeEvent + + +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 + if scene is not None: + self._scene.enter(self._gamestate) + + def run(self): + clock = pygame.time.Clock() + + while True: + events = pygame.event.get() + for ev in events: + if QuitEvent.matches(ev) or ev.type == pgl.QUIT: + self.set_scene(None) + return + elif SceneChangeEvent.matches(ev): + self.set_scene(ev.scene) + else: + self._scene.event(ev, self._gamestate) + + self._scene.render(self._screen, self._gamestate) + pygame.display.flip() + clock.tick(FPS)