TrafficLight.py 898 B

1234567891011121314151617181920212223242526272829303132
  1. from enum import Enum
  2. from pypdevs.DEVS import AtomicDEVS
  3. from pypdevs.infinity import INFINITY
  4. class Phase(Enum):
  5. Green = "Green"
  6. Orange = "Orange"
  7. Red = "Red"
  8. class TrafficLight(AtomicDEVS):
  9. def __init__(self, phases: tuple[int, int, int] = (25, 5, 30)):
  10. """
  11. :param phases: timings for green yellow/orange red phases of the traffic light
  12. """
  13. AtomicDEVS.__init__(self, "TrafficLight")
  14. self.phases = phases
  15. self.state = Phase.Red
  16. def intTransition(self):
  17. if self.state == Phase.Green:
  18. return Phase.Orange
  19. elif self.state == Phase.Orange:
  20. return Phase.Red
  21. return Phase.Green
  22. def timeAdvance(self):
  23. if self.state == Phase.Green:
  24. return self.phases[0]
  25. elif self.state == Phase.Orange:
  26. return self.phases[1]
  27. return self.phases[2]