simulation.py 1.1KB

123456789101112131415161718192021222324252627282930313233
  1. # coding: utf-8
  2. import typing
  3. from synergine2.config import Config
  4. from synergine2.simulation import SubjectMechanism, Simulation, Subject
  5. from synergine2_xyz.simulation import XYZSimulation
  6. from synergine2_xyz.subjects import XYZSubject
  7. class VisibleMechanism(SubjectMechanism):
  8. def __init__(
  9. self,
  10. config: Config,
  11. simulation: Simulation,
  12. subject: Subject,
  13. ) -> None:
  14. super().__init__(config, simulation, subject)
  15. self.simulation = typing.cast(XYZSimulation, self.simulation)
  16. self.subject = typing.cast(XYZSubject, self.subject)
  17. def reduce_subjects(self, subjects: typing.List[XYZSubject]) -> typing.Iterator[XYZSubject]:
  18. return subjects
  19. def is_visible(self, observed: XYZSubject) -> bool:
  20. return self.simulation.physics.subject_see_subject(self.subject, observed)
  21. def run(self) -> dict:
  22. subjects_to_parse = self.reduce_subjects(self.simulation.subjects)
  23. subjects_visible = list(filter(self.is_visible, subjects_to_parse))
  24. return {
  25. 'visible_subjects': subjects_visible,
  26. }