This commit is contained in:
Steffen Illium
2023-07-06 12:01:25 +02:00
parent dc134d71e0
commit 836495a884
72 changed files with 742 additions and 298 deletions

View File

@@ -2,27 +2,43 @@ from marl_factory_grid.environment.entity.entity import Entity
from marl_factory_grid.utils.render import RenderEntity
from marl_factory_grid.environment import constants as c
from marl_factory_grid.utils.results import TickResult
from marl_factory_grid.modules.machines import constants as m, rewards as r
from . import constants as m
class Machine(Entity):
@property
def var_can_collide(self):
return False
@property
def var_can_move(self):
return False
@property
def var_is_blocking_light(self):
return False
@property
def var_has_position(self):
return True
@property
def encoding(self):
return self._encodings[self.state]
return self._encodings[self.status]
def __init__(self, *args, work_interval: int = 10, pause_interval: int = 15, **kwargs):
super(Machine, self).__init__(*args, **kwargs)
self._intervals = dict({m.STATE_IDLE: pause_interval, m.STATE_WORK: work_interval})
self._encodings = dict({m.STATE_IDLE: pause_interval, m.STATE_WORK: work_interval})
self.state = m.STATE_IDLE
self.status = m.STATE_IDLE
self.health = 100
self._counter = 0
self.__delattr__('move')
def maintain(self):
if self.state == m.STATE_WORK:
if self.status == m.STATE_WORK:
return c.NOT_VALID
if self.health <= 98:
self.health = 100
@@ -31,10 +47,10 @@ class Machine(Entity):
return c.NOT_VALID
def tick(self):
if self.state == m.STATE_MAINTAIN and any([c.AGENT in x.name for x in self.tile.guests]):
return TickResult(self.name, c.VALID, r.NONE, self)
elif self.state == m.STATE_MAINTAIN and not any([c.AGENT in x.name for x in self.tile.guests]):
self.state = m.STATE_WORK
if self.status == m.STATE_MAINTAIN and any([c.AGENT in x.name for x in self.tile.guests]):
return TickResult(identifier=self.name, validity=c.VALID, reward=0, entity=self)
elif self.status == m.STATE_MAINTAIN and not any([c.AGENT in x.name for x in self.tile.guests]):
self.status = m.STATE_WORK
self.reset_counter()
return None
elif self._counter:
@@ -42,12 +58,12 @@ class Machine(Entity):
self.health -= 1
return None
else:
self.state = m.STATE_WORK if self.state == m.STATE_IDLE else m.STATE_IDLE
self.status = m.STATE_WORK if self.status == m.STATE_IDLE else m.STATE_IDLE
self.reset_counter()
return None
def reset_counter(self):
self._counter = self._intervals[self.state]
self._counter = self._intervals[self.status]
def render(self):
return RenderEntity(m.MACHINE, self.pos)