# HG changeset patch # User drewp@bigasterisk.com # Date 2016-06-12 21:03:47 # Node ID 6d8817152eb3d34d7e441268dd988ce35b39e828 # Parent a749079ec7742feee6fc7742abd8da26c8e4e377 colorScale effect setting that multiplies all outgoing colors by your note color Ignore-this: 263e941be8242978b2a7f033e0b3d2f9 diff --git a/light9/effect/effecteval.py b/light9/effect/effecteval.py --- a/light9/effect/effecteval.py +++ b/light9/effect/effecteval.py @@ -28,7 +28,13 @@ def scale(value, strength): if isinstance(value, basestring): if value[0] == '#': r,g,b = hex_to_rgb(value) - return rgb_to_hex([r * strength, g * strength, b * strength]) + if isinstance(strength, Literal): + strength = strength.toPython() + if isinstance(strength, basestring): + sr, sg, sb = [v/255 for v in hex_to_rgb(strength)] + else: + sr = sg = sb = strength + return rgb_to_hex([int(r * sr), int(g * sg), int(b * sb)]) elif isinstance(value, (int, float)): return value * strength else: @@ -81,7 +87,8 @@ class EffectEval(object): out = {} # (dev, attr): value - out.update(self.simpleOutput(strength)) + out.update(self.simpleOutput(strength, + effectSettings.get(L9['colorScale'], None))) if self.effect.startswith(L9['effect/']): tail = 'effect_' + self.effect[len(L9['effect/']):] @@ -98,12 +105,14 @@ class EffectEval(object): #import pprint; pprint.pprint(outList, width=170) return outList - def simpleOutput(self, strength): + def simpleOutput(self, strength, colorScale): out = {} - for dev, attr, value, isScaled in self.effectOutputs.get(self.effect, []): + for dev, devAttr, value, isScaled in self.effectOutputs.get(self.effect, []): if isScaled: value = scale(value, strength) - out[(dev, attr)] = value + if colorScale is not None and devAttr == L9['color']: + value = scale(value, colorScale) + out[(dev, devAttr)] = value return out diff --git a/light9/effect/sequencer.py b/light9/effect/sequencer.py --- a/light9/effect/sequencer.py +++ b/light9/effect/sequencer.py @@ -38,6 +38,11 @@ class Note(object): self.uri = uri self.effectEval = effectevalModule.EffectEval( graph, g.value(uri, L9['effectClass'])) + self.baseEffectSettings = {} # {effectAttr: value} + for s in g.objects(uri, L9['setting']): + ea = g.value(s, L9['effectAttr']) + self.baseEffectSettings[ea] = g.value(s, L9['value']) + floatVal = lambda s, p: float(g.value(s, p).toPython()) originTime = floatVal(uri, L9['originTime']) self.points = [] @@ -72,8 +77,9 @@ class Note(object): """ list of (device, attr, value) """ - effectSettings = [(L9['strength'], self.evalCurve(t))] - return self.effectEval.outputFromEffect(effectSettings, t) + effectSettings = self.baseEffectSettings.copy() + effectSettings[L9['strength']] = self.evalCurve(t) + return self.effectEval.outputFromEffect(effectSettings.items(), t) class CodeWatcher(object):