""" Menu scene. """
import pygame.locals as pgl
+import pygame.surface
from .base import BaseScene
from ..events import QuitEvent, SceneChangeEvent
from ..loader import loader
-from ..constants import FONTS
-from ..widgets import TextButton, SpacerButton
+from ..utils import save_file_exists, get_save_data
+from ..widgets import ImageButton
+from ..transforms import Overlay
+
+class SplashButton(ImageButton):
+ def __init__(self, name, pos):
+ super(SplashButton, self).__init__("splash", "%s.png" % name, name=name,
+ pos=pos, disabled_colour=(50, 50, 50))
+ w, h = self._img.get_size()
+ img = pygame.surface.Surface((w+8, h+4), pgl.SWSURFACE).convert_alpha()
+ img.fill((0, 0, 0, 0))
+ img.blit(self._img, (8, 4), None)
+ img.fill((0, 0, 0, 255), None, pgl.BLEND_RGBA_MULT)
+ img.blit(self._img, (0, 0), None)
+ self._img = img
class MenuScene(BaseScene):
+
+ BRIGHTNESS = Overlay(colour=(255, 255, 255, 50))
+
def enter(self, gamestate):
if gamestate.station is None:
print "Loading Station Alpha ..."
- gamestate.set_station(loader.load_station("station-alpha.json"))
- font_title = loader.load_font(FONTS['bold'], size=32)
- self._title = font_title.render('A Game with a title', True,
- (255, 255, 255))
+ gamestate.set_station(loader.load_station("06-station-alpha.json"))
+
+ self._cont_but = SplashButton("continue_retry", (500, 210))
+ if not save_file_exists():
+ self._cont_but.disable()
self._menu = [
- TextButton("New Game", (255, 255, 255), name='new game'),
- TextButton("Continue / Retry", (255, 255, 255), name='continue'),
- TextButton("Help", (255, 255, 255), name='help'),
- SpacerButton((50, 30)),
- TextButton("Quit", (255, 255, 255), name='quit'),
+ SplashButton("new_game", (600, 150)),
+ self._cont_but,
+ SplashButton("help", (700, 270)),
+ SplashButton("quit", (800, 330)),
]
+
+ # Background
+ self._soil = loader.load_image(
+ "textures", "soil.png", transform=self.BRIGHTNESS).convert_alpha()
+ splash = loader.load_image("splash", "splash.png").convert_alpha()
+ self._soil.blit(splash, (0, 0), None)
def render(self, surface, gamestate):
- surface.fill((0, 128, 0))
-
- pos = ((surface.get_width() - self._title.get_width()) / 2, 50)
- surface.blit(self._title, pos, None)
+ surface.blit(self._soil, (0, 0), None)
- height = 150
for item in self._menu:
- if not item.position:
- item.position = ((surface.get_width() - item.get_width()) / 2,
- height)
item.render(surface)
- height += item.get_height() + 30
def _get_pressed(self, ev):
for button in self._menu:
return button.name
return None
- def _do_day(self):
+ def _do_load_save(self, gamestate):
+ gamestate.load_from_json(get_save_data())
from .day import DayScene
SceneChangeEvent.post(scene=DayScene())
- def _do_load_level(self):
+ def _start_new_game(self):
from .load_level import LoadLevelScene
SceneChangeEvent.post(scene=LoadLevelScene())
elif ev.key == pgl.K_d:
self._do_day()
elif ev.key == pgl.K_l:
- self._do_load_level()
+ self._start_new_game()
elif ev.key == pgl.K_h:
self._do_help()
elif ev.type == pgl.MOUSEBUTTONDOWN:
pressed = self._get_pressed(ev)
- if pressed == 'new game':
- self._do_load_level()
- elif pressed == 'continue':
- self._do_day()
+ if pressed == 'new_game':
+ self._start_new_game()
+ elif pressed == 'continue_retry':
+ self._do_load_save(gamestate)
elif pressed == 'help':
self._do_help()
elif pressed == 'quit':