def loop(self): while self._continue_flag is True: self.canvas.fill(self.BACKGROUND_COLOR) for obstacle in self.obstacles: obstacle.draw(self.ray_canvas) if not self._drawing_mode_flag: self.source.draw(self.ray_canvas, self.canvas, self.obstacles, self.width, self.height, self.minuature_width, self.minuature_height) else: self.source.preview(self.ray_canvas, Point2D.from_tuple(self.mouse_pos) / 4) if self._drawing_obstacle_flag: Obstacle.preview(self.ray_canvas, self.starting_edge_of_obstacle, Point2D.from_tuple(self.mouse_pos) / 4) self.canvas.blit(self.ray_canvas, (0, 0)) self.ray_canvas.fill(self.BACKGROUND_COLOR) self.handle_events() self.clock.tick(self.fps) pygame.display.flip()
def handle_events(self): if self.walk_up: self.source.walk_front(self.clock, self.minuature_width, self.minuature_height) if self.walk_down: self.source.walk_backwards(self.clock, self.minuature_width, self.minuature_height) if self.walk_left: self.source.walk_paralel_left(self.clock, self.minuature_width, self.minuature_height) if self.walk_right: self.source.walk_paralel_right(self.clock, self.minuature_width, self.minuature_height) if self.rotate_left: self.source.rotate_left(self.clock, self.minuature_width, self.minuature_height) if self.rotate_right: self.source.rotate_rigth(self.clock, self.minuature_width, self.minuature_height) if self.rotate_up: self.source.rotate_up(self.clock, self.minuature_width, self.minuature_height) if self.rotate_down: self.source.rotate_down(self.clock, self.minuature_width, self.minuature_height) for event in pygame.event.get(): # Quit the program if the user close the windows if event.type == pygame.QUIT: pygame.quit() self._continue_flag = False # Or press ESCAPE elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() self._continue_flag = False elif event.key == pygame.K_F11: if (self.fullscreen is False): self.fullscreen = True pygame.display.quit() pygame.display.init() self.set_fullscreen() else: self.fullscreen = False self.canvas = pygame.display.set_mode( (self.width, self.height), pygame.RESIZABLE) elif event.key == pygame.K_q: self._drawing_mode_flag = not self._drawing_mode_flag elif event.key == pygame.K_r: self.restart() elif event.key == pygame.K_w: self.walk_up = True elif event.key == pygame.K_a: self.walk_left = True elif event.key == pygame.K_s: self.walk_down = True elif event.key == pygame.K_d: self.walk_right = True elif event.key == pygame.K_LEFT: self.rotate_left = True elif event.key == pygame.K_RIGHT: self.rotate_right = True elif event.key == pygame.K_UP: self.rotate_up = True elif event.key == pygame.K_DOWN: self.rotate_down = True elif event.type == pygame.KEYUP: if event.key == pygame.K_w: self.walk_up = False elif event.key == pygame.K_a: self.walk_left = False elif event.key == pygame.K_s: self.walk_down = False elif event.key == pygame.K_d: self.walk_right = False elif event.key == pygame.K_LEFT: self.rotate_left = False elif event.key == pygame.K_RIGHT: self.rotate_right = False elif event.key == pygame.K_UP: self.rotate_up = False elif event.key == pygame.K_DOWN: self.rotate_down = False elif event.type == pygame.VIDEORESIZE: self.width, self.height = event.size if not self.fullscreen: self.canvas = pygame.display.set_mode( (self.width, self.height), pygame.RESIZABLE) elif event.type == pygame.MOUSEBUTTONDOWN: self.mouse_pos = event.pos if self._drawing_mode_flag: self._drawing_obstacle_flag = True self.starting_edge_of_obstacle = Point2D.from_tuple( self.mouse_pos) / 4 elif event.type == pygame.MOUSEBUTTONUP: self.mouse_pos = event.pos if self._drawing_mode_flag: self._drawing_obstacle_flag = False self.obstacles.append( Obstacle(self.starting_edge_of_obstacle, Point2D.from_tuple(self.mouse_pos) / 4)) elif event.type == pygame.MOUSEMOTION: self.mouse_pos = event.pos