diff --git a/overcooked_simulator/game_content/environment_config.yaml b/overcooked_simulator/game_content/environment_config.yaml index fdbe1db23264984fa1521d2641c1b49dc2915b41..96b6660b50523f0caa5481c18d9edefebd317da3 100644 --- a/overcooked_simulator/game_content/environment_config.yaml +++ b/overcooked_simulator/game_content/environment_config.yaml @@ -88,7 +88,8 @@ player_config: player_speed_units_per_seconds: 6 interaction_range: 1.6 restricted_view: False - view_angle: 95 + view_angle: 60 + view_range: 3 # 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 d9e5e8e22b0c3ad16df665e496c759178cd26262..64f05f4513139b1c405ccf23afa04bc82342b5eb 100644 --- a/overcooked_simulator/gui_2d_vis/drawing.py +++ b/overcooked_simulator/gui_2d_vis/drawing.py @@ -153,20 +153,23 @@ class Visualizer: direction = pygame.math.Vector2(state["view_restriction"]["direction"]) pos = pygame.math.Vector2(state["view_restriction"]["position"]) angle = state["view_restriction"]["angle"] / 2 + range = state["view_restriction"]["range"] pos = pos * grid_size + pygame.math.Vector2([grid_size / 2, grid_size / 2]) rect_scale = max(width, height) + # 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 - (direction * grid_size * 0.6), - left_beam - (direction * grid_size * 0.6), + pos - offset_front, + left_beam - offset_front, left_beam + (direction.rotate(90) * rect_scale), pos - (direction * rect_scale * 2) @@ -175,9 +178,28 @@ class Visualizer: - (direction * rect_scale * 2) + (direction.rotate(-90) * rect_scale), right_beam + (direction.rotate(-90) * rect_scale), - right_beam - (direction * grid_size * 0.6), + right_beam - offset_front, ), ) + if range: + pygame.draw.polygon( + screen, + colors["black"], + ( + 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), + pos + + (direction.rotate(90) * rect_scale) + + (direction * rect_scale), + ), + ) def draw_background( self, surface: pygame.Surface, width: int, height: int, grid_size: int diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py index 5302f55a72d1270649efbac5324a94db791c9f6a..c38ad3871c7793e39b9edc5307d011e7f0672b12 100644 --- a/overcooked_simulator/overcooked_environment.py +++ b/overcooked_simulator/overcooked_environment.py @@ -167,6 +167,9 @@ class Environment: self.player_view_angle = self.environment_config["player_config"][ "view_angle" ] + self.player_view_range = self.environment_config["player_config"][ + "view_range" + ] self.extra_setup_functions() @@ -663,8 +666,8 @@ class Environment: for idx, p in enumerate(self.players.values()): if not (new_positions[idx] == player_positions[idx]).all(): - p.turn(player_movement_vectors[idx]) p.move_abs(new_positions[idx]) + p.turn(player_movement_vectors[idx]) def add_player(self, player_name: str, pos: npt.NDArray = None): """Add a player to the environment. @@ -780,6 +783,7 @@ class Environment: "position": self.players[player_id].pos.tolist(), "angle": self.player_view_angle, "counter_mask": None, + "range": self.player_view_range, } if self.player_view_restricted else None, diff --git a/overcooked_simulator/player.py b/overcooked_simulator/player.py index c367561e98862425ecc1590087ef7deb982e608e..82c2c8cdcb570fe37a609e50715f63387a60eed3 100644 --- a/overcooked_simulator/player.py +++ b/overcooked_simulator/player.py @@ -37,6 +37,9 @@ class PlayerConfig: """Whether or not the player can see the entire map at once or just a view frustrum.""" view_angle: int | None = None """Angle of the players view if restricted.""" + view_range: float | None = None + """Range of the players view if restricted. In grid units.""" + class Player: """Class representing a player in the game environment. A player consists of a name, their position and what @@ -165,7 +168,7 @@ class Player: self.holding.combine(returned_by_counter) log.debug( - f"Self: {self.holding}, {counter.__class__.__name__}: {counter.occupied_by}" + f"Self: {self.holding.__class__.__name__}: {self.holding}, {counter.__class__.__name__}: {counter.occupied_by}" ) # if isinstance(self.holding, Plate): # log.debug(self.holding.clean) diff --git a/overcooked_simulator/state_representation.py b/overcooked_simulator/state_representation.py index 9d4e7427f092fb77769873dd570988e1e3c94f4d..2faa1a1932035342e57b27df9865d673efdcc8cb 100644 --- a/overcooked_simulator/state_representation.py +++ b/overcooked_simulator/state_representation.py @@ -71,6 +71,7 @@ class ViewRestriction(BaseModel): position: list[float] angle: int # degrees counter_mask: None | list[bool] + range: float | None class StateRepresentation(BaseModel):