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