# HG changeset patch # User Jeremy Thurgood # Date 1359283674 -7200 # Node ID 0e5b80b3128cc6f991773fd9411005948a174f42 # Parent bdaffaa8b6bfffbd25280b305cfd04a9f921253f Putting the new MenuScreen in the repo might be a good idea. I should totally do that. diff -r bdaffaa8b6bf -r 0e5b80b3128c pyntnclick/menuscreen.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pyntnclick/menuscreen.py Sun Jan 27 12:47:54 2013 +0200 @@ -0,0 +1,119 @@ +# menu.py +# Copyright Boomslang team, 2010 (see COPYING File) +# Main menu for the game + +import pygame.event +from pygame.locals import QUIT +from pyntnclick.engine import Screen +from pyntnclick.widgets.imagebutton import ImageButtonWidget +from pyntnclick.widgets.text import TextButton + + +class MenuScreen(Screen): + BACKGROUND_IMAGE = None + + def setup(self): + self._background = None + if self.BACKGROUND_IMAGE is not None: + self._background = self.resource.get_image(self.BACKGROUND_IMAGE) + + self._add_new_game_button() + self._add_load_game_button() + self._add_save_game_button() + self._add_resume_game_button() + self._add_quit_button() + + def on_enter(self): + super(MenuScreen, self).on_enter() + running = self.check_running() + self.set_button_state(self._resume_game_button, running) + self.set_button_state(self._load_game_button, self.check_has_saves()) + self.set_button_state(self._save_game_button, running) + + def set_button_state(self, button, enabled): + button.visible = enabled + if enabled: + button.enable() + else: + button.disable() + + def make_new_game_button(self): + "Override this to customise the new game button." + return self.make_text_button((200, 100), 'New game') + + def make_load_game_button(self): + "Override this to customise the load game button." + return self.make_text_button((200, 200), 'Load game') + + def make_save_game_button(self): + "Override this to customise the save game button." + return self.make_text_button((200, 300), 'Save game') + + def make_resume_button(self): + "Override this to customise the resume game button." + return self.make_text_button((200, 400), 'Resume') + + def make_quit_button(self): + "Override this to customise the quit button." + return self.make_text_button((200, 500), 'Quit') + + def _add_new_game_button(self): + self._new_game_button = self.make_new_game_button() + self._new_game_button.add_callback('clicked', self.new_game) + + def _add_load_game_button(self): + self._load_game_button = self.make_load_game_button() + self._load_game_button.add_callback('clicked', self.load_game) + + def _add_save_game_button(self): + self._save_game_button = self.make_save_game_button() + self._save_game_button.add_callback('clicked', self.save_game) + + def _add_resume_game_button(self): + self._resume_game_button = self.make_resume_game_button() + self._resume_game_button.add_callback('clicked', self.resume_game) + + def _add_quit_button(self): + self._quit_button = self.make_quit_button() + self._quit_button.add_callback('clicked', self.quit) + + def make_text_button(self, rect, text): + widget = TextButton(rect, self.gd, text) + self.container.add(widget) + return widget + + def make_image_button(self, rect, image_name): + image = self.resource.get_image(image_name) + widget = ImageButtonWidget(rect, self.gd, image) + self.container.add(widget) + return widget + + def draw_background(self): + if self._background is not None: + self.surface.blit(self._background, self.surface.get_rect()) + + def new_game(self, ev, widget): + self.screen_event('game', 'restart') + self.change_screen('game') + + def load_game(self, ev, widget): + self.screen_event('game', 'load') + self.change_screen('game') + + def save_game(self, ev, widget): + self.screen_event('game', 'save') + + def check_running(self): + return self.gd.running + + def check_has_saves(self): + import os.path + save_dir = self.gd.get_default_save_location() + return os.path.exists( + self.gd.game_state_class().get_save_fn(save_dir, 'savegame')) + + def resume_game(self, ev, widget): + self.change_screen('game') + + def quit(self, ev, widget): + pygame.event.post(pygame.event.Event(QUIT))