changeset 1476:6d8817152eb3

colorScale effect setting that multiplies all outgoing colors by your note color Ignore-this: 263e941be8242978b2a7f033e0b3d2f9
author drewp@bigasterisk.com
date Sun, 12 Jun 2016 21:03:47 +0000
parents a749079ec774
children a6f1b8368f09
files light9/effect/effecteval.py light9/effect/sequencer.py
diffstat 2 files changed, 22 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/light9/effect/effecteval.py	Sun Jun 12 21:01:20 2016 +0000
+++ b/light9/effect/effecteval.py	Sun Jun 12 21:03:47 2016 +0000
@@ -28,7 +28,13 @@
     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 @@
 
         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 @@
         #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
         
 
--- a/light9/effect/sequencer.py	Sun Jun 12 21:01:20 2016 +0000
+++ b/light9/effect/sequencer.py	Sun Jun 12 21:03:47 2016 +0000
@@ -38,6 +38,11 @@
         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 @@
         """
         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):