PheromoneGland.py 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from intelligine.core.exceptions import BestPheromoneHere, PheromoneGlandDisabled
  2. from intelligine.simulation.pheromone.DirectionPheromone import DirectionPheromone
  3. class PheromoneGland():
  4. def __init__(self, host, context):
  5. self._pheromone_type = None
  6. self._host = host
  7. self._context = context
  8. self._enabled = False
  9. def set_pheromone_type(self, pheromone_type):
  10. self._pheromone_type = pheromone_type
  11. def get_pheromone_type(self):
  12. if self._pheromone_type is None:
  13. raise Exception("pheromone_type not specified")
  14. return self._pheromone_type
  15. def get_pheromone(self):
  16. raise NotImplementedError()
  17. def appose(self):
  18. if not self._enabled:
  19. raise PheromoneGlandDisabled()
  20. try:
  21. DirectionPheromone.appose(self._context,
  22. self._host.get_position(),
  23. self.get_pheromone())
  24. except BestPheromoneHere as best_pheromone_here:
  25. self._host.get_brain().set_distance_from_objective(best_pheromone_here.get_best_distance())
  26. def disable(self):
  27. self._enabled = False
  28. def enable(self):
  29. self._enabled = True
  30. def is_enabled(self):
  31. return self._enabled