Files @ 092967f313e1
Branch filter:

Location: light9/light9/chase.py

drewp@bigasterisk.com
attempt to make things more typesafe and readable (untested)
def chase(t,
          ontime=0.5,
          offset=0.2,
          onval=1.0,
          offval=0.0,
          names=None,
          combiner=max):
    names = names or []
    # 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 + ontime) * index
        local_t = t - local_offset
        local_t %= period

        # see if we're still in the on part
        if local_t <= ontime:
            value = onval
        else:
            value = offval

        # it could be in there twice (in a bounce like (1, 2, 3, 2)
        if name in outputs:
            outputs[name] = combiner(value, outputs[name])
        else:
            outputs[name] = value
    return outputs


if __name__ == "__main__":
    # a little testing
    for x in range(80):
        x /= 20.0
        output = chase(x,
                       onval='x',
                       offval=' ',
                       ontime=0.1,
                       offset=0.2,
                       names=('a', 'b', 'c', 'd'))
        output = sorted(list(output.items()))
        print("%.2f\t%s" % (x, ' '.join([str(x) for x in output])))