diff --git a/overcooked_simulator/counters.py b/overcooked_simulator/counters.py index 7f06b7c7f9022dd919caeae91153f5e00b977d4d..32476e8be0374972862e32cc80983e0a7e9a4b7d 100644 --- a/overcooked_simulator/counters.py +++ b/overcooked_simulator/counters.py @@ -215,6 +215,7 @@ class Trash(Counter): class Stove(Counter): + def pick_up(self): ... diff --git a/overcooked_simulator/layouts/basic.layout b/overcooked_simulator/layouts/basic.layout index d4d883fc230af82331dec09ce59a95c7d205da68..f077e3ee582829f40eac41f2e2ae1173ea5c2d5e 100644 --- a/overcooked_simulator/layouts/basic.layout +++ b/overcooked_simulator/layouts/basic.layout @@ -1,5 +1,5 @@ EEEEEEEEEEE -ECCCCTCCCCE +ECCUCTCCCCE ECEEEEEEECE ECEEEEEEECE EWEEEEEEEEE diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py index 93a9bd93b8f6b054dc662e8e7736ea43d88ad534..48f675958899a5960f0919f85083fbbf4098a59c 100644 --- a/overcooked_simulator/overcooked_environment.py +++ b/overcooked_simulator/overcooked_environment.py @@ -6,7 +6,6 @@ if TYPE_CHECKING: from overcooked_simulator.player import Player from pathlib import Path import numpy as np -import numpy.typing as npt from scipy.spatial import distance_matrix from overcooked_simulator.counters import ( @@ -16,6 +15,7 @@ from overcooked_simulator.counters import ( TomatoDispenser, ServingWindow, PlateReturn, + Stove, ) @@ -69,6 +69,7 @@ class Environment: "T": TomatoDispenser, "P": PlateReturn, "E": None, + "U": Stove, # Stove with pot: U because it looks like a pot } self.counters: list[Counter] = self.create_counters(self.layout_path) @@ -192,7 +193,7 @@ class Environment: old_pos_other = collided_player.pos.copy() collided_player.move(pushing_vector * (collided_player.move_dist / 2)) if self.detect_collision_counters( - collided_player + collided_player ) or self.detect_collision_world_bounds(player): collided_player.move_abs(old_pos_other) player.move_abs(old_pos) @@ -226,9 +227,9 @@ class Environment: Returns: True if the player is intersecting with any object in the environment. """ return ( - len(self.get_collided_players(player)) != 0 - or self.detect_collision_counters(player) - or self.detect_collision_world_bounds(player) + len(self.get_collided_players(player)) != 0 + or self.detect_collision_counters(player) + or self.detect_collision_world_bounds(player) ) def get_collided_players(self, player: Player) -> list[Player]: diff --git a/overcooked_simulator/pygame_gui/pygame_gui.py b/overcooked_simulator/pygame_gui/pygame_gui.py index a708b0889ff0210166b1601c310a0d54155d9287..b9b68c49450fa30a43d6bee5fa38ef7593b42aa5 100644 --- a/overcooked_simulator/pygame_gui/pygame_gui.py +++ b/overcooked_simulator/pygame_gui/pygame_gui.py @@ -11,8 +11,9 @@ from overcooked_simulator.counters import ( TomatoDispenser, PlateReturn, ServingWindow, +^^ Stove, ) -from overcooked_simulator.game_items import ProgressibleItem, Plate, HoldableItem +from overcooked_simulator.game_items import ProgressibleItem, Plate, HoldableItem, Pot from overcooked_simulator.game_items import Tomato from overcooked_simulator.overcooked_environment import Action from overcooked_simulator.simulation_runner import Simulator @@ -31,6 +32,9 @@ BACKGROUND_LINES_COLOR = (200, 200, 200) KNIFE_COLOR = (120, 120, 120) PLATE_RETURN_COLOR = (170, 170, 240) BOARD_COLOR = (239, 193, 151) +POT_COLOR = (220, 220, 220) +# STOVE_COLOR = (60, 60, 60) +# STOVE_HEATING_PLATE_COLOR = (252, 123, 73) USE_COOK_SPRITE = False @@ -218,6 +222,10 @@ class PyGameGUI: if item.holds is not None: self.draw_item(pos, item.holds) + if isinstance(item, Pot): + pot_size = 20 + pygame.draw.circle(self.screen, GREY, pos, pot_size) + if isinstance(item, ProgressibleItem) and not item.finished: self.draw_progress_bar(pos, item.progressed_steps, item.steps_needed) @@ -289,6 +297,7 @@ class PyGameGUI: ) pygame.draw.rect(self.screen, RED, board_rect) self.draw_item(counter.pos, Tomato()) + if isinstance(counter, ServingWindow): board_size = 33 board_rect = pygame.Rect( @@ -299,6 +308,18 @@ class PyGameGUI: ) pygame.draw.rect(self.screen, YELLOW, board_rect) + if isinstance(counter, Stove): + stove_width = 35 + stove_height = 25 + stove_rect = pygame.Rect( + counter.pos[0] - (stove_width / 2), + counter.pos[1] - (stove_height / 2), + stove_width, + stove_height, + ) + pygame.draw.rect(self.screen, BLACK, stove_rect) + pygame.draw.circle(self.screen, RED, center=counter.pos, radius=10) + if counter.occupied_by is not None: if isinstance(counter.occupied_by, list): for i, o in enumerate(counter.occupied_by):