1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from synergine2.simulation import Subject
- from synergine2.simulation import Behaviour
- from synergine2.xyz import ProximityMechanism
- from synergine2.xyz import XYZSubjectMixin
-
- COLLECTION_CELL = 'COLLECTION_CELL' # Collections of Cell type
-
-
- class CellProximityMechanism(ProximityMechanism):
- distance = 1.41 # distance when on angle
- feel_collections = [COLLECTION_CELL]
-
-
- class CellDieBehaviour(Behaviour):
- use = [CellProximityMechanism]
-
- def run(self, data):
- around_count = len(data[CellProximityMechanism])
- if around_count in [2, 3]:
- return False
- return True # If we return around_count, when around_count is 0
-
- def action(self, data):
- new_empty = Empty(
- simulation=self.simulation,
- position=self.subject.position,
- )
- self.simulation.subjects.remove(self.subject)
- self.simulation.subjects.append(new_empty)
-
-
- class CellBornBehaviour(Behaviour):
- use = [CellProximityMechanism]
-
- def run(self, data):
- around_count = len(data[CellProximityMechanism])
- if around_count == 3:
- return 3
- return False
-
- def action(self, data):
- new_cell = Cell(
- simulation=self.simulation,
- position=self.subject.position,
- )
- self.simulation.subjects.remove(self.subject)
- self.simulation.subjects.append(new_cell)
-
-
- class Cell(XYZSubjectMixin, Subject):
- collections = Subject.collections[:]
- collections.extend([COLLECTION_CELL])
- behaviours_classes = [CellDieBehaviour]
-
-
- class Empty(XYZSubjectMixin, Subject):
- """Represent empty position where cell can spawn"""
- behaviours_classes = [CellBornBehaviour]
|