diff --git a/overcooked_simulator/counters.py b/overcooked_simulator/counters.py index 5d6d689f0062c5dbf0f36edaf6723651a6db329b..538c666f695bb58a45baec2e33c940d1ddcad7f3 100644 --- a/overcooked_simulator/counters.py +++ b/overcooked_simulator/counters.py @@ -15,6 +15,7 @@ from overcooked_simulator.game_items import ( Plate, Tomato, Pot, + Pan, ) @@ -208,11 +209,16 @@ class Stove(Counter): occupied_by = Pot() super().__init__(pos, occupied_by) - def pick_up(self): - pass - def drop_off(self, item) -> Item | None: - pass + if isinstance(item, (Pot, Pan)): + self.occupied_by = item + else: + self.occupied_by.combine(item) + return None def can_drop_off(self, item) -> bool: + if isinstance(item, (Pot, Pan)): + return not self.occupied_by + if self.occupied_by: + return self.occupied_by.can_combine(item) return False diff --git a/overcooked_simulator/game_items.py b/overcooked_simulator/game_items.py index 09484ca7e542688e7f0c00f1f7871cd346b789bf..cb75a7b4f8030ba5f98cdffcc12cfda0b248c896 100644 --- a/overcooked_simulator/game_items.py +++ b/overcooked_simulator/game_items.py @@ -28,10 +28,10 @@ class Plate(Item): class ProgressibleItem(Item): """Class for items which need to be processed (cut, cooked, ...)""" - def __init__(self, steps_needed): - self.progressed_steps = 0 + def __init__(self, finished: bool = False, steps_needed: int = 1500): + self.progressed_steps = steps_needed if finished else 0 self.steps_needed = steps_needed - self.finished = False + self.finished = finished super().__init__() def progress(self): @@ -44,9 +44,9 @@ class ProgressibleItem(Item): def __repr__(self): if self.finished: - return "CutTomato" + return f"{self.__class__.__name__}()" else: - return f"{self.__class__.__name__}({int(self.progressed_steps / self.steps_needed * 100)}%)" + return f"{self.__class__.__name__}(progress={int(self.progressed_steps / self.steps_needed * 100)}%)" class CuttableItem(ProgressibleItem): @@ -66,28 +66,29 @@ class Tomato(CuttableItem): class Pot(ProgressibleItem): - def can_combine(self, other): - return False - - def __init__(self): + def __init__(self, holds: Item = None): + self.holds = [] if holds is None else holds super().__init__(steps_needed=1500) - def combine(self, other): - pass + def can_combine(self, other): + # TODO based on recipes + return ( + isinstance(other, Tomato) + # and other.finished + and len(self.holds) < 3 + and all([isinstance(h, Tomato) for h in self.holds]) + ) - def __repr__(self): - return f"{self.__class__.__name__}()" + def combine(self, other): + self.holds.append(other) class Pan(ProgressibleItem): - def can_combine(self, other): - return False - def __init__(self): super().__init__(steps_needed=1500) + def can_combine(self, other): + return False + def combine(self, other): pass - - def __repr__(self): - return f"{self.__class__.__name__}()"