Ant.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from intelligine.synergy.object.Bug import Bug
  2. from intelligine.cst import CARRYING, TRANSPORTER, ATTACKER, \
  3. COL_TRANSPORTER, COL_TRANSPORTER_NOT_CARRYING, \
  4. COL_FIGHTER, MOVE_MODE_EXPLO, MOVE_MODE_GOHOME, \
  5. PHEROMON_DIR_EXPLO
  6. from intelligine.synergy.object.Food import Food
  7. class Ant(Bug):
  8. def __init__(self, collection, context):
  9. super().__init__(collection, context)
  10. context.metas.states.add_list(self.get_id(), [TRANSPORTER, ATTACKER])
  11. context.metas.collections.add_list(self.get_id(), [COL_TRANSPORTER,
  12. COL_TRANSPORTER_NOT_CARRYING,
  13. COL_FIGHTER])
  14. self._carried = []
  15. self._last_pheromones_points = {}
  16. self._movement_mode = MOVE_MODE_EXPLO
  17. def put_carry(self, obj, position=None):
  18. if position is None:
  19. position = self._get_position()
  20. self._carried.remove(obj)
  21. obj.set_position(position)
  22. self._context.metas.states.remove(self.get_id(), CARRYING)
  23. def get_carried(self):
  24. # TODO: cas ou plusieurs ?
  25. return self._carried[0]
  26. def carry(self, obj):
  27. self._carried.append(obj)
  28. self._context.metas.states.add(self.get_id(), CARRYING)
  29. # TODO: pour le moment hardcode
  30. if isinstance(obj, Food):
  31. self.set_movement_mode(MOVE_MODE_GOHOME)
  32. self.set_last_pheromone_point(PHEROMON_DIR_EXPLO, obj.get_position())
  33. def is_carrying(self):
  34. if len(self._carried):
  35. return True
  36. return False
  37. # TODO: Est-ce ici que doit etre ce code ?
  38. def set_position(self, position):
  39. super().set_position(position)
  40. if self.is_carrying():
  41. for obj_carried in self._carried:
  42. obj_carried.set_position(position)
  43. def get_last_pheromone_point(self, pheromone_name):
  44. if pheromone_name in self._last_pheromones_points:
  45. return self._last_pheromones_points[pheromone_name]
  46. return self._start_position
  47. def set_last_pheromone_point(self, pheromone_name, position):
  48. self._last_pheromones_points[pheromone_name] = position
  49. def get_movement_mode(self):
  50. return self._movement_mode
  51. def set_movement_mode(self, movement_mode):
  52. self._movement_mode = movement_mode