From 8ede781a32db15903630a412a2a4a7dec2a115c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20Schr=C3=B6der?=
 <fschroeder@techfak.uni-bielefeld.de>
Date: Fri, 26 Jan 2024 18:19:00 +0100
Subject: [PATCH] Add CookingCounter progress and raise exception for undefined
 counter types

The CookingCounter is now included in the list of counters for which we calculate progress. Additionally, if a counter type is not defined in the configuration, a ValueError will be raised. Unnecessary imports were also removed from 'overcooked_gui.py', and a 'to_dict' method was added in 'counters.py'. Fixing errors from merge.
---
 overcooked_simulator/counters.py                  | 5 +++++
 overcooked_simulator/gui_2d_vis/drawing.py        | 8 +++++++-
 overcooked_simulator/gui_2d_vis/overcooked_gui.py | 9 +--------
 overcooked_simulator/overcooked_environment.py    | 4 +++-
 4 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/overcooked_simulator/counters.py b/overcooked_simulator/counters.py
index 49716e66..f63d77aa 100644
--- a/overcooked_simulator/counters.py
+++ b/overcooked_simulator/counters.py
@@ -543,6 +543,11 @@ class CookingCounter(Counter):
     def __repr__(self):
         return f"{self.name}(pos={self.pos},occupied_by={self.occupied_by})"
 
+    def to_dict(self) -> dict:
+        d = super().to_dict()
+        d.update((("type", self.name),))
+        return d
+
 
 class Sink(Counter):
     """The counter in which the dirty plates can be washed to clean plates.
diff --git a/overcooked_simulator/gui_2d_vis/drawing.py b/overcooked_simulator/gui_2d_vis/drawing.py
index 11ee0c93..415e0ce3 100644
--- a/overcooked_simulator/gui_2d_vis/drawing.py
+++ b/overcooked_simulator/gui_2d_vis/drawing.py
@@ -373,10 +373,16 @@ class Visualizer:
         if counter_type in self.config:
             self.draw_thing(screen, pos, grid_size, self.config[counter_type]["parts"])
         else:
+            if counter_type in self.config:
+                parts = self.config[counter_type]["parts"]
+            elif counter_type.endswith("Dispenser"):
+                parts = self.config["Dispenser"]["parts"]
+            else:
+                raise ValueError(f"Can not draw counter type {counter_type}")
             self.draw_thing(
                 screen=screen,
                 pos=pos,
-                parts=self.config[counter_type]["parts"],
+                parts=parts,
                 grid_size=grid_size,
             )
 
diff --git a/overcooked_simulator/gui_2d_vis/overcooked_gui.py b/overcooked_simulator/gui_2d_vis/overcooked_gui.py
index e1f5a559..1370d847 100644
--- a/overcooked_simulator/gui_2d_vis/overcooked_gui.py
+++ b/overcooked_simulator/gui_2d_vis/overcooked_gui.py
@@ -15,14 +15,7 @@ from websockets.sync.client import connect
 from overcooked_simulator import ROOT_DIR
 from overcooked_simulator.game_server import CreateEnvironmentConfig
 from overcooked_simulator.gui_2d_vis.drawing import Visualizer
-from overcooked_simulator.gui_2d_vis.game_colors import BLUE, colors, Color
-from overcooked_simulator.counters import Counter, CookingCounter
-from overcooked_simulator.game_items import (
-    Item,
-    CookingEquipment,
-    Plate,
-)
-from overcooked_simulator.order import Order
+from overcooked_simulator.gui_2d_vis.game_colors import colors
 from overcooked_simulator.overcooked_environment import (
     Action,
     ActionType,
diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py
index 0f4214af..ce79e280 100644
--- a/overcooked_simulator/overcooked_environment.py
+++ b/overcooked_simulator/overcooked_environment.py
@@ -714,7 +714,9 @@ class Environment:
                     self.perform_movement(player, passed_time)
 
             for counter in self.counters:
-                if isinstance(counter, (CuttingBoard, Stove, Sink, PlateDispenser)):
+                if isinstance(
+                    counter, (CuttingBoard, CookingCounter, Sink, PlateDispenser)
+                ):
                     counter.progress(passed_time=passed_time, now=self.env_time)
             self.order_and_score.progress(passed_time=passed_time, now=self.env_time)
 
-- 
GitLab