X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Fmenu.py;h=956a4b109da76ba160fa4f60adc9d929e63d986c;hb=f3ab2c4223c971a78ac663f26f6ee3352d7d801b;hp=63e1ba84ae48891201f24376fc3c002a5d6880bd;hpb=590f15d78138250a04cc777d645c2ca632b8984a;p=koperkapel.git diff --git a/koperkapel/scenes/menu.py b/koperkapel/scenes/menu.py index 63e1ba8..956a4b1 100644 --- a/koperkapel/scenes/menu.py +++ b/koperkapel/scenes/menu.py @@ -1,20 +1,76 @@ """ Main menu scene. """ from pgzero.constants import keys -from .base import Scene, ChangeSceneEvent -from .credits import CreditsScene -from .level import LevelScene +from pgzero.loaders import images +from ..actors.navigator import ActorNavigator +from ..actors.orientatedsurf import OrientatedSurfActor, SelectableSurfActor +from ..util import safepath +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.actors.add_layer("buttons", level=10) + self._init_bg() + self._init_buttons() + + def _init_bg(self): + self.actors.default.clear() + self.actors.default.add(OrientatedSurfActor( + images.load(safepath("splash/background")))) + + def _init_buttons(self): + self._nav = ActorNavigator() + menu = [ + self._build_button("new_game", action=self.change_to_new_game), + self._build_button("resume_game", action=self.change_to_resume), + self._build_button("credits", action=self.change_to_credits), + self._build_button("quit", action=self.quit), + ] + for i, item in enumerate(menu): + item.pos = (300, 200 + (i * 100)) + self.actors.add(item) + self._nav.connect( + menu, [keys.DOWN, keys.RIGHT], [keys.UP, keys.LEFT], + wrap=True) + self._nav.current.selected = True + + def _build_button(self, name, action): + actor = SelectableSurfActor( + images.load(safepath("splash/%s" % (name,))), + images.load(safepath("splash/%s_selected" % (name,)))) + actor.action = action + return actor + + 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.L: - return [ChangeSceneEvent(LevelScene('level1'))] + 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.selected = False + if current is not None: + current.selected = True