Mercurial > rinkhals
comparison gamelib/engine.py @ 412:1e24eedbf40f
Implement non-gui parts of level loading communication
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sat, 21 Nov 2009 11:34:12 +0000 |
parents | 03d5cb669298 |
children | bdc4757e0497 |
comparison
equal
deleted
inserted
replaced
411:03d5cb669298 | 412:1e24eedbf40f |
---|---|
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 | |
12 import level | 13 import level |
13 from misc import check_exit | 14 from misc import check_exit |
14 | 15 |
15 class Engine(Game): | 16 class Engine(Game): |
16 def __init__(self, main_app, level_name): | 17 def __init__(self, main_app, level_name): |
17 self.main_app = main_app | 18 self.main_app = main_app |
19 self.clock = pygame.time.Clock() | |
18 self.level = level.Level(level_name) | 20 self.level = level.Level(level_name) |
19 self.clock = pygame.time.Clock() | |
20 self.main_menu = mainmenu.make_main_menu(self.level) | |
21 self._open_window = None | 21 self._open_window = None |
22 self.scoreboard = gameover.ScoreTable(self.level) | |
23 self.gameboard = None | 22 self.gameboard = None |
23 self.level_loader = None | |
24 | 24 |
25 def tick(self): | 25 def tick(self): |
26 """Tic toc.""" | 26 """Tic toc.""" |
27 pygame.time.wait(10) | 27 pygame.time.wait(10) |
28 | |
29 def load_new_level(self): | |
30 self.level = self.level_loader.cur_level | |
28 | 31 |
29 def open_window(self, window): | 32 def open_window(self, window): |
30 """Open a widget as the main window.""" | 33 """Open a widget as the main window.""" |
31 if self._open_window is not None: | 34 if self._open_window is not None: |
32 self.main_app.close(self._open_window) | 35 self.main_app.close(self._open_window) |
39 self.level) | 42 self.level) |
40 self.open_window(self.gameboard.get_top_widget()) | 43 self.open_window(self.gameboard.get_top_widget()) |
41 | 44 |
42 def set_main_menu(self): | 45 def set_main_menu(self): |
43 """Open the main menu""" | 46 """Open the main menu""" |
44 self.open_window(self.main_menu) | 47 self.scoreboard = gameover.ScoreTable(self.level) |
48 self.level_loader = None | |
49 main_menu = mainmenu.make_main_menu(self.level) | |
50 self.open_window(main_menu) | |
45 | 51 |
46 def set_help_screen(self): | 52 def set_help_screen(self): |
47 """Open the main menu""" | 53 """Open the main menu""" |
48 help_screen = helpscreen.make_help_screen(self.level) | 54 help_screen = helpscreen.make_help_screen(self.level) |
49 self.open_window(help_screen) | 55 self.open_window(help_screen) |
56 | |
57 def set_level_screen(self): | |
58 """Open the Load Level screen""" | |
59 level_screen, self.level_loader = loadlevel.make_load_screen(self.level) | |
60 self.open_window(level_screen) | |
50 | 61 |
51 def create_game_over(self): | 62 def create_game_over(self): |
52 """Create and open the Game Over window""" | 63 """Create and open the Game Over window""" |
53 game_over = gameover.create_game_over(self.gameboard, | 64 game_over = gameover.create_game_over(self.gameboard, |
54 self.scoreboard[self.level.level_name], self.level) | 65 self.scoreboard[self.level.level_name], self.level) |
59 if not Game.event(self, e): | 70 if not Game.event(self, e): |
60 if self.gameboard: | 71 if self.gameboard: |
61 return self.gameboard.event(e) | 72 return self.gameboard.event(e) |
62 return False | 73 return False |
63 return True | 74 return True |
64 | 75 |
65 | 76 |
66 class MainMenuState(State): | 77 class MainMenuState(State): |
67 def init(self): | 78 def init(self): |
68 sound.stop_background_music() | 79 sound.stop_background_music() |
69 self.game.set_main_menu() | 80 self.game.set_main_menu() |
72 if events_equal(e, START_DAY): | 83 if events_equal(e, START_DAY): |
73 self.game.create_game_board() | 84 self.game.create_game_board() |
74 return DayState(self.game) | 85 return DayState(self.game) |
75 elif events_equal(e, GO_HELP_SCREEN): | 86 elif events_equal(e, GO_HELP_SCREEN): |
76 return HelpScreenState(self.game) | 87 return HelpScreenState(self.game) |
88 elif events_equal(e, GO_LEVEL_SCREEN): | |
89 return LevelScreenState(self.game) | |
77 elif e.type is KEYDOWN: | 90 elif e.type is KEYDOWN: |
78 if e.key == K_ESCAPE: | 91 if e.key == K_ESCAPE: |
79 return Quit(self.game) | 92 return Quit(self.game) |
80 elif e.key == K_s: | 93 elif e.key == K_s: |
81 self.game.create_game_board() | 94 self.game.create_game_board() |
113 pygame.display.flip() | 126 pygame.display.flip() |
114 | 127 |
115 def update(self, screen): | 128 def update(self, screen): |
116 update = self.game.main_app.update(screen) | 129 update = self.game.main_app.update(screen) |
117 pygame.display.update(update) | 130 pygame.display.update(update) |
131 | |
132 | |
133 class LevelScreenState(State): | |
134 def init(self): | |
135 sound.stop_background_music() | |
136 self.game.set_level_screen() | |
137 | |
138 def event(self, e): | |
139 if e.type is KEYDOWN and e.key == K_ESCAPE: | |
140 return MainMenuState(self.game) | |
141 elif events_equal(e, GO_MAIN_MENU): | |
142 return MainMenuState(self.game) | |
143 elif events_equal(e, DO_LOAD_LEVEL): | |
144 self.game.load_new_level() | |
145 return MainMenuState(self.game) | |
146 elif e.type is not QUIT: | |
147 self.game.main_app.event(e) | |
148 | |
149 def paint(self, screen): | |
150 screen.fill((0,0,0)) | |
151 self.game.main_app.paint(screen) | |
152 pygame.display.flip() | |
153 | |
154 def update(self, screen): | |
155 update = self.game.main_app.update(screen) | |
156 pygame.display.update(update) | |
157 | |
118 | 158 |
119 class DayState(State): | 159 class DayState(State): |
120 def init(self): | 160 def init(self): |
121 """Add some chickens to the farm""" | 161 """Add some chickens to the farm""" |
122 sound.stop_background_music() | 162 sound.stop_background_music() |
277 | 317 |
278 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") | 318 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") |
279 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") | 319 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") |
280 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") | 320 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") |
281 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") | 321 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") |
322 GO_LEVEL_SCREEN = pygame.event.Event(USEREVENT, name="GO_LEVEL_SCREEN") | |
323 DO_LOAD_LEVEL = pygame.event.Event(USEREVENT, name="DO_LEVEL_SCREEN") | |
282 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") | 324 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") |
283 MOVE_FOX_ID = USEREVENT + 1 | 325 MOVE_FOX_ID = USEREVENT + 1 |
284 ANIM_ID = USEREVENT + 6 | 326 ANIM_ID = USEREVENT + 6 |
285 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") | 327 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") |
286 QUIT = pygame.event.Event(QUIT) | 328 QUIT = pygame.event.Event(QUIT) |