diff options
| author | Aaron Perley <aaron.perley@gmail.com> | 2016-09-27 21:39:02 -0400 |
|---|---|---|
| committer | Aaron Perley <aaron.perley@gmail.com> | 2016-09-27 21:39:02 -0400 |
| commit | 6e265cfa5002a5667681733eae08357f2b9695e5 (patch) | |
| tree | e82e90871c04252114421794849bed152ee2700c /bridge.py | |
| parent | Fish render (diff) | |
| download | bridge-6e265cfa5002a5667681733eae08357f2b9695e5.tar.zst | |
Add bridge simulator and cleanup code
Diffstat (limited to 'bridge.py')
| -rw-r--r-- | bridge.py | 70 |
1 files changed, 38 insertions, 32 deletions
@@ -3,23 +3,43 @@ from __future__ import division import color import colorsys -import lumiversepython +from DummyRig import DummyRig #import lumiversepython import math import random import time -FRAME_RATE = 44 +FRAME_RATE = 10 #44 MIN_VALUE = 0 MAX_VALUE = 1 MAX_TIME = 4 MIN_TIME = 0.3 -MAX_HUE = 169 / 360 +MAX_HUE = 230 / 360 MIN_HUE = 250 / 360 +class Panel(object): + def __init__(self, light): + self.light = light + self.current_color = color.RGB(0, 0, 0) + self.target_color = color.RGB(0, 0, 0) + self.delta = color.RGB(1, 1, 1) + + def begin_transition(self, target_color, delta_ticks): + self.target_color = target_color + self.delta = (self.target_color - self.current_color) / delta_ticks + + def tick(self): + self.current_color = self.current_color + self.delta + self.light.setRGBRaw(*self.current_color.components) + + def transition_complete(self): + return abs(self.current_color - self.target_color) < abs(self.delta) + + + def get_all_lights(rig): """Return a list of all panels.""" return [ - rig.select('$side={}[$sequence={}]'.format(j, i)) + Panel(rig.select('$side={}[$sequence={}]'.format(j, i))) for j in ['top', 'bot'] for i in range(1, 200) ] @@ -27,7 +47,7 @@ def get_all_lights(rig): def pick_HSV(): """Return a random color in an appropriate interval.""" hue = random.random() * (MAX_HUE - MIN_HUE) + MIN_HUE - saturation = random.random() + saturation = random.random() * (1 - 0.63) + 0.63 value = random.random() return color.HSV(hue, saturation, value) @@ -38,44 +58,30 @@ def transition(start, end, step): def random_change(): - """Return a random amount that a light should change each frame.""" - min_time = int(MIN_TIME * FRAME_RATE) - max_time = int(MAX_TIME * FRAME_RATE) - return 1 / random.randint(min_time, max_time) + """Return a random number of ticks for a light to change""" + min_ticks = int(MIN_TIME * FRAME_RATE) + max_ticks = int(MAX_TIME * FRAME_RATE) + return random.randint(min_ticks, max_ticks) def demo(lights, rig): """Do some light things.""" - light_status = [ - { - 'change': 0, - 'light': light, - 'current value': color.RGB(0, 0, 0), - 'transitioning to': color.RGB(0, 0, 0), - } - for light in lights - ] while True: - for light_s in light_status: - change = light_s['change'] - light = light_s['light'] - current_value = light_s['current value'] - transitioning_to = light_s['transitioning to'] - if abs(transitioning_to - current_value) < change: - change = random_change() - light_s['change'] = change - transitioning_to = pick_HSV().to_RGB() - light_s['transitioning to'] = transitioning_to - new_color = transition(current_value, transitioning_to, change) - light.setRGBRaw(*new_color.components) - light_s['current value'] = new_color + print "Tick" + for light in lights: + if light.transition_complete(): + if( light == lights[0] ): + print "Transition complete!" + light.begin_transition(pick_HSV().to_RGB(), random_change()) + light.tick() + rig.updateOnce() time.sleep(1 / FRAME_RATE) def main(): """Run show.""" - rig = lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json') + rig = DummyRig(200, 2) #lumiversepython.Rig('/home/teacher/Lumiverse/PBridge.rig.json') rig.init() lights = get_all_lights(rig) demo(lights, rig) |
