Skip to content
Snippets Groups Projects
Commit 67857b50 authored by Florian Schröder's avatar Florian Schröder
Browse files

create pan and change repr

parent 7871acde
No related branches found
No related tags found
1 merge request!10Resolve "Pot and stove and cooking tomato soup"
Pipeline #41493 passed
......@@ -10,7 +10,7 @@ import numpy.typing as npt
from overcooked_simulator.game_items import (
CuttableItem,
HoldableItem,
Item,
ProgressibleItem,
Plate,
Tomato,
......@@ -20,9 +20,9 @@ from overcooked_simulator.game_items import (
class Counter:
"""Simple class for a counter at a specified position (center of counter). Can hold things on top."""
def __init__(self, pos: npt.NDArray[float]):
def __init__(self, pos: npt.NDArray[float], occupied_by: Optional[Item] = None):
self.pos: npt.NDArray[float] = pos
self.occupied_by: Optional[HoldableItem] = None
self.occupied_by: Optional[Item] = occupied_by
def pick_up(self):
"""Gets called upon a player performing the pickup action. If the counter can give something to
......@@ -35,7 +35,7 @@ class Counter:
self.occupied_by = None
return give_player
def can_drop_off(self, item: HoldableItem) -> bool:
def can_drop_off(self, item: Item) -> bool:
"""Checks whether an item by the player can be dropped of. More relevant for example with
ingredient dispensers, which should always be occupied and cannot take an item.
......@@ -47,7 +47,7 @@ class Counter:
"""
return self.occupied_by is None or self.occupied_by.can_combine(item)
def drop_off(self, item: HoldableItem) -> HoldableItem | None:
def drop_off(self, item: Item) -> Item | None:
"""Takes the thing dropped of by the player.
Args:
......@@ -71,7 +71,9 @@ class Counter:
pass
def __repr__(self):
return f"Counter(pos:{str(self.pos)},holds:{self.occupied_by})"
return (
f"{self.__class__.__name__}(pos={self.pos},occupied_by={self.occupied_by})"
)
class CuttingBoard(Counter):
......@@ -101,16 +103,13 @@ class CuttingBoard(Counter):
"""Handles player interaction, stopping to hold key down."""
self.pause_progress()
def __repr__(self):
return f"CuttingBoard({self.occupied_by})"
class ServingWindow(Counter):
def __init__(self, pos, game_score: GameScore):
self.game_score = game_score
super().__init__(pos)
def drop_off(self, item) -> HoldableItem | None:
def drop_off(self, item) -> Item | None:
reward = 5
# TODO define rewards
self.game_score.increment_score(reward)
......@@ -120,15 +119,12 @@ class ServingWindow(Counter):
if isinstance(item, Plate) and isinstance(item.holds, ProgressibleItem):
return item.holds.finished
def can_drop_off(self, item: HoldableItem) -> bool:
def can_drop_off(self, item: Item) -> bool:
return self.can_score(item)
def pick_up(self):
return None
def __repr__(self):
return "ServingWindow"
class PlateReturn(Counter):
def __init__(self, pos):
......@@ -146,7 +142,7 @@ class PlateReturn(Counter):
self.occupied_by.append(Plate())
return give_player
def drop_off(self, item: HoldableItem) -> HoldableItem | None:
def drop_off(self, item: Item) -> Item | None:
"""Takes the ingredient dropped of by the player.
Args:
......@@ -162,7 +158,7 @@ class PlateReturn(Counter):
return None
return item
def can_drop_off(self, item: HoldableItem) -> bool:
def can_drop_off(self, item: Item) -> bool:
"""Checks whether an ingredient by the player can be dropped of.
Args:
......@@ -176,9 +172,6 @@ class PlateReturn(Counter):
isinstance(self.occupied_by[-1], Plate) and isinstance(item, Plate)
) or self.occupied_by[-1].can_combine(item)
def __repr__(self):
return "PlateReturn"
class TomatoDispenser(Counter):
def __init__(self, pos):
......@@ -187,42 +180,33 @@ class TomatoDispenser(Counter):
def pick_up(self):
return Tomato()
def drop_off(self, item: HoldableItem) -> HoldableItem | None:
def drop_off(self, item: Item) -> Item | None:
return None
def can_drop_off(self, item: HoldableItem) -> bool:
def can_drop_off(self, item: Item) -> bool:
return False
def __repr__(self):
return f"{self.occupied_by}Dispenser"
class Trash(Counter):
def pick_up(self):
pass
def drop_off(self, item: HoldableItem) -> HoldableItem | None:
def drop_off(self, item: Item) -> Item | None:
if isinstance(item, Plate):
item.holds = None
return item
return None
def can_drop_off(self, item: HoldableItem) -> bool:
def can_drop_off(self, item: Item) -> bool:
return True
def __repr__(self):
return "Trash"
class Stove(Counter):
def pick_up(self):
...
pass
def drop_off(self, item) -> HoldableItem | None:
...
def drop_off(self, item) -> Item | None:
pass
def can_drop_off(self, item) -> bool:
return False
def __repr__(self):
return "Stove"
class HoldableItem:
class Item:
"""Base class for game items which can be held by a player."""
def can_combine(self, other):
......@@ -8,14 +8,14 @@ class HoldableItem:
pass
class Plate(HoldableItem):
def __init__(self, holds: HoldableItem = None):
class Plate(Item):
def __init__(self, holds: Item = None):
self.clean = True
self.holds = holds
super().__init__()
def can_combine(self, other: HoldableItem):
def can_combine(self, other: Item):
return self.holds is None and not isinstance(other, Plate)
def combine(self, other):
......@@ -25,7 +25,7 @@ class Plate(HoldableItem):
return f"Plate({self.holds})"
class ProgressibleItem(HoldableItem):
class ProgressibleItem(Item):
"""Class for items which need to be processed (cut, cooked, ...)"""
def __init__(self, steps_needed):
......@@ -73,7 +73,21 @@ class Pot(ProgressibleItem):
super().__init__(steps_needed=1500)
def combine(self, other):
...
pass
def __repr__(self):
return f"{self.__class__.__name__}()"
class Pan(ProgressibleItem):
def can_combine(self, other):
return False
def __init__(self):
super().__init__(steps_needed=1500)
def combine(self, other):
pass
def __repr__(self):
return f"{self.__class__.__name__}()"
......@@ -4,7 +4,7 @@ import numpy as np
import numpy.typing as npt
from overcooked_simulator.counters import Counter
from overcooked_simulator.game_items import HoldableItem
from overcooked_simulator.game_items import Item
class Player:
......@@ -17,7 +17,7 @@ class Player:
def __init__(self, name: str, pos: npt.NDArray[float]):
self.name: str = name
self.pos: npt.NDArray[float] = np.array(pos, dtype=float)
self.holding: Optional[HoldableItem] = None
self.holding: Optional[Item] = None
self.radius: int = 18
self.move_dist: int = 5
......
......@@ -12,7 +12,7 @@ from overcooked_simulator.counters import (
PlateReturn,
ServingWindow,
)
from overcooked_simulator.game_items import ProgressibleItem, Plate, HoldableItem
from overcooked_simulator.game_items import ProgressibleItem, Plate, Item
from overcooked_simulator.game_items import Tomato
from overcooked_simulator.overcooked_environment import Action
from overcooked_simulator.simulation_runner import Simulator
......@@ -194,7 +194,7 @@ class PyGameGUI:
holding_item_pos = player.pos + (20 * player.facing_direction)
self.draw_item(holding_item_pos, player.holding)
def draw_item(self, pos, item: HoldableItem):
def draw_item(self, pos, item: Item):
"""Visualisation of an item at the specified position. On a counter or in the hands of the player."""
if isinstance(item, Tomato):
if item.finished:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment