default level fix
[tabakrolletjie.git] / tabakrolletjie / scenes / menu.py
index f9658a9c545b84a2fc0a2f0d99b04f9f60a8ec69..b577370b221289972ea914a08a0c139e8c8f2043 100644 (file)
@@ -1,15 +1,77 @@
 """ Menu scene. """
 
-import pygame.event
 import pygame.locals as pgl
+import pygame.surface
 
 from .base import BaseScene
 from ..events import QuitEvent, SceneChangeEvent
+from ..loader import loader
+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("06-station-alpha.json"))
+
+        self._cont_but = SplashButton("continue_retry", (500, 210))
+        if not save_file_exists():
+            self._cont_but.disable()
+        self._menu = [
+            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, 255, 0))
+        surface.blit(self._soil, (0, 0), None)
+
+        for item in self._menu:
+            item.render(surface)
+
+    def _get_pressed(self, ev):
+        for button in self._menu:
+            if button.pressed(ev):
+                return button.name
+        return None
+
+    def _do_load_save(self, gamestate):
+        gamestate.load_from_json(get_save_data())
+        from .day import DayScene
+        SceneChangeEvent.post(scene=DayScene())
+
+    def _start_new_game(self):
+        from .load_level import LoadLevelScene
+        SceneChangeEvent.post(scene=LoadLevelScene())
+
+    def _do_help(self):
+        from .help import HelpScene
+        SceneChangeEvent.post(scene=HelpScene())
 
     def event(self, ev, gamestate):
         if ev.type == pgl.KEYDOWN:
@@ -18,3 +80,21 @@ class MenuScene(BaseScene):
             elif ev.key == pgl.K_n:
                 from .night import NightScene
                 SceneChangeEvent.post(scene=NightScene())
+            elif ev.key == pgl.K_d:
+                self._do_day()
+            elif ev.key == pgl.K_l:
+                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._start_new_game()
+            elif pressed == 'continue_retry':
+                self._do_load_save(gamestate)
+            elif pressed == 'help':
+                self._do_help()
+            elif pressed == 'quit':
+                QuitEvent.post()
+            elif pressed:
+                print 'Pressed', pressed