Changeset - eca35927bdd4
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 7 years ago 2018-06-10 21:52:23
drewp@bigasterisk.com
1 file changed with 16 insertions and 1 deletions:
0 comments (0 inline, 0 general)
light9/effect/effecteval.py
Show inline comments
 
@@ -22,25 +22,27 @@ def literalColor(rnorm, gnorm, bnorm):
 

	
 
def literalColorHsv(h, s, v):
 
    return literalColor(*hsv_to_rgb(h, s, v))
 
    
 
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 noise(t):
 
    return pnoise1(t % 1000.0, 2)
 

	
 
def clamp(lo, hi, x):
 
    return max(lo, min(hi, x))
 
    
 
class EffectEval(object):
 
    """
 
    runs one effect's code to turn effect attr settings into output
 
    device settings. No state; suitable for reload().
 
    """
 
    def __init__(self, graph, effect, simpleOutputs):
 
        self.graph = graph
 
        self.effect = effect
 
        self.simpleOutputs = simpleOutputs
 

	
 
    def outputFromEffect(self, effectSettings, songTime, noteTime):
 
        """
 
@@ -118,24 +120,37 @@ def effect_auraSparkles(effectSettings, 
 
        dev = L9['device/aura%s' % n]
 
        out.update({
 
            (dev, L9['color']): col,
 
            (dev, L9['zoom']): .95,
 
            })
 
        ang = songTime * 4
 
        out.update({
 
        (dev, L9['rx']): lerp(.27, .8, (n-1)/4) + .2 * math.sin(ang+n),
 
        (dev, L9['ry']): lerp(.46, .52, (n-1)/4) + .4 * math.cos(ang+n),
 
            })
 
    return out
 

	
 
def effect_qpan(effectSettings, strength, songTime, noteTime):
 
    dev = L9['device/q2']
 
    dur = 4
 
    col = scale(scale('#ffffff', strength),
 
                effectSettings.get(L9['colorScale']) or '#ffffff')
 
    return {
 
        (dev, L9['color']): col,
 
        (dev, L9['focus']): 0.589,
 
        (dev, L9['rx']): lerp(0.778, 0.291, clamp(0, 1, noteTime / dur)),
 
        (dev, L9['ry']): 0.383,
 
        (dev, L9['zoom']): 0.714,
 
    }
 

	
 
def effect_pulseRainbow(effectSettings, strength, songTime, noteTime):
 
    out = {}
 
    tint = effectSettings.get(L9['tint'], '#ffffff')
 
    tintStrength = float(effectSettings.get(L9['tintStrength'], 0))
 
    tr, tg, tb = hex_to_rgb(tint)
 
    for n in range(1, 5+1):
 
        scl = strength 
 
        col = literalColor(
 
            scl * lerp(nsin(songTime + n * .2), tr/255, tintStrength),
 
            scl * lerp(nsin(songTime + n * .2 + .3), tg/255, tintStrength),
 
            scl * lerp(nsin(songTime + n * .3 + .6), tb/255, tintStrength))
 

	
0 comments (0 inline, 0 general)