animation.py 2.10 KiB
import time
from threading import Thread
from blinkenfoo import DMX, WARP_SIGN, SPHERES, PANEL, CUBES
class Animation(Thread):
"""
An animation describes transition of pixels on various blinkenfoos. The
blinkenfoo can not be changed after the animation has been initialized. It
is possible to start an animation with a different blinkenroom everytime.
"""
required_args = {}
def __init__(self):
Thread.__init__(self)
self.name = None
self.args = None
self.blinkenroom = None
self._frame = None
self._fps = 0
self._time_should = 0
self._currently_adjusted_for = None
self._running = False
self._paused = False
self._last_cycle = time.time()
self.set_fps(30)
def set_args(self, p_args):
self.args = p_args
def calc_devices_adjusted_fps(self, p_fps):
for device in self.blinkenroom.device_list:
device.calc_fps(p_fps)
def adjust_fps_for_device(self, p_device):
adjusted_fps = p_device.current_fps
if not self._currently_adjusted_for == p_device:
self.set_fps(adjusted_fps)
self._currently_adjusted_for = p_device
def adjust_fps_for_index(self, p_index):
device = self.blinkenroom.get_device_by_index(p_index)
self.adjust_fps_for_device(device)
def cycle(self):
pass
def set_fps(self, p_fps):
self._fps = p_fps
self._time_should = 1 / float(self._fps)
def run(self):
"""
Code stolen from olel
"""
self._running = True
while self._running:
if self._paused:
continue
self.cycle()
if self._fps:
time_spend = time.time() - self._last_cycle
sleep_time = self._time_should - time_spend
if sleep_time > 0:
time.sleep(sleep_time)
self._last_cycle = time.time()
def stop(self):
self._running = False
def pause(self):
self._paused = True
def resume(self):
self._paused = False