diff --git a/light9/effect/effecteval.py b/light9/effect/effecteval.py --- a/light9/effect/effecteval.py +++ b/light9/effect/effecteval.py @@ -91,7 +91,15 @@ class EffectEval(object): out.extend([ (L9['device/lowPattern%s' % n], L9['color'], literalColor(0*strength, strength, strength)) for n in range(301,308+1) ]) - + elif self.effect == L9['effect/animRainbow']: + for n in range(1, 5+1): + col = literalColor( + strength * (.5 + .5 * math.sin(songTime*6+n)), + strength * (.5 + .5 * math.sin(songTime*6+2+n)), + strength * (.5 + .5 * math.sin(songTime*6+4+n))) + out.append((L9['device/aura%s' % n], L9['color'], col)) + + elif self.effect == L9['effect/Strobe']: attr, value = effectSettings[0] assert attr == L9['strength'] @@ -102,9 +110,9 @@ class EffectEval(object): f = (((songTime + offset) * rate) % 1.0) c = (f < duty) * strength col = rgb_to_hex([c * 255, c * 255, c * 255]) - return [ + out.extend([ (L9['device/colorStrip'], L9['color'], Literal(col)), - ] + ]) return out diff --git a/light9/subclient.py b/light9/subclient.py --- a/light9/subclient.py +++ b/light9/subclient.py @@ -1,4 +1,5 @@ from light9.effect.sequencer import sendToCollector +from twisted.internet import reactor, task class SubClient: def __init__(self): @@ -13,10 +14,7 @@ class SubClient: self.graph.addHandler(self._send_sub) def send_levels_loop(self, delay=1000): - """This function assumes that we are an instance of a Tk object - (or at least that we have an 'after' method)""" - self.graph.addHandler(self.send_levels) - self.after(delay, self.send_levels_loop, delay) + task.LoopingCall(lambda: self.graph.addHandler(self.send_levels)).start(delay) def _send_sub(self): outputSettings = self.get_output_settings() diff --git a/show/dance2016/effect.n3 b/show/dance2016/effect.n3 --- a/show/dance2016/effect.n3 +++ b/show/dance2016/effect.n3 @@ -16,6 +16,27 @@ effect:RedStrip a :Effect; rdfs:label "r effect:Strobe a :Effect; rdfs:label "strobe"; :publishAttr :duty, :offset, :rate, :strength . +effect:animRainbow a :Effect; rdfs:label "animRainbow"; :publishAttr :strength, :rate; + + :setting effect:animRainbow_set1, effect:animRainbow_set10, effect:animRainbow_set11, effect:animRainbow_set12, effect:animRainbow_set13, effect:animRainbow_set14, effect:animRainbow_set15, effect:animRainbow_set16, effect:animRainbow_set17, effect:animRainbow_set18, effect:animRainbow_set19, effect:animRainbow_set6, effect:animRainbow_set7, effect:animRainbow_set8, effect:animRainbow_set9 . + +effect:animRainbow_set1 :device dev:aura1; :deviceAttr :zoom; :value 0.465 . +effect:animRainbow_set10 :device dev:aura3; :deviceAttr :zoom; :value 0.477 . +effect:animRainbow_set11 :device dev:aura4; :deviceAttr :zoom; :value 0.524 . +effect:animRainbow_set12 :device dev:aura5; :deviceAttr :zoom; :value 0.519 . +effect:animRainbow_set13 :device dev:aura5; :deviceAttr :ry; :value 0.509 . +effect:animRainbow_set14 :device dev:aura4; :deviceAttr :ry; :value 0.542 . +effect:animRainbow_set15 :device dev:aura3; :deviceAttr :ry; :value 0.485 . +effect:animRainbow_set16 :device dev:aura2; :deviceAttr :ry; :value 0.494 . +effect:animRainbow_set17 :device dev:aura1; :deviceAttr :ry; :value 0.463 . +effect:animRainbow_set18 :device dev:aura1; :deviceAttr :rx; :value 0.272 . +effect:animRainbow_set19 :device dev:aura2; :deviceAttr :rx; :value 0.310 . +effect:animRainbow_set6 :device dev:aura3; :deviceAttr :rx; :value 0.463 . +effect:animRainbow_set7 :device dev:aura4; :deviceAttr :rx; :value 0.672 . +effect:animRainbow_set8 :device dev:aura5; :deviceAttr :rx; :value 0.700 . +effect:animRainbow_set9 :device dev:aura2; :deviceAttr :zoom; :value 0.4779 . + + effect:usa a :mockupEffect; rdfs:label "USA"; :chaseOffset 0; :chaseTempo 120; :code "chase()"; :devices dev:colorStrip, dev:moving1; :fadeShape :fadeCurve1; :palette "#0000ff", "#ff0000", "#ffffff";