Merge branch 'master' of ctpug.org.za:tabakrolletjie
authorSimon Cross <hodgestar@gmail.com>
Sat, 10 Sep 2016 20:49:50 +0000 (22:49 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 10 Sep 2016 20:49:50 +0000 (22:49 +0200)
tabakrolletjie/scenes/menu.py
tabakrolletjie/utils.py
tabakrolletjie/widgets.py

index dcad16b3d27057898a2f80e6d448b6b06ce24d38..67336112c6c3e7a65151bfb524d23117bf1c7369 100644 (file)
@@ -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
index 6be4469ecf8b404fc8032cb3f2bddb8dcacf0250..6f9e133cb999cd57b20dd64f65f251f4516415e3 100644 (file)
@@ -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)
index 2678e72c46cce18b390686ee079dda184ee1e56b..c1bbc941c38a924153af2875e9af59449b1b776f 100644 (file)
@@ -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)