splash screen
[tabakrolletjie.git] / tabakrolletjie / scenes / menu.py
index 89b531e2621d78f69ec75e7869fb880104c5e3b5..9cf0557f27d909bedc2688bf26fc7fd86d94d0f9 100644 (file)
@@ -1,48 +1,58 @@
 """ 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))
-        self._cont_but = TextButton("Continue / Retry", (255, 255, 255),
-                                    name='continue')
+
+        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'),
+            SplashButton("new_game", (600, 150)),
             self._cont_but,
-            TextButton("Help", (255, 255, 255), name='help'),
-            SpacerButton((50, 30)),
-            TextButton("Quit", (255, 255, 255), name='quit'),
+            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:
@@ -78,9 +88,9 @@ class MenuScene(BaseScene):
                 self._do_help()
         elif ev.type == pgl.MOUSEBUTTONDOWN:
             pressed = self._get_pressed(ev)
-            if pressed == 'new game':
+            if pressed == 'new_game':
                 self._start_new_game()
-            elif pressed == 'continue':
+            elif pressed == 'continue_retry':
                 self._do_load_save(gamestate)
             elif pressed == 'help':
                 self._do_help()