5 import pygame.locals as pgl
7 from .base import BaseScene
8 from ..constants import SCREEN_SIZE
9 from ..events import SceneChangeEvent
10 from ..widgets import TextButton
11 from ..loader import loader
14 class LoadLevelScene(BaseScene):
16 def _list_stations(self):
17 station_path = loader.full_path("stations")
18 files = [f for f in os.listdir(station_path) if f.endswith(".json")]
20 return [loader.load_station(f) for f in files]
22 def enter(self, gamestate):
23 """Construct list of stations"""
24 width = SCREEN_SIZE[0] / 2
25 self._title = TextButton(
26 'Select a planet:', (255, 255, 255), pos=(width, 75),
27 size=32, font='bold', centre=True)
30 for station in self._list_stations():
31 title = station["config"]["name"]
33 button = TextButton(title, (255, 255, 255), pos=pos, centre=True)
34 button.station = station
35 height += button.get_height() + 20
36 self._buttons.append(button)
38 def render(self, surface, gamestate):
39 surface.fill((0, 128, 128))
40 self._title.render(surface)
41 for button in self._buttons:
42 button.render(surface)
44 def _get_pressed(self, ev):
45 for button in self._buttons:
46 if button.pressed(ev):
50 def _do_load(self, station, gamestate):
51 from .day import DayScene
52 print "Loading station", station["config"]["name"]
53 gamestate.set_station(station)
54 SceneChangeEvent.post(scene=DayScene())
56 def event(self, ev, gamestate):
57 if ev.type == pgl.KEYDOWN:
58 if ev.key in (pgl.K_q, pgl.K_ESCAPE):
59 from .menu import MenuScene
60 SceneChangeEvent.post(scene=MenuScene())
61 elif ev.type == pgl.MOUSEBUTTONDOWN:
62 pressed = self._get_pressed(ev)
64 self._do_load(pressed.station, gamestate)