Changeset - e5d14320fbd5
[Not reviewed]
default
0 1 0
dmcc - 22 years ago 2002-07-09 08:48:44

SimpleCues created (took 7 minutes or so)
1 file changed with 30 insertions and 1 deletions:
0 comments (0 inline, 0 general)
light8/Cue.py
Show inline comments
 
"""And that's my cue to exit(0)..."""
 
from time import time
 
from util import subsetdict
 
from util import subsetdict, scaledict
 

	
 
class Cue:
 
    """Cues are groups of fades.  They can tell you the current levels at a 
 
    given time.  They contain Fades, which are actually children of Cue,
 
    meaning that Cues can contain Cues.  This is similar to the Light9 concept
 
    of Cues and Fades, but without all the Nodes."""
 
    def __init__(self, name, starttime, dur, *fades):
 
        'Create a cue'
 

	
 
        endtime = starttime + dur
 
        dur = endtime - starttime
 

	
 
        self.name = name
 
        self.starttime = starttime
 
        self.dur = dur
 
        self.endtime = endtime
 
        self.fades = fades
 
        self.cuestart = None
 
        self.init_levels = None
 
    def channels_involved(self):
 
        'Return which channels are involved.  This is important for marking.'
 
        c = {}
 
        for fade in self.fades:
 
            for f_chan in fade.channels_involved():
 
@@ -64,38 +64,67 @@ class Fade(Cue):
 
        self.param = param
 
    def start(self, levels, time):
 
        'Mark the beginning of the fade'
 
        # print "fade", self.name, "marked with", levels
 
        self.init_levels = levels
 
        self.init_level = levels[self.channel]
 
        self.init_time = time
 
    def channels_involved(self):
 
        'Speaks for itself, I hope'
 
        return [self.channel]
 
    def get_levels(self, curtime):
 
        elapsed = curtime - self.init_time
 
        if elapsed <= self.starttime:
 
            return self.init_levels
 
        elif elapsed >= self.endtime:
 
            return {self.channel : self.endlevel}
 
        else:
 
            percent = float((curtime - self.init_time) - self.starttime) / \
 
                        self.dur
 
            return {self.channel : self.init_level + 
 
                percent * (self.endlevel - self.init_level)}
 
    def get_end_levels(self):
 
        return {self.channel : self.endlevel}
 

	
 
class SimpleCue(Cue):
 
    'See Cue.__doc__'
 
    def __init__(self, name, target, dur, **info):
 
        Cue.__init__(self, name, 0, dur)
 
        self.target = target
 
        self.dur = dur
 
        self.info = info
 
    def start(self, levels, time):
 
        'Mark the beginning of the fade'
 
        self.init_levels = levels
 
        self.init_time = time
 
    def channels_involved(self):
 
        'Speaks for itself, I hope'
 
        return self.target.keys()
 
    def get_levels(self, curtime):
 
        elapsed = curtime - self.init_time
 
        if elapsed >= self.endtime:
 
            return self.target
 
        else:
 
            percent = float((curtime - self.init_time) - self.starttime) / \
 
                        self.dur
 
            return dict([(n, self.init_levels[n] + 
 
                percent * (lev - self.init_levels[n]))
 
                    for n, lev in self.target])
 
            # return {self.channel : self.init_level + 
 
                # percent * (self.endlevel - self.init_level)}
 
    def get_end_levels(self):
 
        return self.target
 

	
 
if __name__ == '__main__':
 
    f1 = Fade('red', 0, 2, 100)
 
    f2 = Fade('green', 1, 3, 50)
 
    f3 = Fade('blue', 0, 4, 0)
 
    f4 = Fade('clear', 0, 8, 75) 
 
    c = Cue("Color shift", 0, 10, f1, f2, f3, f4)
 
    tstart = time()
 
    # note how green is not mentioned -- it goes to 0
 
    c.start({'red' : 0, 'blue' : 100, 'clear' : 25}, tstart)
 
    while time() - tstart < 15:
 
        curtime = time()
 
        levs = c.get_levels(curtime)
 
        s = '\t'.join(["%s: %d" % (k[0], v) for k, v, in levs.items()])
 
        print "%.1f" % (curtime - tstart), s
0 comments (0 inline, 0 general)