changeset 482:200d25350d87

merge
author Adrianna Pińska <adrianna.pinska@gmail.com>
date Sat, 09 Apr 2011 22:03:42 +0200
parents 2f1bafc93177 (current diff) fb9258d66137 (diff)
children b48c194c4af9
files
diffstat 4 files changed, 35 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/cutscene.py	Sat Apr 09 22:03:23 2011 +0200
+++ b/skaapsteker/cutscene.py	Sat Apr 09 22:03:42 2011 +0200
@@ -90,8 +90,8 @@
     music = None
 
     def done(self, selected=None, data=None):
-        ChangeScene.post(LevelScene(self.game_state, self._soundsystem,
-                                    'temple.starting'))
+        fox = self.game_state.world.fox
+        ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway])))
 
 
 class UsageCutScene(CutScene):
--- a/skaapsteker/engine.py	Sat Apr 09 22:03:23 2011 +0200
+++ b/skaapsteker/engine.py	Sat Apr 09 22:03:42 2011 +0200
@@ -42,10 +42,6 @@
             for ev in events:
                 if ev.type is QUIT:
                     return
-                if NewGameEvent.matches(ev):
-                    self.game_state.new_game()
-                    fox = self.game_state.world.fox
-                    ChangeScene.post((ev.scene_type, '.'.join([fox.level, fox.doorway])))
                 if ChangeScene.matches(ev):
                     next_scene = ev.next_scene
                     if not isinstance(next_scene, Scene):
@@ -105,13 +101,6 @@
     def matches(cls, ev):
         return ev.type is USEREVENT and ev.utype == cls.utype
 
-class NewGameEvent(UserEvent):
-
-    utype = "NEW_GAME_EVENT"
-
-    @classmethod
-    def post(cls, scene_type):
-        super(NewGameEvent, cls).post(scene_type=scene_type)
 
 class ChangeScene(UserEvent):
 
--- a/skaapsteker/gamestate.py	Sat Apr 09 22:03:23 2011 +0200
+++ b/skaapsteker/gamestate.py	Sat Apr 09 22:03:42 2011 +0200
@@ -54,6 +54,8 @@
         self.save_game()
 
     def save_game(self):
+        if self.world is None:
+            return
         save_dir, _ = os.path.split(self._game_file)
         if not os.path.exists(save_dir):
             try:
--- a/skaapsteker/menuscene.py	Sat Apr 09 22:03:23 2011 +0200
+++ b/skaapsteker/menuscene.py	Sat Apr 09 22:03:42 2011 +0200
@@ -1,8 +1,9 @@
 import pygame
-from pygame.locals import K_ESCAPE, K_q, KEYDOWN, QUIT
+from pygame.locals import K_ESCAPE, K_q, K_UP, K_DOWN, K_RETURN, KEYDOWN, QUIT
 
+from .data import load_image
 from .cutscene import OpeningCutScene, UsageCutScene, CreditsCutScene
-from .engine import ChangeScene, Scene, NewGameEvent
+from .engine import ChangeScene, Scene
 from .levelscene import LevelScene
 from .widgets.text import Text, TextChoice
 
@@ -10,41 +11,22 @@
 class MenuScene(Scene):
     def __init__(self, game_state, soundsystem):
         super(MenuScene, self).__init__(game_state, soundsystem)
-        self.widgets.append(Text("MENU:", (50, 50), color='white', size=48))
-        menu_options = [
-            ('Start new game', 'restart'),
-            ('Starting Cutscene', 'cutscene'),
-            ('Temple', 'temple.starting'),
-            ("Temple grounds", "temple_grounds.starting"),
-            ("Road", "road.starting"),
-            ("Town", "town.starting"),
-            ("Tea house", "tea_house.starting"),
-            ("Kumiko's rooms", "geisha_room.starting"),
-            ("Market", "market.starting"),
-            ("Fishmonger's house", "fishmonger_house.starting"),
-            ("Theatre", "theatre.starting"),
-            ("Celestial plane", "celestial_plane.starting"),
-            ('Usage', 'usage'),
-            ('Credits', 'credits'),
-            ('Quit', 'quit'),
-        ]
-        if self.game_state.world is not None:
-            menu_options.insert(0, ('Resume Game', 'resume'))
-        self.choice = TextChoice(menu_options, (50, 100), color='white')
-        self.choice.callbacks.append(self.selected)
-        self.widgets.append(self.choice)
-
-    def resume_game(self):
-        fox = self.game_state.world.fox
-        ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway])))
+        self._background = load_image('backgrounds/main-menu.png')
+        self._cursor = load_image('sprites/main-menu-cursor.png')
+        self._selected = 0
+        self._options = ['restart', 'usage', 'credits', 'quit']
+        self._can_resume = self.game_state.world is not None
+        if self._can_resume:
+            resume = load_image('sprites/main-menu-resume.png')
+            self._background.blit(resume, (73, 180))
+            self._options.insert(0, 'resume')
 
     def selected(self, option, data):
-        "Callback from menu TextChoice"
         if data == 'resume':
-            self.resume_game()
+            fox = self.game_state.world.fox
+            ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway])))
         elif data == 'restart':
-            NewGameEvent.post(LevelScene)
-        elif data == 'cutscene':
+            self.game_state.new_game()
             ChangeScene.post(OpeningCutScene(self.game_state, self._soundsystem))
         elif data == 'usage':
             ChangeScene.post(UsageCutScene(self.game_state, self._soundsystem))
@@ -52,15 +34,25 @@
             ChangeScene.post(CreditsCutScene(self.game_state, self._soundsystem))
         elif data == 'quit':
             pygame.event.post(pygame.event.Event(QUIT))
-        else:
-            ChangeScene.post(LevelScene(self.game_state, self._soundsystem, data))
 
     def draw(self, surface, engine):
-        surface.fill(pygame.Color('black'))
-        super(MenuScene, self).draw(surface, engine)
+        cursor_x = 35
+        cursor_y = 232
+        if self._can_resume:
+            cursor_y -= 43
+        cursor_y += 43 * self._selected
+        surface.blit(self._background, (0, 0))
+        surface.blit(self._cursor, (cursor_x, cursor_y))
 
     def dispatch(self, ev):
         if ev.type is KEYDOWN:
-            if ev.key in(K_q, K_ESCAPE):
+            if ev.key in (K_q, K_ESCAPE):
                 pygame.event.post(pygame.event.Event(QUIT))
-        super(MenuScene, self).dispatch(ev)
+            elif ev.key == K_DOWN:
+                self._selected += 1
+            elif ev.key == K_UP:
+                self._selected -= 1
+            elif ev.key == K_RETURN:
+                self.selected(self._selected, self._options[self._selected])
+
+        self._selected %= 4 + int(self._can_resume)