68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
from environments import helpers as h
|
|
from environments.factory.base.objects import BoundingMixin, EnvObject, Entity
|
|
from environments.factory.additional.btry.btry_util import Constants as c
|
|
|
|
|
|
class Battery(BoundingMixin, EnvObject):
|
|
|
|
@property
|
|
def is_discharged(self):
|
|
return self.charge_level == 0
|
|
|
|
def __init__(self, initial_charge_level: float, *args, **kwargs):
|
|
super(Battery, self).__init__(*args, **kwargs)
|
|
self.charge_level = initial_charge_level
|
|
|
|
def encoding(self):
|
|
return self.charge_level
|
|
|
|
def do_charge_action(self, amount):
|
|
if self.charge_level < 1:
|
|
# noinspection PyTypeChecker
|
|
self.charge_level = min(1, amount + self.charge_level)
|
|
return c.VALID
|
|
else:
|
|
return c.NOT_VALID
|
|
|
|
def decharge(self, amount) -> c:
|
|
if self.charge_level != 0:
|
|
# noinspection PyTypeChecker
|
|
self.charge_level = max(0, amount + self.charge_level)
|
|
self._collection.notify_change_to_value(self)
|
|
return c.VALID
|
|
else:
|
|
return c.NOT_VALID
|
|
|
|
def summarize_state(self, **_):
|
|
attr_dict = {key: str(val) for key, val in self.__dict__.items() if not key.startswith('_') and key != 'data'}
|
|
attr_dict.update(dict(name=self.name))
|
|
return attr_dict
|
|
|
|
|
|
class ChargePod(Entity):
|
|
|
|
@property
|
|
def encoding(self):
|
|
return c.CHARGE_POD
|
|
|
|
def __init__(self, *args, charge_rate: float = 0.4,
|
|
multi_charge: bool = False, **kwargs):
|
|
super(ChargePod, self).__init__(*args, **kwargs)
|
|
self.charge_rate = charge_rate
|
|
self.multi_charge = multi_charge
|
|
|
|
def charge_battery(self, battery: Battery):
|
|
if battery.charge_level == 1.0:
|
|
return c.NOT_VALID
|
|
if sum(guest for guest in self.tile.guests if 'agent' in guest.name.lower()) > 1:
|
|
return c.NOT_VALID
|
|
valid = battery.do_charge_action(self.charge_rate)
|
|
return valid
|
|
|
|
def summarize_state(self, n_steps=None) -> dict:
|
|
if n_steps == h.STEPS_START:
|
|
summary = super().summarize_state(n_steps=n_steps)
|
|
return summary
|
|
else:
|
|
{}
|