Mercurial > skaapsteker
annotate skaapsteker/menuscene.py @ 632:0675f390653c
Initial port to Python 3 and Pygame 2.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 20 Jan 2023 20:01:06 +0100 |
parents | a5a57abd5472 |
children |
rev | line source |
---|---|
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
1 import pygame |
495
a5a57abd5472
Allow K_SPACE wherever we allow K_RETURN.
Jeremy Thurgood <firxen@gmail.com>
parents:
479
diff
changeset
|
2 from pygame.locals import K_ESCAPE, K_q, K_UP, K_DOWN, K_RETURN, K_SPACE, KEYDOWN, QUIT |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
3 |
479 | 4 from .data import load_image |
448 | 5 from .cutscene import OpeningCutScene, UsageCutScene, CreditsCutScene |
479 | 6 from .engine import ChangeScene, Scene |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
7 from .levelscene import LevelScene |
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
8 from .widgets.text import Text, TextChoice |
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
9 |
248 | 10 |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
11 class MenuScene(Scene): |
454
95527fd29872
More complete game load/save/restart.
Jeremy Thurgood <firxen@gmail.com>
parents:
448
diff
changeset
|
12 def __init__(self, game_state, soundsystem): |
262 | 13 super(MenuScene, self).__init__(game_state, soundsystem) |
479 | 14 self._background = load_image('backgrounds/main-menu.png') |
15 self._cursor = load_image('sprites/main-menu-cursor.png') | |
16 self._selected = 0 | |
17 self._options = ['restart', 'usage', 'credits', 'quit'] | |
18 self._can_resume = self.game_state.world is not None | |
19 if self._can_resume: | |
20 resume = load_image('sprites/main-menu-resume.png') | |
21 self._background.blit(resume, (73, 180)) | |
22 self._options.insert(0, 'resume') | |
454
95527fd29872
More complete game load/save/restart.
Jeremy Thurgood <firxen@gmail.com>
parents:
448
diff
changeset
|
23 |
109
982f34d0aac0
Add optional data to identify TextChoice options
Stefano Rivera <stefano@rivera.za.net>
parents:
104
diff
changeset
|
24 def selected(self, option, data): |
218
7ee5bd883d62
renamed first proper level
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
170
diff
changeset
|
25 if data == 'resume': |
479 | 26 fox = self.game_state.world.fox |
27 ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway]))) | |
454
95527fd29872
More complete game load/save/restart.
Jeremy Thurgood <firxen@gmail.com>
parents:
448
diff
changeset
|
28 elif data == 'restart': |
479 | 29 self.game_state.new_game() |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
274
diff
changeset
|
30 ChangeScene.post(OpeningCutScene(self.game_state, self._soundsystem)) |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
274
diff
changeset
|
31 elif data == 'usage': |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
274
diff
changeset
|
32 ChangeScene.post(UsageCutScene(self.game_state, self._soundsystem)) |
448 | 33 elif data == 'credits': |
34 ChangeScene.post(CreditsCutScene(self.game_state, self._soundsystem)) | |
134
4713a2a3b0be
Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
133
diff
changeset
|
35 elif data == 'quit': |
4713a2a3b0be
Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
133
diff
changeset
|
36 pygame.event.post(pygame.event.Event(QUIT)) |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
37 |
123 | 38 def draw(self, surface, engine): |
479 | 39 cursor_x = 35 |
40 cursor_y = 232 | |
41 if self._can_resume: | |
42 cursor_y -= 43 | |
43 cursor_y += 43 * self._selected | |
44 surface.blit(self._background, (0, 0)) | |
45 surface.blit(self._cursor, (cursor_x, cursor_y)) | |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
46 |
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
47 def dispatch(self, ev): |
632
0675f390653c
Initial port to Python 3 and Pygame 2.
Simon Cross <hodgestar@gmail.com>
parents:
495
diff
changeset
|
48 if ev.type == KEYDOWN: |
479 | 49 if ev.key in (K_q, K_ESCAPE): |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
50 pygame.event.post(pygame.event.Event(QUIT)) |
479 | 51 elif ev.key == K_DOWN: |
52 self._selected += 1 | |
53 elif ev.key == K_UP: | |
54 self._selected -= 1 | |
495
a5a57abd5472
Allow K_SPACE wherever we allow K_RETURN.
Jeremy Thurgood <firxen@gmail.com>
parents:
479
diff
changeset
|
55 elif ev.key in [K_RETURN, K_SPACE]: |
479 | 56 self.selected(self._selected, self._options[self._selected]) |
57 | |
58 self._selected %= 4 + int(self._can_resume) |