MoveBrainPart.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from intelligine.simulation.object.brain.part.BrainPart import BrainPart
  2. from intelligine.synergy.event.move.direction import directions_same_level, directions_slighty
  3. from random import randint, choice, randrange
  4. from intelligine.cst import BLOCKED_SINCE, PREVIOUS_DIRECTION
  5. class MoveBrainPart(BrainPart):
  6. @classmethod
  7. def get_direction(cls, context, object_id):
  8. return cls._get_random_direction(context, object_id)
  9. @classmethod
  10. def _get_random_direction(cls, context, object_id):
  11. try:
  12. blocked_since = context.metas.value.get(BLOCKED_SINCE, object_id)
  13. except KeyError:
  14. blocked_since = 0
  15. direction_name = None
  16. if blocked_since <= 3: #TODO: config
  17. try:
  18. previous_direction = context.metas.value.get(PREVIOUS_DIRECTION, object_id)
  19. # TODO: Faut mettre ca en plus propre (proba d'aller tou droit, config, etc)
  20. if randrange(100) < 75: # 75% de change d'aller tout droit
  21. # Dans le futur: les fourmis vont moins tout droit quand elle se croient et se touche
  22. return previous_direction
  23. directions_list = directions_slighty[previous_direction]
  24. # TODO: TMP tant que 1 niveau (z)
  25. directions_list = [direction for direction in directions_list if direction > 9 and direction < 19]
  26. direction_name = choice(directions_list)
  27. except KeyError:
  28. pass
  29. if not direction_name:
  30. direction_name = randint(directions_same_level[0], directions_same_level[1])
  31. return direction_name