Mercurial > rinkhals
comparison gamelib/engine.py @ 532:0667189a5973
New load level dialog.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 27 Nov 2009 21:28:20 +0000 |
parents | 399bb3cb4761 |
children | c23e2bd07247 |
comparison
equal
deleted
inserted
replaced
531:452cde9af2a2 | 532:0667189a5973 |
---|---|
7 import gameover | 7 import gameover |
8 import sound | 8 import sound |
9 import constants | 9 import constants |
10 import mainmenu | 10 import mainmenu |
11 import helpscreen | 11 import helpscreen |
12 import loadlevel | |
13 import level | 12 import level |
14 from misc import check_exit | 13 from misc import check_exit |
15 | 14 |
16 class Engine(Game): | 15 class Engine(Game): |
17 def __init__(self, main_app, level_name): | 16 def __init__(self, main_app, level_name): |
18 self.main_app = main_app | 17 self.main_app = main_app |
19 self.clock = pygame.time.Clock() | 18 self.clock = pygame.time.Clock() |
20 self.level = level.Level(level_name) | 19 self.level = level.Level(level_name) |
21 self._open_window = None | 20 self._open_window = None |
22 self.gameboard = None | 21 self.gameboard = None |
23 self.level_loader = None | |
24 | 22 |
25 def tick(self): | 23 def tick(self): |
26 """Tic toc.""" | 24 """Tic toc.""" |
27 pygame.time.wait(10) | 25 pygame.time.wait(10) |
28 | 26 |
29 def load_new_level(self): | 27 def load_new_level(self, new_level): |
30 self.level = self.level_loader.cur_level | 28 self.level = new_level |
31 | 29 |
32 def open_window(self, window): | 30 def open_window(self, window): |
33 """Open a widget as the main window.""" | 31 """Open a widget as the main window.""" |
34 if self._open_window is not None: | 32 if self._open_window is not None: |
35 self.main_app.close(self._open_window) | 33 self.main_app.close(self._open_window) |
40 """Create and open a gameboard window.""" | 38 """Create and open a gameboard window.""" |
41 self.gameboard = gameboard.GameBoard(self.main_app, | 39 self.gameboard = gameboard.GameBoard(self.main_app, |
42 self.level) | 40 self.level) |
43 self.open_window(self.gameboard.get_top_widget()) | 41 self.open_window(self.gameboard.get_top_widget()) |
44 | 42 |
45 def switch_gameboard(self, gameboard): | 43 def switch_gameboard(self, new_gameboard): |
46 """Switch over to a new gameboard.""" | 44 """Switch over to a new gameboard.""" |
47 self.gameboard = gameboard | 45 self.gameboard = new_gameboard |
48 self.gameboard.disp = self.main_app | 46 self.gameboard.disp = self.main_app |
49 self.gameboard.create_display() | 47 self.gameboard.create_display() |
50 self.open_window(self.gameboard.get_top_widget()) | 48 self.open_window(self.gameboard.get_top_widget()) |
51 | 49 |
52 def set_main_menu(self): | 50 def set_main_menu(self): |
53 """Open the main menu""" | 51 """Open the main menu""" |
54 self.scoreboard = gameover.ScoreTable(self.level) | 52 self.scoreboard = gameover.ScoreTable(self.level) |
55 self.level_loader = None | |
56 main_menu = mainmenu.make_main_menu(self.level) | 53 main_menu = mainmenu.make_main_menu(self.level) |
57 self.open_window(main_menu) | 54 self.open_window(main_menu) |
58 | 55 |
59 def set_help_screen(self): | 56 def set_help_screen(self): |
60 """Open the main menu""" | 57 """Open the main menu""" |
61 help_screen = helpscreen.make_help_screen(self.level) | 58 help_screen = helpscreen.make_help_screen(self.level) |
62 self.open_window(help_screen) | 59 self.open_window(help_screen) |
63 | |
64 def set_level_screen(self): | |
65 """Open the Load Level screen""" | |
66 level_screen, self.level_loader = loadlevel.make_load_screen(self.level) | |
67 self.open_window(level_screen) | |
68 | 60 |
69 def create_game_over(self): | 61 def create_game_over(self): |
70 """Create and open the Game Over window""" | 62 """Create and open the Game Over window""" |
71 level = self.gameboard.level | 63 level = self.gameboard.level |
72 game_over = gameover.create_game_over(self.gameboard, | 64 game_over = gameover.create_game_over(self.gameboard, |
91 if events_equal(e, START_DAY): | 83 if events_equal(e, START_DAY): |
92 self.game.create_game_board() | 84 self.game.create_game_board() |
93 return DayState(self.game) | 85 return DayState(self.game) |
94 elif events_equal(e, GO_HELP_SCREEN): | 86 elif events_equal(e, GO_HELP_SCREEN): |
95 return HelpScreenState(self.game) | 87 return HelpScreenState(self.game) |
96 elif events_equal(e, GO_LEVEL_SCREEN): | |
97 return LevelScreenState(self.game) | |
98 elif e.type is KEYDOWN: | 88 elif e.type is KEYDOWN: |
99 if e.key == K_ESCAPE: | 89 if e.key == K_ESCAPE: |
100 return Quit(self.game) | 90 return Quit(self.game) |
101 elif e.key == K_s: | 91 elif e.key == K_s: |
102 self.game.create_game_board() | 92 self.game.create_game_board() |
103 return DayState(self.game) | 93 return DayState(self.game) |
104 elif e.key == K_i: | 94 elif e.key == K_i: |
105 return HelpScreenState(self.game) | 95 return HelpScreenState(self.game) |
96 elif e.type is DO_LOAD_LEVEL: | |
97 self.game.load_new_level(e.level) | |
98 return | |
106 elif e.type is DO_LOAD_SAVEGAME: | 99 elif e.type is DO_LOAD_SAVEGAME: |
107 self.game.switch_gameboard(e.gameboard) | 100 self.game.switch_gameboard(e.gameboard) |
108 e.gameboard.skip_next_start_day() | 101 e.gameboard.skip_next_start_day() |
109 return DayState(self.game) | 102 return DayState(self.game) |
110 elif e.type is not QUIT: | 103 elif e.type is not QUIT: |
126 | 119 |
127 def event(self, e): | 120 def event(self, e): |
128 if e.type is KEYDOWN and e.key == K_ESCAPE: | 121 if e.type is KEYDOWN and e.key == K_ESCAPE: |
129 return MainMenuState(self.game) | 122 return MainMenuState(self.game) |
130 elif events_equal(e, GO_MAIN_MENU): | 123 elif events_equal(e, GO_MAIN_MENU): |
131 return MainMenuState(self.game) | |
132 elif e.type is not QUIT: | |
133 self.game.main_app.event(e) | |
134 | |
135 def paint(self, screen): | |
136 screen.fill((0,0,0)) | |
137 self.game.main_app.paint(screen) | |
138 pygame.display.flip() | |
139 | |
140 def update(self, screen): | |
141 update = self.game.main_app.update(screen) | |
142 pygame.display.update(update) | |
143 | |
144 | |
145 class LevelScreenState(State): | |
146 def init(self): | |
147 sound.stop_background_music() | |
148 self.game.set_level_screen() | |
149 | |
150 def event(self, e): | |
151 if e.type is KEYDOWN and e.key == K_ESCAPE: | |
152 return MainMenuState(self.game) | |
153 elif events_equal(e, GO_MAIN_MENU): | |
154 return MainMenuState(self.game) | |
155 elif events_equal(e, DO_LOAD_LEVEL): | |
156 self.game.load_new_level() | |
157 return MainMenuState(self.game) | 124 return MainMenuState(self.game) |
158 elif e.type is not QUIT: | 125 elif e.type is not QUIT: |
159 self.game.main_app.event(e) | 126 self.game.main_app.event(e) |
160 | 127 |
161 def paint(self, screen): | 128 def paint(self, screen): |
327 | 294 |
328 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") | 295 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") |
329 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") | 296 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") |
330 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") | 297 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") |
331 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") | 298 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") |
332 GO_LEVEL_SCREEN = pygame.event.Event(USEREVENT, name="GO_LEVEL_SCREEN") | |
333 DO_LOAD_LEVEL = pygame.event.Event(USEREVENT, name="DO_LEVEL_SCREEN") | |
334 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") | 299 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") |
335 MOVE_FOX_ID = USEREVENT + 1 | 300 MOVE_FOX_ID = USEREVENT + 1 |
336 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") | 301 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") |
337 DO_LOAD_SAVEGAME = USEREVENT + 2 | 302 DO_LOAD_SAVEGAME = USEREVENT + 2 |
303 DO_LOAD_LEVEL = USEREVENT + 3 | |
338 QUIT = pygame.event.Event(QUIT) | 304 QUIT = pygame.event.Event(QUIT) |
339 | 305 |
340 # Due to the way pgu's loop timing works, these will only get proceesed | 306 # Due to the way pgu's loop timing works, these will only get proceesed |
341 # at intervals of 10ms, so there's no point in them not being multiples of 10 | 307 # at intervals of 10ms, so there's no point in them not being multiples of 10 |
342 FAST__SPEED=80 | 308 FAST__SPEED=80 |