""" Main menu scene. """
-from .base import Scene
+from pgzero.constants import keys
+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.draw.text("Main menu", (300, 300))
+ def __init__(self):
+ super().__init__()
+ self._title = self.actors.add(TextButton("Main Menu"))
+ self._title.pos = (300, 200)
+ self._nav = ActorNavigator()
+ self._menu = [
+ TextButton("Play", action=self.change_to_level),
+ TextButton("View Last Generated Level",
+ action=self.change_to_viewer),
+ TextButton("Manage Roaches", action=self.change_to_roaches),
+ TextButton("Credits", action=self.change_to_credits),
+ TextButton("Quit", action=self.quit),
+ ]
+ for i, item in enumerate(self._menu):
+ item.pos = (300, 300 + (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_level(self):
+ from .level import LevelScene
+ return [ChangeSceneEvent(LevelScene())]
+
+ def change_to_viewer(self):
+ from .viewlevel import ViewLevelScene
+ return [
+ WorldEvent("set", {"level.name": "map"}),
+ ChangeSceneEvent(ViewLevelScene())
+ ]
+
+ def change_to_roaches(self):
+ from .roaches import RoachesScene
+ return [ChangeSceneEvent(RoachesScene())]
+
+ 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.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()