123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from intelligine.cst import MOLECULES, MOLECULES_DIRECTION
- from intelligine.synergy.stigmergy.MoleculesManager import MoleculesManager
-
-
- class Evaporation:
-
- def __init__(self, context,
- intensity_decrement=1,
- molecule_minimum_age=0,
- molecules_exclude_types=None,
- molecules_include_types=None):
- self._context = context
- self._intensity_decrement = intensity_decrement
- self._molecules_manager = MoleculesManager(context)
- self._molecule_minimum_age = molecule_minimum_age
- self._molecules_exclude_types = molecules_exclude_types
- self._molecules_include_types = molecules_include_types
-
- def evaporate(self):
- for position, flavour in self._get_flavours():
- self._decrease_flavour(flavour)
- self._molecules_manager.set_flavour(position, flavour)
-
- def remove(self):
- for position, flavour in self._get_flavours():
- self._remove_molecule(flavour)
- self._molecules_manager.set_flavour(position, flavour)
-
- def _get_flavours(self):
- molecules_points = self._context.metas.list.get(MOLECULES, MOLECULES, allow_empty=True)
- for molecule_point in molecules_points:
- yield molecule_point, self._molecules_manager.get_flavour(molecule_point)
-
- def _decrease_flavour(self, flavour):
- for direction_molecule in self._get_molecules_from_flavour(flavour):
- direction_molecule.increment_intensity(-self._intensity_decrement)
- flavour.set_molecule(direction_molecule)
-
- def _get_molecules_from_flavour(self, flavour):
- molecules = []
- for direction_molecule in flavour.get_molecules(MOLECULES_DIRECTION):
- if not self._is_recent_molecule(direction_molecule) \
- and not self._is_excluded_molecule_type(direction_molecule):
- molecules.append(direction_molecule)
- return molecules
-
- def _remove_molecule(self, flavour):
- for direction_molecule in self._get_molecules_from_flavour(flavour):
- flavour.remove_molecule(direction_molecule)
-
- def _is_recent_molecule(self, molecule):
- return (self._context.get_cycle() - molecule.get_cycle_age()) < self._molecule_minimum_age
-
- def _is_excluded_molecule_type(self, molecule):
- if not self._molecules_exclude_types and not self._molecules_include_types:
- return False
-
- if self._molecules_exclude_types and not self._molecules_include_types:
- return molecule.get_type() in self._molecules_exclude_types
-
- if not self._molecules_exclude_types and self._molecules_include_types:
- return molecule.get_type() not in self._molecules_include_types
|