X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Fscenes%2Fload_level.py;fp=tabakrolletjie%2Fscenes%2Fload_level.py;h=7b3478918209e3042a3eeb8fb3ed5b4cdd7cca7f;hb=428f0c89073e5518f563a86c8bd42f6073af0007;hp=0000000000000000000000000000000000000000;hpb=d16507c49b10bdcfc70aa6f813182ec26a4be2da;p=tabakrolletjie.git diff --git a/tabakrolletjie/scenes/load_level.py b/tabakrolletjie/scenes/load_level.py new file mode 100644 index 0000000..7b34789 --- /dev/null +++ b/tabakrolletjie/scenes/load_level.py @@ -0,0 +1,65 @@ +""" Menu scene. """ + +import os + +import pygame.locals as pgl + +from .base import BaseScene +from ..events import SceneChangeEvent +from ..widgets import TextButton +from ..loader import loader + + +class LoadLevelScene(BaseScene): + + def _list_stations(self): + station_path = loader.full_path("stations") + files = os.listdir(station_path) + result = [] + for f in files: + name, ext = os.path.splitext(f) + if ext == '.json': + result.append((name, f)) + result.sort() + return result + + def enter(self, gamestate): + """Construct list of stations""" + height = 50 + self._buttons = [] + width = 30 + for station, filename in self._list_stations(): + pos = (width, height) + button = TextButton(station, (255, 255, 255), filename, pos) + if width < 400: + width += 350 + else: + width = 30 + height += button.get_height() + 20 + self._buttons.append(button) + + def render(self, surface, gamestate): + surface.fill((0, 128, 128)) + for button in self._buttons: + button.render(surface) + + def _get_pressed(self, ev): + for button in self._buttons: + if button.pressed(ev): + return button.name + return None + + def _do_load(self, name, gamestate): + from .day import DayScene + print "Loading station", name + gamestate.load_station(name) + SceneChangeEvent.post(scene=DayScene()) + + def event(self, ev, gamestate): + if ev.type == pgl.KEYDOWN: + if ev.key == pgl.K_l: + self._do_load("station_alpha.json", gamestate) + elif ev.type == pgl.MOUSEBUTTONDOWN: + pressed = self._get_pressed(ev) + if pressed: + self._do_load(pressed, gamestate)