diff --git a/overcooked_simulator/order.py b/overcooked_simulator/order.py index 3d18af97497d35300ff93e9b08eee2c2d086a6d2..a5c55b3e4897fa7e1717102605ecb48a153405b8 100644 --- a/overcooked_simulator/order.py +++ b/overcooked_simulator/order.py @@ -53,7 +53,11 @@ class OrderGeneration: @abstractmethod def get_orders( - self, passed_time: timedelta, now: datetime, new_finished_orders: list[Order] + self, + passed_time: timedelta, + now: datetime, + new_finished_orders: list[Order], + expired_orders: list[Order], ) -> list[Order]: ... @@ -92,9 +96,14 @@ class RandomOrderGeneration(OrderGeneration): ) def get_orders( - self, passed_time: timedelta, now: datetime, new_finished_orders: list[Order] + self, + passed_time: timedelta, + now: datetime, + new_finished_orders: list[Order], + expired_orders: list[Order], ) -> list[Order]: self.number_cur_orders -= len(new_finished_orders) + self.number_cur_orders -= len(expired_orders) if self.kwargs.sample_on_serving: if new_finished_orders: self.create_random_next_time_delta(now) @@ -196,6 +205,7 @@ class OrderAndScoreManager: self.served_meals: list[Tuple[Item, datetime]] = [] self.last_finished = [] self.next_relevant_time = datetime.max + self.last_expired = [] def update_next_relevant_time(self): next_relevant_time = datetime.max @@ -255,10 +265,14 @@ class OrderAndScoreManager: def progress(self, passed_time: timedelta, now: datetime): new_orders = self.order_gen.get_orders( - passed_time=passed_time, now=now, new_finished_orders=self.last_finished + passed_time=passed_time, + now=now, + new_finished_orders=self.last_finished, + expired_orders=self.last_expired, ) self.open_orders.extend(new_orders) self.last_finished = [] + self.last_expired = [] if new_orders or self.next_relevant_time <= now: remove_orders = [] for index, order in enumerate(self.open_orders): @@ -273,9 +287,11 @@ class OrderAndScoreManager: for i in reversed(remove_penalties): # or del order.timed_penalties[index] order.timed_penalties.pop(i) - + expired_orders = [] for remove_order in reversed(remove_orders): + expired_orders.append(self.open_orders[remove_order]) del self.open_orders[remove_order] + self.last_expired = expired_orders self.update_next_relevant_time()