diff --git a/light9/effect/effecteval.py b/light9/effect/effecteval.py --- a/light9/effect/effecteval.py +++ b/light9/effect/effecteval.py @@ -8,6 +8,13 @@ import math def literalColor(rnorm, gnorm, bnorm): return Literal(rgb_to_hex([rnorm * 255, gnorm * 255, bnorm * 255])) +def nsin(x): return (math.sin(x * (2 * math.pi)) + 1) / 2 +def ncos(x): return (math.cos(x * (2 * math.pi)) + 1) / 2 +def nsquare(t, on=.5): + return (t % 1.0) < on +def lerp(a, b, t): + return a + (b - a) * t + def scale(value, strength): if isinstance(value, Literal): value = value.toPython() @@ -89,16 +96,24 @@ class EffectEval(object): ] * (strength>0)) elif self.effect == L9['effect/Curtain']: out.extend([ - (L9['device/lowPattern%s' % n], L9['color'], literalColor(0*strength, strength, strength)) for n in range(301,308+1) + (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): + scl = strength * nsin(songTime + n * .3)**3 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)) - + scl * nsin(songTime + n * .2), + scl * nsin(songTime + n * .2 + .3), + scl * nsin(songTime + n * .3 + .6)) + col = literalColor(scl * .6, scl * 0, scl * 1) + dev = L9['device/aura%s' % n] + out.append((dev, L9['color'], col)) + out.append((dev, L9['zoom'], .9)) + ang = songTime * 4 + out.append((dev, L9['rx'], lerp(.27, .7, (n-1)/4) + .2 * math.sin(ang+n))) + out.append((dev, L9['ry'], lerp(.46, .52, (n-1)/4) + .5 * math.cos(ang+n))) elif self.effect == L9['effect/Strobe']: attr, value = effectSettings[0] diff --git a/show/dance2016/effect.n3 b/show/dance2016/effect.n3 --- a/show/dance2016/effect.n3 +++ b/show/dance2016/effect.n3 @@ -16,25 +16,8 @@ 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 a :Effect; rdfs:label "animRainbow"; :publishAttr :strength, :rate . -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;