Mercurial > code > home > repos > light9
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()