diff --git a/overcooked_simulator/game_content/environment_config.yaml b/overcooked_simulator/game_content/environment_config.yaml index 96b6660b50523f0caa5481c18d9edefebd317da3..dd6bd04fe4337bf0b2108a431a620c2acb510985 100644 --- a/overcooked_simulator/game_content/environment_config.yaml +++ b/overcooked_simulator/game_content/environment_config.yaml @@ -87,8 +87,8 @@ player_config: radius: 0.4 player_speed_units_per_seconds: 6 interaction_range: 1.6 - restricted_view: False - view_angle: 60 + restricted_view: True + view_angle: 90 view_range: 3 # in grid units, can be "null" effect_manager: diff --git a/overcooked_simulator/gui_2d_vis/drawing.py b/overcooked_simulator/gui_2d_vis/drawing.py index 64f05f4513139b1c405ccf23afa04bc82342b5eb..faf89fab5a886fd0fd30064bbfd2ad083d3e3bdb 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.0 + 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