AntTakeBrainPart.py 1.4KB

123456789101112131415161718192021222324252627282930313233343536
  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
  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. }
  12. def __init__(self, host_brain):
  13. super().__init__(host_brain)
  14. self._smell_target = None
  15. def get_smell_target(self):
  16. if not self._smell_target:
  17. raise Exception('No _smell_target')
  18. return self._smell_target
  19. @classmethod
  20. def can_take(cls, context, object_id, object_to_take_id):
  21. # Pour le moment si le type de l'objet fait partie des types admis pour le mode courant du porteur, c'est bon.
  22. return cls._match_with_mode(context, object_id, object_to_take_id)
  23. def done(self, take_object):
  24. # TODO: Ranger ca ? Truc plus dynamique/configurable ?
  25. # TODO: qqch plus generique ... (attention aux eggs)
  26. if isinstance(take_object, Resource):
  27. self._smell_target = self._host_brain.get_smell_for_object_taken(take_object)
  28. self._host.get_brain().switch_to_mode(MODE_GOHOME)
  29. self._host.get_movement_molecule_gland().appose()