# HG changeset patch # User Adrianna PiƄska # Date 1302379422 -7200 # Node ID 200d25350d8741153d6b8e2b8f1ef95a0af6181f # Parent 2f1bafc93177a7d23e404c744ae84044f358ebc9# Parent fb9258d66137f1676eddc7c3bb4790aa81a5d140 merge diff -r 2f1bafc93177 -r 200d25350d87 skaapsteker/cutscene.py --- 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): diff -r 2f1bafc93177 -r 200d25350d87 skaapsteker/engine.py --- 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): diff -r 2f1bafc93177 -r 200d25350d87 skaapsteker/gamestate.py --- 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: diff -r 2f1bafc93177 -r 200d25350d87 skaapsteker/menuscene.py --- 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)