X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fmenu.py;h=65128b9e49d3184028320914508063cbc727c877;hb=fa0ff98d6c1a2966313684d8b4372167f3f8a2b2;hp=dac4402bd53643cf06c0a1add5a5be1164316418;hpb=f71f8d10a6b2fc28eb958f5035b5b8d082f8bf70;p=koperkapel.git diff --git a/koperkapel/scenes/menu.py b/koperkapel/scenes/menu.py index dac4402..65128b9 100644 --- a/koperkapel/scenes/menu.py +++ b/koperkapel/scenes/menu.py @@ -1,17 +1,59 @@ """ Main menu scene. """ from pgzero.constants import keys -from .base import Scene, ChangeSceneEvent -from .credits import CreditsScene +from ..actors.buttons import TextButton +from ..actors.navigator import ActorNavigator +from .base import Scene, ChangeSceneEvent, WorldEvent, QuitEvent class MenuScene(Scene): """ Main menu scene. """ - def draw(self, screen): - screen.clear() - screen.draw.text("Main menu", (300, 300)) + def __init__(self): + super().__init__() + self._title = self.actors.add(TextButton("Main Menu")) + self._title.pos = (300, 100) + self._nav = ActorNavigator() + self._menu = [ + TextButton("New Game", action=self.change_to_new_game), + TextButton("Resume", action=self.change_to_resume), + TextButton("Credits", action=self.change_to_credits), + TextButton("Quit", action=self.quit), + ] + for i, item in enumerate(self._menu): + item.pos = (300, 200 + (i * 100)) + self.actors.add(item) + self._nav.connect( + self._menu, [keys.DOWN, keys.RIGHT], [keys.UP, keys.LEFT], + wrap=True) + self._nav.current.select() + + def change_to_resume(self): + from .level import GameLevelScene + return [ChangeSceneEvent(GameLevelScene())] + + def change_to_new_game(self): + from .level import GameLevelScene + return [ + WorldEvent("reset"), + ChangeSceneEvent(GameLevelScene()) + ] + + def change_to_credits(self): + from .credits import CreditsScene + return [ChangeSceneEvent(CreditsScene())] + + def quit(self): + return [QuitEvent()] def on_key_down(self, key, mod, unicode): - if key == keys.C: - return [ChangeSceneEvent(CreditsScene())] + if key == keys.RETURN: + current = self._nav.current + if current is not None: + return current.action() + else: + prev, current = self._nav.follow(key) + if prev is not None: + prev.deselect() + if current is not None: + current.select()