Skeleton for roach management scene.
[koperkapel.git] / koperkapel / scenes / menu.py
1 """ Main menu scene. """
2
3 from pgzero.constants import keys
4 from ..actors.buttons import TextButton
5 from ..actors.navigator import ActorNavigator
6 from .base import Scene, ChangeSceneEvent, QuitEvent
7
8
9
10
11 class MenuScene(Scene):
12     """ Main menu scene. """
13
14     def __init__(self):
15         super().__init__()
16         self._title = self.actors.add(TextButton("Main Menu"))
17         self._title.pos = (300, 200)
18         self._nav = ActorNavigator()
19         self._menu = [
20             TextButton("Play", action=self.change_to_level),
21             TextButton("View Last Generated Level",
22                        action=self.change_to_viewer),
23             TextButton("Manage Roaches", action=self.change_to_roaches),
24             TextButton("Credits", action=self.change_to_credits),
25             TextButton("Quit", action=self.quit),
26         ]
27         for i, item in enumerate(self._menu):
28             item.pos = (300, 300 + (i * 100))
29             self.actors.add(item)
30         self._nav.connect(
31             self._menu, [keys.DOWN, keys.RIGHT], [keys.UP, keys.LEFT],
32             wrap=True)
33         self._nav.current.select()
34
35     def change_to_level(self):
36         from .level import LevelScene
37         return [ChangeSceneEvent(LevelScene('level1'))]
38
39     def change_to_viewer(self):
40         from .viewlevel import ViewLevelScene
41         return [ChangeSceneEvent(ViewLevelScene('map'))]
42
43     def change_to_roaches(self):
44         from .roaches import RoachesScene
45         return [ChangeSceneEvent(RoachesScene())]
46
47     def change_to_credits(self):
48         from .credits import CreditsScene
49         return [ChangeSceneEvent(CreditsScene())]
50
51     def quit(self):
52         return [QuitEvent()]
53
54     def on_key_down(self, key, mod, unicode):
55         if key == keys.RETURN:
56             current = self._nav.current
57             if current is not None:
58                 return current.action()
59         else:
60             prev, current = self._nav.follow(key)
61             if prev is not None:
62                 prev.deselect()
63             if current is not None:
64                 current.select()