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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
4 from .data import load_image
448
fada4195349d Credits Cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 375
diff changeset
5 from .cutscene import OpeningCutScene, UsageCutScene, CreditsCutScene
479
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
129afb4417cf Some light cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
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
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 248
diff changeset
13 super(MenuScene, self).__init__(game_state, soundsystem)
479
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
14 self._background = load_image('backgrounds/main-menu.png')
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
15 self._cursor = load_image('sprites/main-menu-cursor.png')
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
16 self._selected = 0
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
17 self._options = ['restart', 'usage', 'credits', 'quit']
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
18 self._can_resume = self.game_state.world is not None
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
19 if self._can_resume:
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
20 resume = load_image('sprites/main-menu-resume.png')
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
21 self._background.blit(resume, (73, 180))
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
26 fox = self.game_state.world.fox
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fada4195349d Credits Cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 375
diff changeset
33 elif data == 'credits':
fada4195349d Credits Cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 375
diff changeset
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
592477d8b09b Add fps to game
Neil Muller <drnlmuller@gmail.com>
parents: 119
diff changeset
38 def draw(self, surface, engine):
479
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
39 cursor_x = 35
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
40 cursor_y = 232
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
41 if self._can_resume:
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
42 cursor_y -= 43
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
43 cursor_y += 43 * self._selected
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
44 surface.blit(self._background, (0, 0))
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
51 elif ev.key == K_DOWN:
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
52 self._selected += 1
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
53 elif ev.key == K_UP:
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
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
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
56 self.selected(self._selected, self._options[self._selected])
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
57
fb9258d66137 New Main Menu
Stefano Rivera <stefano@rivera.za.net>
parents: 454
diff changeset
58 self._selected %= 4 + int(self._can_resume)