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):
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):
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
import time
import pygame.surface
import pygame.locals as pgl
+import os
+import sys
from .constants import DEBUG
from .loader import loader
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)
from .loader import loader
from .constants import FONTS
-from .transforms import NullTransform
+from .transforms import NullTransform, Multiply
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):
pass
def pressed(self, ev):
+ if not self.enabled:
+ return False
if self._pos is None:
# Unplaced buttons can't be pressed
return False
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):
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)