AntTakeBrainPart.py 1.5KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from intelligine.simulation.object.brain.part.transport.TakeBrainPart import TakeBrainPart
  2. from intelligine.synergy.object.ressource.Ressource import Resource
  3. from intelligine.cst import MODE_EXPLO, TYPE_RESOURCE_EXPLOITABLE, \
  4. MODE_GOHOME, MODE_NURSE, TYPE_NURSERY, MODE_HOME, MODE_SEARCH_AROUND
  5. class AntTakeBrainPart(TakeBrainPart):
  6. # TODO: methode __init_ pour la classe ? Pour surcharger ici.
  7. _mode_matches = {
  8. MODE_EXPLO: [TYPE_RESOURCE_EXPLOITABLE],
  9. MODE_NURSE: [TYPE_NURSERY],
  10. MODE_GOHOME: [],
  11. MODE_SEARCH_AROUND: []
  12. }
  13. def __init__(self, host_brain):
  14. super().__init__(host_brain)
  15. self._smell_target = None
  16. def get_smell_target(self):
  17. if not self._smell_target:
  18. raise Exception('No _smell_target')
  19. return self._smell_target
  20. @classmethod
  21. def can_take(cls, context, object_id, object_to_take_id):
  22. # Pour le moment si le type de l'objet fait partie des types admis pour le mode courant du porteur, c'est bon.
  23. return cls._match_with_mode(context, object_id, object_to_take_id)
  24. def done(self, take_object):
  25. # TODO: Ranger ca ? Truc plus dynamique/configurable ?
  26. # TODO: qqch plus generique ... (attention aux eggs)
  27. if isinstance(take_object, Resource):
  28. self._smell_target = self._host_brain.get_smell_for_object_taken(take_object)
  29. self._host.get_brain().switch_to_mode(MODE_GOHOME)
  30. self._host.get_movement_molecule_gland().appose()