mirror of
https://github.com/illiumst/marl-factory-grid.git
synced 2025-05-22 14:56:43 +02:00
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from collections import deque
|
|
|
|
from marl_factory_grid.environment.entity.entity import Entity
|
|
from marl_factory_grid.environment import constants as c
|
|
from marl_factory_grid.utils.utility_classes import RenderEntity
|
|
from marl_factory_grid.modules.items import constants as i
|
|
|
|
|
|
class Item(Entity):
|
|
|
|
def render(self):
|
|
return RenderEntity(i.ITEM, self.pos) if self.pos != c.VALUE_NO_POS else None
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
@property
|
|
def encoding(self):
|
|
# Edit this if you want items to be drawn in the ops differently
|
|
return 1
|
|
|
|
|
|
class DropOffLocation(Entity):
|
|
|
|
def render(self):
|
|
return RenderEntity(i.DROP_OFF, self.pos)
|
|
|
|
@property
|
|
def encoding(self):
|
|
return i.SYMBOL_DROP_OFF
|
|
|
|
def __init__(self, *args, storage_size_until_full: int = 5, **kwargs):
|
|
super(DropOffLocation, self).__init__(*args, **kwargs)
|
|
self.storage = deque(maxlen=storage_size_until_full or None)
|
|
|
|
def place_item(self, item: Item):
|
|
if self.is_full:
|
|
raise RuntimeWarning("There is currently no way to clear the storage or make it unfull.")
|
|
return bc.NOT_VALID
|
|
else:
|
|
self.storage.append(item)
|
|
return c.VALID
|
|
|
|
@property
|
|
def is_full(self):
|
|
return False if not self.storage.maxlen else self.storage.maxlen == len(self.storage)
|