Mercurial > rinkhals
diff gamelib/loadlevel.py @ 412:1e24eedbf40f
Implement non-gui parts of level loading communication
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sat, 21 Nov 2009 11:34:12 +0000 |
parents | |
children | c6dd21b75bf5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gamelib/loadlevel.py Sat Nov 21 11:34:12 2009 +0000 @@ -0,0 +1,65 @@ +"""Help screen.""" + +from pgu import gui +import os +import pygame +import constants +import level +import engine +import data +import imagecache + +def make_load_screen(level): + """Create a screen for selecting the levels""" + load_screen = LoadScreen(level, width=600) + + c = LoadContainer(align=0, valign=0) + c.add(load_screen, 0, 0) + + return c, load_screen + +class LoadContainer(gui.Container): + def paint(self, s): + pygame.display.set_caption('Load Level') + splash = imagecache.load_image("images/splash.png", ["lighten_most"]) + pygame.display.get_surface().blit(splash, (0, 0)) + gui.Container.paint(self, s) + +class LoadScreen(gui.Document): + def __init__(self, start_level, **params): + self.levels = {} + self.cur_level = start_level + for name in os.listdir(data.filepath('levels/')): + if name.endswith('.conf'): + try: + this_level = level.Level(name) + except RuntimeError: + continue # Skip levels that fail to load + if os.path.exists(this_level.map): + # Skip level if we can't see the map + self.levels[this_level.level_name] = this_level + if not start_level.level_name in self.levels: + print 'Start level not found' + + self.cur_level = self.levels.values()[0] + + gui.Document.__init__(self, **params) + + def done_pressed(): + pygame.event.post(engine.DO_LOAD_LEVEL) + + def cancel_pressed(): + pygame.event.post(engine.GO_MAIN_MENU) + + done_button = gui.Button("Load This Level") + done_button.connect(gui.CLICK, done_pressed) + + cancel_button = gui.Button("Cancel & return to main menu") + cancel_button.connect(gui.CLICK, cancel_pressed) + + self.add(done_button, align=0) + self.add(cancel_button, align=0) + + def get_level(self): + return self.cur_level_name +