class Demo(state_machine.State): def __init__(self): state_machine.State.__init__(self) self.state_machine = state_machine.StateMachine() self.should_flip = False self.timer_delay = None self.blink = True def startup(self, now, persistant): self.state_machine.setup_states({ 'GAME': Game(), 'CREDITS': Credits() }, 'CREDITS') self.state_machine.state.startup(now, persistant) self.should_flip = False self.blink = True self.timer_delay = Timer(1000) def cleanup(self): self.done = False return self.persist def get_event(self, event): if event.type == pygame.KEYDOWN: self.done = True self.next = 'GAME' self.state_machine.state.cleanup() def update(self, keys, now): if self.state_machine.state_name == 'GAME' and not self.state_machine.state.AI: if not self.should_flip: self.state_machine.state_dict['GAME'].AI = True self.should_flip = True self.state_machine.state_dict['GAME'].restart_game_state() else: self.should_flip = False self.state_machine.state.next = 'CREDITS' self.state_machine.flip_state() self.state_machine.update(keys, now) if self.timer_delay.check_tick(now): self.blink = not self.blink def draw(self, surface, interpolate): self.state_machine.draw(surface, interpolate) if self.blink: render_text_center(surface, '{} VERSION {}\nPRESS ANY KEYS TO START'.format(GameConfig.CAPTION_WINDOW.capitalize(), GameConfig.VERSION_TEXT.capitalize()), GameConfig.COLOR_CENTER_TEXT, GameConfig.WINDOW_H - GameConfig.FONTSIZE_CENTER_TEXT * 2, GameConfig.FONTSIZE_CENTER_TEXT)
class Credits(state_machine.State): def __init__(self): state_machine.State.__init__(self) self.land = None self.aircraft = None self.aircraft_team = None self.timer_delay = None self.draw_credits = False self.timer_display_message = None self.display_message = '' self.debug_group = components.debug.debug_group self.number_plateform_save = 0 self.gravity_save = 0 self.credit_index = 0 def startup(self, now, persistant): state_machine.State.startup(self, now, persistant) self.number_plateform_save = LandingConfig.numberOfPlateforms self.gravity_save = LanderConfig.GRAVITY LanderConfig.GRAVITY = 0 LandingConfig.numberOfPlateforms = 0 self.draw_credits = False self.timer_delay = Timer(CreditConfig.DELAY_BETWEEN_CREDITS) self.land = Landing() self.aircraft = Lander() self.aircraft.fuel = 1000 self.timer_display_message = Timer(CreditConfig.CREDIT_DURATION) self.aircraft_team = pygame.sprite.Group(self.aircraft) self.aircraft.orientation = 0 self.credit_index = 0 def cleanup(self): self.done = False LandingConfig.numberOfPlateforms = self.number_plateform_save LanderConfig.GRAVITY = self.gravity_save return self.persist def get_event(self, event): pass def update(self, keys, now): self.now = now self.debug_group.update() self.aircraft.boost() self.aircraft.vy = 0 self.aircraft.vx = CreditConfig.SPEED_AIRCRAFT self.aircraft.y = CreditConfig.AIRCRAFT_Y_POS self.land.landingEntities.update() self.aircraft_team.update() self.aircraft.fuel = 1000 if self.aircraft.rect.left > GameConfig.WINDOW_W: self.land = Landing() self.aircraft.x = -15 if not self.draw_credits: self.timer_display_message.timer = now if self.timer_delay.check_tick(now): self.draw_credits = not self.draw_credits else: self.timer_delay.timer = now if self.timer_display_message.check_tick(now): self.draw_credits = not self.draw_credits self.credit_index += 1 if self.credit_index >= len(CreditConfig.CREDITS): self.done = True self.next = 'GAME' else: self.display_message = CreditConfig.CREDITS[self.credit_index] def draw(self, surface, interpolate): surface.fill(GameConfig.BACKGROUND_COLOR) self.land.landingEntities.draw(surface) self.aircraft_team.draw(surface) self.debug_group.draw(surface) if self.draw_credits: render_text_center(surface, self.display_message, GameConfig.COLOR_CENTER_TEXT, CreditConfig.OFFSET_Y_CREDIT, GameConfig.FONTSIZE_CENTER_TEXT)