changeset 293:1c590824dd14

chase logic is (mostly) fixed, integrate with curvecalc Also add some quick names for chases
author David McClosky <dmcc@bigasterisk.com>
date Sat, 18 Jun 2005 16:59:04 +0000
parents e841bea500c3
children c9dcc57116c2
files bin/curvecalc light9/chase.py
diffstat 2 files changed, 18 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/bin/curvecalc	Sat Jun 18 15:41:28 2005 +0000
+++ b/bin/curvecalc	Sat Jun 18 16:59:04 2005 +0000
@@ -15,12 +15,19 @@
 
 import run_local
 from light9 import Submaster, dmxclient, networking, showconfig
-from light9.TLUtility import make_attributes_from_args
+from light9.TLUtility import make_attributes_from_args, dict_subset
 from light9.zoomcontrol import Zoomcontrol
 from light9.curve import Curve, Curveview, Curveset, Curvesetview
 from light9.wavelength import wavelength
 from light9.uihelpers import toplevelat
 
+import light9.Effects
+fx_dict = light9.Effects.__dict__
+all_fx = fx_dict['__all__']
+expr_helpers = dict_subset(fx_dict, all_fx)
+del fx_dict
+del all_fx
+
 class Music:
     def __init__(self):
         self.player=None # xmlrpc Proxy to player
@@ -65,6 +72,9 @@
         glo = self.curveset.globalsdict()
         glo['t'] = t
 
+        # add in functions from Effects
+        glo.update(expr_helpers)
+
         glo['nsin'] = lambda x: (math.sin(x * (2 * math.pi)) + 1) / 2
         glo['ncos'] = lambda x: (math.cos(x * (2 * math.pi)) + 1) / 2
         glo['within'] = lambda a, b: a < t < b
--- a/light9/chase.py	Sat Jun 18 15:41:28 2005 +0000
+++ b/light9/chase.py	Sat Jun 18 16:59:04 2005 +0000
@@ -1,13 +1,15 @@
 from __future__ import division
 
-def chase(t, ontime=0.5, offtime=0.5, offset=0.2, onval=1.0, 
+def chase(t, ontime=0.5, offset=0.2, onval=1.0, 
           offval=0.0, names=None, combiner=max):
     names = names or []
-    period = ontime + offtime
+    # maybe this is better:
+    # period = ontime + ((offset + ontime) * (len(names) - 1))
+    period = (offset + ontime) * len(names)
     outputs = {}
     for index, name in enumerate(names):
         # normalize our time
-        local_offset = offset * index
+        local_offset = (offset + ontime) * index
         local_t = t - local_offset
         local_t %= period
 
@@ -19,7 +21,7 @@
 
         # it could be in there twice (in a bounce like (1, 2, 3, 2)
         if name in outputs:
-            outputs[name] = max(value, outputs[name])
+            outputs[name] = combiner(value, outputs[name])
         else:
             outputs[name] = value
     return outputs
@@ -28,7 +30,7 @@
     # a little testing
     for x in range(80):
         x /= 20.0
-        output = chase(x, onval='x', offval=' ', ontime=0.3, offtime=0.6,
+        output = chase(x, onval='x', offval=' ', ontime=0.1, offset=0.2,
                        names=('a', 'b', 'c', 'd'))
         output = output.items()
         output.sort()