From: Simon Cross Date: Sat, 10 Sep 2016 20:49:50 +0000 (+0200) Subject: Merge branch 'master' of ctpug.org.za:tabakrolletjie X-Git-Tag: tabakrolletjie-v1.0.0~41 X-Git-Url: https://git.ctpug.org.za/?p=tabakrolletjie.git;a=commitdiff_plain;h=9825966c393bb5924fbb9f2d0776c90cc0e6f785;hp=e4293bddb43d45dd56ef54c798ebc55076c3d97a Merge branch 'master' of ctpug.org.za:tabakrolletjie --- diff --git a/tabakrolletjie/scenes/menu.py b/tabakrolletjie/scenes/menu.py index dcad16b..6733611 100644 --- a/tabakrolletjie/scenes/menu.py +++ b/tabakrolletjie/scenes/menu.py @@ -6,7 +6,8 @@ from .base import BaseScene from ..events import QuitEvent, SceneChangeEvent from ..loader import loader from ..constants import FONTS -from ..widgets import TextButton +from ..widgets import TextButton, SpacerButton +from ..utils import save_file_exists class MenuScene(BaseScene): @@ -17,11 +18,16 @@ class MenuScene(BaseScene): font_title = loader.load_font(FONTS['bold'], size=32) self._title = font_title.render('A Game with a title', True, (255, 255, 255)) + self._cont_but = TextButton("Continue / Retry", (255, 255, 255), + name='continue') + if not save_file_exists(): + self._cont_but.disable() self._menu = [ - TextButton("Load Level", (255, 255, 255), name='load level'), - TextButton("Start Game (Day)", (255, 255, 255), name='start game'), - TextButton("Load Saved Game", (255, 255, 255), name='load game'), + TextButton("New Game", (255, 255, 255), name='new game'), + self._cont_but, TextButton("Help", (255, 255, 255), name='help'), + SpacerButton((50, 30)), + TextButton("Quit", (255, 255, 255), name='quit'), ] def render(self, surface, gamestate): @@ -71,11 +77,13 @@ class MenuScene(BaseScene): self._do_help() elif ev.type == pgl.MOUSEBUTTONDOWN: pressed = self._get_pressed(ev) - if pressed == 'load level': + if pressed == 'new game': self._do_load_level() - elif pressed == 'start game': + elif pressed == 'continue': self._do_day() elif pressed == 'help': self._do_help() + elif pressed == 'quit': + QuitEvent.post() elif pressed: print 'Pressed', pressed diff --git a/tabakrolletjie/utils.py b/tabakrolletjie/utils.py index 6be4469..6f9e133 100644 --- a/tabakrolletjie/utils.py +++ b/tabakrolletjie/utils.py @@ -4,6 +4,8 @@ import functools import time import pygame.surface import pygame.locals as pgl +import os +import sys from .constants import DEBUG from .loader import loader @@ -69,3 +71,24 @@ def shadowed_text(text, font_name, size, offset=4): base.blit(background, (offset, offset), None) base.blit(foreground, (0, 0), None) return base + + +def save_location(): + """Return the directory for the save location.""" + app = "tabakrolletjie" + 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) + + +def get_save_file_name(): + return os.path.join(save_location(), 'savegame.json') + + +def save_file_exists(): + savefile = get_save_file_name() + return os.path.isfile(savefile) diff --git a/tabakrolletjie/widgets.py b/tabakrolletjie/widgets.py index 2678e72..c1bbc94 100644 --- a/tabakrolletjie/widgets.py +++ b/tabakrolletjie/widgets.py @@ -6,7 +6,7 @@ import pygame.locals as pgl from .loader import loader from .constants import FONTS -from .transforms import NullTransform +from .transforms import NullTransform, Multiply class Button(object): @@ -16,6 +16,13 @@ class Button(object): self._padding = padding self.position = pos self.name = name + self.enabled = True + + def enable(self): + self.enabled = True + + def disable(self): + self.enabled = False @property def position(self): @@ -40,6 +47,8 @@ class Button(object): pass def pressed(self, ev): + if not self.enabled: + return False if self._pos is None: # Unplaced buttons can't be pressed return False @@ -50,16 +59,29 @@ class Button(object): return False +class SpacerButton(Button): + """ Add a nothing object which can be used to space other things, + but is never pressed """ + + def pressed(self, ev): + return False + + class TextButton(Button): def __init__(self, text, colour, name=None, pos=None, padding=10): font = loader.load_font(FONTS['sans'], size=24) self._text = font.render(text, True, colour) + self._disabled_text = self._text.copy() + Multiply(colour=(80, 80, 80)).apply(self._disabled_text) super(TextButton, self).__init__(self._text.get_size(), name, pos, padding) def render(self, surface): - surface.blit(self._text, self._pos, None) + if self.enabled: + surface.blit(self._text, self._pos, None) + else: + surface.blit(self._disabled_text, self._pos, None) class ImageButton(Button): @@ -78,6 +100,7 @@ class ImageButton(Button): def update_image(self, *imgparts, **kwargs): transform = kwargs.pop("transform", NullTransform()) self._img = loader.load_image(*imgparts, transform=transform) + Multiply((128, 128, 128)).apply(self._disabled_img) def render(self, surface): surface.blit(self._img, self._pos, None)