Changeset - 038eca7ff708
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 9 years ago 2016-06-12 01:49:32
drewp@bigasterisk.com
nsin and other effect shorthands
Ignore-this: 52f02611ab504e966d6addf8ff2a16c
2 files changed with 22 insertions and 24 deletions:
0 comments (0 inline, 0 general)
light9/effect/effecteval.py
Show inline comments
 
@@ -5,12 +5,19 @@ from webcolors import rgb_to_hex, hex_to
 
from decimal import Decimal
 
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()
 

	
 
    if isinstance(value, Decimal):
 
        value = float(value)
 
@@ -86,22 +93,30 @@ class EffectEval(object):
 
                
 
                (mov, L9['color'], Literal(rgb_to_hex([strength*x*255 for x in col]))),
 
                (mov, L9['rx'], Literal(100 + 70 * math.sin(songTime*2))),
 
            ] * (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]
 
            assert attr == L9['strength']
 
            strength = float(value)
 
            rate = 2
show/dance2016/effect.n3
Show inline comments
 
@@ -13,31 +13,14 @@ effect:BlueStrip a :Effect; rdfs:label "
 
effect:RedStrip a :Effect; rdfs:label "red"; :deviceSetting :ds1, :ds2;
 
     :publishAttr :strength .
 

	
 
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;
 
     :chaseTempo 120; :code "chase()"; :devices dev:colorStrip, dev:moving1;
 
     :fadeShape :fadeCurve1; :palette "#0000ff", "#ff0000", "#ffffff";
 
     :publishAttr :strength .
0 comments (0 inline, 0 general)