Mercurial > mamba
changeset 166:bea4857487de
Game state and level list
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Wed, 14 Sep 2011 00:38:08 +0200 |
parents | 0b2f2627a0ac |
children | ce30befccc94 |
files | mamba/__main__.py mamba/constants.py mamba/habitats/levelmenu.py mamba/options.py |
diffstat | 4 files changed, 44 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/__main__.py Wed Sep 14 00:19:55 2011 +0200 +++ b/mamba/__main__.py Wed Sep 14 00:38:08 2011 +0200 @@ -7,6 +7,7 @@ from mamba.constants import SCREEN, NAME from mamba.options import options, parse_args, check_args from mamba.engine import Engine +from mamba.gamestate import load_state, load_levels from mamba.sound import SoundSystem from mamba.habitats.mainmenu import MainMenu from mamba.habitats.level import LevelHabitat @@ -25,6 +26,9 @@ pygame.display.set_mode(SCREEN, SWSURFACE) pygame.display.set_caption(NAME) + load_state() + load_levels() + if options.edit: start = EditorHabitat(options.level) elif options.level is not None:
--- a/mamba/constants.py Wed Sep 14 00:19:55 2011 +0200 +++ b/mamba/constants.py Wed Sep 14 00:38:08 2011 +0200 @@ -32,4 +32,5 @@ 'sound': True, 'level': None, 'edit': False, + 'save_location': None, # Determined by a function in options }
--- a/mamba/habitats/levelmenu.py Wed Sep 14 00:19:55 2011 +0200 +++ b/mamba/habitats/levelmenu.py Wed Sep 14 00:38:08 2011 +0200 @@ -2,6 +2,7 @@ from pygame.locals import KEYDOWN +from mamba.gamestate import levels, unlocked_levels, done_levels from mamba.constants import ESCAPE_KEYS from mamba.engine import Habitat, NewHabitatEvent from mamba.widgets.imagebutton import LockableTextButton @@ -11,23 +12,35 @@ def __init__(self): super(LevelMenu, self).__init__() - self.levels = [] - for level in range(1, 6): - button = LockableTextButton((50 + 75 * level, 100), str(level)) + self.level_buttons = [] + for level, name in enumerate(levels): + button = LockableTextButton((50 + 75 * level, 100), str(level + 1), + color='white') + button.add_callback('clicked', self.level_selected, name) + button.locked = level not in unlocked_levels self.container.add(button) - button.add_callback('clicked', self.level_selected, level) - if level > 1: - button.locked = True + self.level_buttons.append(button) self.container.add_callback(KEYDOWN, self.keydown_event) + self.update_button_colors() - def level_selected(self, ev, widget, level): + def update_button_colors(self): + for level, button in enumerate(self.level_buttons): + if not button.locked and level not in done_levels: + button.color = 'green' + else: + button.color = 'white' + + def level_selected(self, ev, widget, name): # Demo: if widget.locked: widget.locked = False - if level == 1: + self.update_button_colors() + return True + + if not widget.locked: from mamba.habitats.level import LevelHabitat - NewHabitatEvent.post(LevelHabitat('dev')) - return True + NewHabitatEvent.post(LevelHabitat(name)) + return True def keydown_event(self, ev, widget): if ev.key in ESCAPE_KEYS:
--- a/mamba/options.py Wed Sep 14 00:19:55 2011 +0200 +++ b/mamba/options.py Wed Sep 14 00:38:08 2011 +0200 @@ -2,6 +2,7 @@ import optparse import os +import sys from mamba.constants import DEFAULTS @@ -35,6 +36,8 @@ parser = optparse.OptionParser() parser.add_option("--no-sound", action="store_false", default=True, dest="sound", help="disable sound") + parser.add_option("--save-location", default=_get_default_save_location(), + dest="save_location", help="Saved game location") if options.debug: parser.add_option("--level", type="str", default=None, @@ -45,6 +48,7 @@ opts, _ = parser.parse_args(args) options.set_option('sound', opts.sound) + options.set_option('save_location', opts.save_location) if options.debug: options.set_option('level', opts.level) @@ -59,3 +63,15 @@ print "You must supply --level when using --edit." return False return True + + +def _get_default_save_location(): + """Return a default save game location.""" + app = "mamba" + if sys.platform.startswith("win"): + if "APPDATA" in os.environ: + return os.path.join(os.environ["APPDATA"], app) + return os.path.join(os.path.expanduser("~"), "." + app) + elif 'XDG_DATA_HOME' in os.environ: + return os.path.join(os.environ["XDG_DATA_HOME"], app) + return os.path.join(os.path.expanduser("~"), ".local", "share", app)