| import threading, time, itertools |
| from patterns import STROKE_MODES |
| class ModeRunner(threading.Thread): |
| def __init__(self, controller): |
| super().__init__(daemon=True) |
| self.controller=controller |
| self._mode=None |
| self._stop=threading.Event() |
| def set_mode(self,name): |
| self._mode=name; self._stop.clear() |
| def stop(self): |
| self._stop.set(); self.controller.stop() |
| def run(self): |
| while True: |
| if not self._mode or self._mode not in STROKE_MODES: |
| time.sleep(0.5); continue |
| for dur,spd,ctr,span in itertools.cycle(STROKE_MODES[self._mode]): |
| if self._stop.is_set() or not self._mode: |
| break |
| self.controller.move(spd,ctr,span); time.sleep(dur) |