diff --git a/overcooked_simulator/game_content/environment_config.yaml b/overcooked_simulator/game_content/environment_config.yaml index 96b6660b50523f0caa5481c18d9edefebd317da3..3374356bd1043a29835a8ecf2d57e844b6700b36 100644 --- a/overcooked_simulator/game_content/environment_config.yaml +++ b/overcooked_simulator/game_content/environment_config.yaml @@ -88,8 +88,8 @@ player_config: player_speed_units_per_seconds: 6 interaction_range: 1.6 restricted_view: False - view_angle: 60 - view_range: 3 # in grid units, can be "null" + view_angle: 70 + view_range: 5.5 # in grid units, can be "null" effect_manager: FireManager: diff --git a/overcooked_simulator/gui_2d_vis/drawing.py b/overcooked_simulator/gui_2d_vis/drawing.py index 64f05f4513139b1c405ccf23afa04bc82342b5eb..c9763b3c3c331480488bc44a772d24ea41623dad 100644 --- a/overcooked_simulator/gui_2d_vis/drawing.py +++ b/overcooked_simulator/gui_2d_vis/drawing.py @@ -45,11 +45,12 @@ def grayscale(img): return surface -def create_polygon(n, length): +def create_polygon(n, start_vec): if n == 1: return np.array([0, 0]) - vector = np.array([length, 0]) + vector = start_vec.copy() + angle = (2 * np.pi) / n rot_matrix = np.array( @@ -155,51 +156,64 @@ class Visualizer: angle = state["view_restriction"]["angle"] / 2 range = state["view_restriction"]["range"] + angle = min(angle, 180) + pos = pos * grid_size + pygame.math.Vector2([grid_size / 2, grid_size / 2]) - rect_scale = max(width, height) + rect_scale = max(width, height) * 2 # rect_scale = 2 * grid_size left_beam = pos + (direction.rotate(angle) * rect_scale * 2) right_beam = pos + (direction.rotate(-angle) * rect_scale * 2) - offset_front = direction * grid_size * 0.2 - pygame.draw.polygon( - screen, - colors["black"], - ( - pos - offset_front, - left_beam - offset_front, - left_beam + (direction.rotate(90) * rect_scale), - pos - - (direction * rect_scale * 2) - + (direction.rotate(90) * rect_scale), - pos - - (direction * rect_scale * 2) - + (direction.rotate(-90) * rect_scale), - right_beam + (direction.rotate(-90) * rect_scale), - right_beam - offset_front, - ), - ) - if range: + offset_front = direction * grid_size * 0.7 + if angle != 180: pygame.draw.polygon( screen, colors["black"], ( + pos - offset_front, + left_beam - offset_front, + left_beam + (direction.rotate(90) * rect_scale), pos - + (direction.rotate(90) * rect_scale) - + (direction * range * grid_size), - pos - + (direction.rotate(-90) * rect_scale) - + (direction * range * grid_size), - pos - + (direction.rotate(-90) * rect_scale) - + (direction * rect_scale), + - (direction * rect_scale * 2) + + (direction.rotate(90) * rect_scale), pos - + (direction.rotate(90) * rect_scale) - + (direction * rect_scale), + - (direction * rect_scale * 2) + + (direction.rotate(-90) * rect_scale), + right_beam + (direction.rotate(-90) * rect_scale), + right_beam - offset_front, ), ) + if range: + n_circle_points = 40 + + start_vec = np.array(-direction * range) + points = ( + np.array(create_polygon(n_circle_points, start_vec)) * grid_size + ) + pos + + circle_closed = np.concatenate([points, points[0:1]], axis=0) + + corners = [ + pos - (direction * rect_scale), + *circle_closed, + pos - (direction * rect_scale), + pos + - (direction * rect_scale) + + (direction.rotate(90) * rect_scale), + pos + + (direction * rect_scale) + + (direction.rotate(90) * rect_scale), + pos + + (direction * rect_scale) + + (direction.rotate(-90) * rect_scale), + pos + - (direction * rect_scale) + + (direction.rotate(-90) * rect_scale), + ] + + pygame.draw.polygon(screen, colors["black"], [*corners]) def draw_background( self, surface: pygame.Surface, width: int, height: int, grid_size: int diff --git a/overcooked_simulator/gui_2d_vis/overcooked_gui.py b/overcooked_simulator/gui_2d_vis/overcooked_gui.py index 8808d1dbb0be8194625b0f1872298fc0b3a5a8de..73b14016f2493953d9ac9f2da842099bcb63e526 100644 --- a/overcooked_simulator/gui_2d_vis/overcooked_gui.py +++ b/overcooked_simulator/gui_2d_vis/overcooked_gui.py @@ -237,7 +237,7 @@ class PyGameGUI: current_player_name, ActionType.MOVEMENT, move_vec, - duration=1 / self.FPS, + duration=self.time_delta, ) self.send_action(action) @@ -980,7 +980,7 @@ class PyGameGUI: self.running = True while self.running: try: - time_delta = clock.tick(self.FPS) / 1000.0 + self.time_delta = clock.tick(self.FPS) / 1000.0 for event in pygame.event.get(): if event.type == pygame.QUIT: @@ -1083,7 +1083,7 @@ class PyGameGUI: case MenuStates.End: self.update_conclusion_label(state) - self.manager.update(time_delta) + self.manager.update(self.time_delta) pygame.display.flip() except (KeyboardInterrupt, SystemExit):