1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
-
- from sandbox.engulf.behaviour import GrassSpawnBehaviour
- from sandbox.engulf.subject import Cell, Grass
- from synergine2_xyz.xyz import XYZSubjectMixin
- from synergine2_xyz.subjects import XYZSubjects
- from synergine2_xyz.simulation import XYZSimulation
-
- __author__ = 'bux'
-
-
- class EngulfSubjects(XYZSubjects):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
-
- self.cell_xyz = {}
- self.grass_xyz = {}
-
- def remove(self, value: XYZSubjectMixin):
- super().remove(value)
-
- if isinstance(value, Cell):
- try:
- self.cell_xyz.get(value.position, []).remove(value)
- if not self.cell_xyz[value.position]:
- del self.cell_xyz[value.position]
- except ValueError:
- pass
-
- if isinstance(value, Grass):
- del self.grass_xyz[value.position]
-
- def append(self, p_object: XYZSubjectMixin):
- super().append(p_object)
-
- if isinstance(p_object, Cell):
- self.cell_xyz.setdefault(p_object.position, []).append(p_object)
-
- if isinstance(p_object, Grass):
- self.grass_xyz.setdefault(p_object.position, []).append(p_object)
-
-
- class Engulf(XYZSimulation):
- behaviours_classes = [
- GrassSpawnBehaviour,
- ]
-
- def is_possible_position(self, position: tuple) -> bool:
- top_left = (-35, -35, 0)
- bottom_right = (35, 35, 0)
-
- pos_x = position[0]
- pos_y = position[1]
-
- if pos_x < top_left[0] or pos_x > bottom_right[0]:
- return False
-
- if pos_y < top_left[1] or pos_y > bottom_right[1]:
- return False
-
- return True
|