Changeset - d06f97b7a78e
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 6 years ago 2019-06-10 00:41:16
drewp@bigasterisk.com
image effect has more lights; doesn't err on out-of-bounds
Ignore-this: e70b76abb03cffbe547405eecfe974c9
1 file changed with 35 insertions and 6 deletions:
0 comments (0 inline, 0 general)
light9/effect/effecteval.py
Show inline comments
 
@@ -380,71 +380,100 @@ def effect_Strobe(effectSettings, streng
 
    f = (((songTime + offset) * rate) % 1.0)
 
    c = (f < duty) * strength
 
    col = rgb_to_hex([int(c * 255), int(c * 255), int(c * 255)])
 
    return {(L9['device/colorStrip'], L9['color']): Literal(col)}
 

	
 

	
 
def effect_lightning(effectSettings, strength, songTime, noteTime):
 
    devs = [
 
        L9['device/veryLow1'], L9['device/veryLow2'], L9['device/veryLow3'],
 
        L9['device/veryLow4'], L9['device/veryLow5'], L9['device/backlight1'],
 
        L9['device/backlight2'], L9['device/backlight3'],
 
        L9['device/backlight4'], L9['device/backlight5'], L9['device/down2'],
 
        L9['device/down3'], L9['device/down4'], L9['device/hexLow3'],
 
        L9['device/hexLow5'], L9['device/postL1'], L9['device/postR1']
 
    ]
 
    out = {}
 
    col = rgb_to_hex([int(255 * strength)] * 3)
 
    for i, dev in enumerate(devs):
 
        n = noise(songTime * 8 + i * 6.543)
 
        if n > .4:
 
            out[(dev, L9['color'])] = col
 
    return out
 

	
 

	
 
def sample(img, x, y, repeat=False):
 
def sample8(img, x, y, repeat=False):
 
    if not (0 <= y < img.height):
 
        return (0,0,0)
 
    if 0 <= x < img.width:
 
        return img.getpixel((x, y))
 
    elif not repeat:
 
        return (0, 0, 0)
 
    else:
 
        return img.getpixel((x % img.width, y))
 

	
 

	
 
def effect_image(effectSettings, strength, songTime, noteTime):
 
    out = {}
 
    imgPath = f'cur/anim/{effectSettings[L9["image"]]}'
 
    imageSetting = effectSettings.get(L9["image"], 'specks.png')
 
    imgPath = f'cur/anim/{imageSetting}'
 
    t_offset = effectSettings.get(L9['tOffset'], 0)
 
    pxPerSec = effectSettings.get(L9['pxPerSec'], 30)
 
    img = Image.open(imgPath)
 
    x = (noteTime * pxPerSec)
 
    
 
    colorScale = hex_to_rgb(effectSettings.get(L9['colorScale'],
 
                                               '#ffffff'))
 

	
 
    scl = effectSettings.get(L9['strength'], 1)
 
    for dev, y in [(SKY['strip1'], 0),
 
                   (SKY['strip2'], 1),
 
                   (SKY['strip3'], 2)]:
 
        color = sample(img, x, y, effectSettings.get(L9['repeat'], False))
 
        out[(dev, L9['color'])] = scale(rgb_to_hex(color), scl)
 
                   (SKY['strip3'], 2),
 
                   (SKY['par3'], 3), # dl
 
                   (SKY['par4'], 4), # ul
 
                   (SKY['par7'], 5), # ur
 
                   (SKY['par1'], 6), # dr
 
                   ('cyc1', 7),
 
                   ('cyc2', 8),
 
                   ('cyc3', 9),
 
                   ('cyc4', 10),
 
                   ('down1', 11),
 
                   ('down2', 12),
 
                   ('down3', 13),
 
                   ('down4', 14),
 
                   ('down5', 15),
 
                   ('down6', 16),
 
                   ('down7', 17),
 
    ]:
 
        color8 = sample8(img, x, y, effectSettings.get(L9['repeat'], True))
 
        color = map(lambda v: v / 255 * strength, color8)
 
        color = [v * cs / 255 for v, cs in zip(color, colorScale)]
 
        if dev in ['cyc1', 'cyc2', 'cyc3', 'cyc4']:
 
            column = dev[-1]
 
            out[(SKY[f'cycRed{column}'],   L9['brightness'])] = color[0]
 
            out[(SKY[f'cycGreen{column}'], L9['brightness'])] = color[1]
 
            out[(SKY[f'cycBlue{column}'],  L9['brightness'])] = color[2]
 
        else:
 
            out[(dev, L9['color'])] = rgb_to_hex(map(_8bit, color))
 
    return out
 

	
 
def effect_cyc(effectSettings, strength, songTime, noteTime):
 
    colorScale = effectSettings.get(L9['colorScale'], '#ffffff')
 
    r, g, b = map(lambda x: x / 255, hex_to_rgb(colorScale))
 

	
 
    out ={
 
        (SKY['cycRed1'], L9['brightness']): r,
 
        (SKY['cycRed2'], L9['brightness']): r,
 
        (SKY['cycRed3'], L9['brightness']): r,
 
        (SKY['cycRed4'], L9['brightness']): r,
 
        (SKY['cycGreen1'], L9['brightness']): g,
 
        (SKY['cycGreen2'], L9['brightness']): g,
 
        (SKY['cycGreen3'], L9['brightness']): g,
 
        (SKY['cycGreen4'], L9['brightness']): g,
 
        (SKY['cycBlue1'], L9['brightness']): b,
 
        (SKY['cycBlue2'], L9['brightness']): b,
 
        (SKY['cycBlue3'], L9['brightness']): b,
 
        (SKY['cycBlue4'], L9['brightness']): b,
 
         
 
        }
 

	
 
    return out
 

	
0 comments (0 inline, 0 general)