From 528b180266fcc100c88424bb63b3a2b9dfc4c4ba Mon Sep 17 00:00:00 2001 From: fheinrich <fheinrich@techfak.uni-bielefeld.de> Date: Thu, 18 Jan 2024 14:26:46 +0100 Subject: [PATCH] Progress bars for orders, small fix --- .../game_content/environment_config.yaml | 14 +++++++------- .../gui_2d_vis/overcooked_gui.py | 19 +++++++++++++++---- overcooked_simulator/order.py | 4 ++-- .../overcooked_environment.py | 13 +++++++++---- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/overcooked_simulator/game_content/environment_config.yaml b/overcooked_simulator/game_content/environment_config.yaml index 957c8890..39f71ced 100644 --- a/overcooked_simulator/game_content/environment_config.yaml +++ b/overcooked_simulator/game_content/environment_config.yaml @@ -11,17 +11,17 @@ orders: duration_sample: func: uniform kwargs: - a: 30 - b: 50 - max_orders: 5 + a: 10 + b: 13 + max_orders: 6 num_start_meals: 3 - sample_on_dur: false + sample_on_dur: true sample_on_dur_func: func: uniform kwargs: - a: 20 - b: 30 - sample_on_serving: true + a: 10 + b: 13 + sample_on_serving: false score_calc_gen_kwargs: other: 0 scores: diff --git a/overcooked_simulator/gui_2d_vis/overcooked_gui.py b/overcooked_simulator/gui_2d_vis/overcooked_gui.py index dd4f46d1..d15a6c42 100644 --- a/overcooked_simulator/gui_2d_vis/overcooked_gui.py +++ b/overcooked_simulator/gui_2d_vis/overcooked_gui.py @@ -22,6 +22,7 @@ from overcooked_simulator.game_items import ( ) from overcooked_simulator.gui_2d_vis.game_colors import BLUE from overcooked_simulator.gui_2d_vis.game_colors import colors, Color +from overcooked_simulator.order import Order from overcooked_simulator.overcooked_environment import Action from overcooked_simulator.simulation_runner import Simulator @@ -498,7 +499,7 @@ class PyGameGUI: # triangle_offsets = create_polygon(len(item.parts), length=10) # self.draw_item(pos + triangle_offsets[idx], o, scale=0.6) - def draw_progress_bar(self, pos, percent): + def draw_progress_bar(self, pos, percent, screen=None): """Visualize progress of progressing item as a green bar under the item.""" bar_height = self.grid_size * 0.2 progress_width = percent * self.grid_size @@ -508,7 +509,10 @@ class PyGameGUI: progress_width, bar_height, ) - pygame.draw.rect(self.game_screen, colors["green1"], progress_bar) + if screen is None: + pygame.draw.rect(self.game_screen, colors["green1"], progress_bar) + else: + pygame.draw.rect(screen, colors["green1"], progress_bar) def draw_counter(self, counter): """Visualization of a counter at its position. If it is occupied by an item, it is also shown. @@ -573,7 +577,8 @@ class PyGameGUI: order_rects_start = (orders_height // 2) - (self.grid_size // 2) - for idx, order in enumerate([o.meal for o in state["orders"]]): + for idx, order in enumerate(state["orders"]): + order: Order order_upper_left = [ order_rects_start + idx * self.grid_size * 1.5, order_rects_start, @@ -599,10 +604,16 @@ class PyGameGUI: ) self.draw_item( center, - order, + order.meal, plate=True, screen=order_screen, ) + order_done_seconds = ( + (order.start_time + order.max_duration) - state["env_time"] + ).total_seconds() + + percentage = order_done_seconds / order.max_duration.total_seconds() + self.draw_progress_bar(center, percentage, screen=order_screen) orders_rect = order_screen.get_rect() orders_rect.center = [ diff --git a/overcooked_simulator/order.py b/overcooked_simulator/order.py index c41e320a..3d18af97 100644 --- a/overcooked_simulator/order.py +++ b/overcooked_simulator/order.py @@ -270,11 +270,11 @@ class OrderAndScoreManager: self.score -= penalty remove_penalties.append(i) - for i in remove_penalties: + for i in reversed(remove_penalties): # or del order.timed_penalties[index] order.timed_penalties.pop(i) - for remove_order in remove_orders: + for remove_order in reversed(remove_orders): del self.open_orders[remove_order] self.update_next_relevant_time() diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py index dfc9e9fd..7f612810 100644 --- a/overcooked_simulator/overcooked_environment.py +++ b/overcooked_simulator/overcooked_environment.py @@ -320,18 +320,19 @@ class Environment: Args: action: The action to be performed """ - assert action.player in self.players.keys(), "Unknown player." player = self.players[action.player] if action.act_type == "movement": - self.perform_movement(player, action.action) + with self.lock: + self.perform_movement(player, action.action) else: counter = self.get_facing_counter(player) if player.can_reach(counter): if action.act_type == "pickup": - player.pick_action(counter) + with self.lock: + player.pick_action(counter) elif action.act_type == "interact": if action.action == "keydown": @@ -339,7 +340,10 @@ class Environment: player.last_interacted_counter = counter if action.action == "keyup": if player.last_interacted_counter: - player.perform_interact_hold_stop(player.last_interacted_counter) + with self.lock: + player.perform_interact_hold_stop( + player.last_interacted_counter + ) def get_closest_counter(self, point: np.ndarray): """Determines the closest counter for a given 2d-coordinate point in the env. @@ -571,6 +575,7 @@ class Environment: "score": self.order_and_score.score, "orders": self.order_and_score.open_orders, "ended": self.game_ended, + "env_time": self.env_time, "remaining_time": max(self.env_time_end - self.env_time, timedelta(0)), } -- GitLab