comparison gamelib/engine.py @ 233:d3d5352f5853

Twek speed loop. Document animation assumptions
author Neil Muller <drnlmuller@gmail.com>
date Sat, 05 Sep 2009 09:00:12 +0000
parents 96d440bebdaa
children 4a87bfa5cc63
comparison
equal deleted inserted replaced
232:0bd214cf9018 233:d3d5352f5853
150 self.game.gameboard.start_night() 150 self.game.gameboard.start_night()
151 151
152 sound.play_sound("nightfall.ogg") 152 sound.play_sound("nightfall.ogg")
153 # Add a timer to the event queue 153 # Add a timer to the event queue
154 self.cycle_count = 0 154 self.cycle_count = 0
155 self.cycle_time = 200 155 self.cycle_time = SLOW_ANIM_SPEED
156 pygame.time.set_timer(MOVE_FOX_ID, self.cycle_time) 156 pygame.time.set_timer(MOVE_FOX_ID, 4*self.cycle_time)
157 pygame.time.set_timer(ANIM_ID, 50) 157 pygame.time.set_timer(ANIM_ID, self.cycle_time)
158 self.game.gameboard.spawn_foxes() 158 self.game.gameboard.spawn_foxes()
159 sound.background_music("nighttime.ogg") 159 sound.background_music("nighttime.ogg")
160 160
161 self.game.gameboard.lay_eggs() 161 self.game.gameboard.lay_eggs()
162 162
164 if events_equal(e, START_DAY): 164 if events_equal(e, START_DAY):
165 if self.game.gameboard.is_game_over(): 165 if self.game.gameboard.is_game_over():
166 return GameOver(self.game) 166 return GameOver(self.game)
167 return DayState(self.game) 167 return DayState(self.game)
168 elif e.type is KEYDOWN and e.key == K_d: 168 elif e.type is KEYDOWN and e.key == K_d:
169 if self.cycle_time > 100: 169 if self.cycle_time > FAST_ANIM_SPEED:
170 self.cycle_time = 50 170 self.cycle_time = FAST_ANIM_SPEED
171 pygame.time.set_timer(ANIM_ID, 25)
172 else: 171 else:
173 self.cycle_time = 200 172 self.cycle_time = SLOW_ANIM_SPEED
174 pygame.time.set_timer(ANIM_ID, 50) 173 pygame.time.set_timer(ANIM_ID, self.cycle_time)
175 pygame.time.set_timer(MOVE_FOX_ID, self.cycle_time) 174 pygame.time.set_timer(MOVE_FOX_ID, 4*self.cycle_time)
176 elif e.type is KEYDOWN and e.key == K_ESCAPE: 175 elif e.type is KEYDOWN and e.key == K_ESCAPE:
177 self.game.gameboard.set_cursor() 176 self.game.gameboard.set_cursor()
178 return GameOver(self.game) 177 return GameOver(self.game)
179 elif e.type is ANIM_ID: 178 elif e.type is ANIM_ID:
180 self.game.gameboard.run_animations() 179 self.game.gameboard.run_animations()
181 elif e.type is MOVE_FOX_ID: 180 elif e.type is MOVE_FOX_ID:
181 # Timer aren't nessecairly ordered, so we make sure
182 # we don't get a ANIM event until at least cycle after this
183 pygame.time.set_timer(ANIM_ID, self.cycle_time)
182 self.cycle_count += 1 184 self.cycle_count += 1
183 if self.cycle_count > constants.NIGHT_LENGTH: 185 if self.cycle_count > constants.NIGHT_LENGTH:
184 return pygame.event.post(START_DAY) 186 return pygame.event.post(START_DAY)
185 if self.game.gameboard.move_foxes(): 187 if self.game.gameboard.move_foxes():
186 # All foxes are gone/safe, so dawn happens 188 # All foxes are gone/safe, so dawn happens
238 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") 240 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN")
239 MOVE_FOX_ID = USEREVENT + 1 241 MOVE_FOX_ID = USEREVENT + 1
240 ANIM_ID = USEREVENT + 6 242 ANIM_ID = USEREVENT + 6
241 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") 243 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES")
242 QUIT = pygame.event.Event(QUIT) 244 QUIT = pygame.event.Event(QUIT)
245
246 # Due to the way pgu's loop timing works, these will only get proceesed
247 # at intervals of 10ms, so there's no point in them not being multiples of 10
248 FAST_ANIM_SPEED=20
249 SLOW_ANIM_SPEED=50