changeset 45:62c47c3a90cb

util.py: subsetdict added. see docs util.py: subsetdict added. see docs Cue.py: Cues and Fades created. see docs
author dmcc
date Sun, 07 Jul 2002 13:33:19 +0000
parents 6540879e336e
children cfb00e8cc0ea
files light8/Cue.py light8/util.py
diffstat 2 files changed, 22 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/light8/Cue.py	Sun Jul 07 13:07:31 2002 +0000
+++ b/light8/Cue.py	Sun Jul 07 13:33:19 2002 +0000
@@ -1,21 +1,16 @@
-"""And that's my cue to exit(0)..."""
+'''And that's my cue to exit(0)...'''
 from time import time
-from util import subsetdict, scaledict
+from util import subsetdict
 
 class Cue:
-    """Cues are groups of fades.  They can tell you the current levels at a 
+    '''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):
+    of Cues and Fades, but without all the Nodes.'''
+    def __init__(self, name, starttime, endtime, *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
@@ -29,7 +24,6 @@
         return c.keys()
     def start(self, levels, time):
         'Mark the beginning of a cue'
-        # print "cue marked with", levels
         self.init_levels = levels
         self.init_time = time
 
@@ -44,27 +38,23 @@
             for ch, lev in fade_d.items():
                 d[ch] = max(lev, d.get(ch, 0))
         return d
-    def get_end_levels(self):
-        'Returns the final levels'
-        d = {}
-        for fade in self.fades:
-            fade_d = fade.get_end_levels()
-            for ch, lev in fade_d.items():
-                d[ch] = max(lev, d.get(ch, 0))
-        return d
 
 class Fade(Cue):
     'See Cue.__doc__'
-    def __init__(self, channel, starttime, dur=None, endlevel=0, param=None):
-        'Fades are simple Cues'
-        Cue.__init__(self, "%s -> %.1f" % (channel, endlevel), starttime, dur)
+    def __init__(self, channel, starttime, endtime=None, endlevel=0, dur=None,
+                 param=None):
+        'Only specify an end time or a duration'
+        if not endtime:
+            endtime = starttime + dur
+        else:
+            dur = endtime - starttime
+        Cue.__init__(self, "%s -> %f" % (channel, endlevel), starttime, endtime)
         self.channel = channel
         self.endlevel = endlevel
         self.dur = dur
         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
@@ -78,41 +68,9 @@
         elif elapsed >= self.endtime:
             return {self.channel : self.endlevel}
         else:
-            percent = float((curtime - self.init_time) - self.starttime) / \
-                        self.dur
+            percent = float(elapsed) / 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)
--- a/light8/util.py	Sun Jul 07 13:07:31 2002 +0000
+++ b/light8/util.py	Sun Jul 07 13:33:19 2002 +0000
@@ -1,4 +1,3 @@
-
 def maxes(dicts):
     '''
     ({'a' : 5, 'b' : 9}, {'a' : 10, 'b' : 943})
@@ -14,3 +13,11 @@
     return dict([(k,v*scl) for k,v in d.items()])
     
 # class Setting that scales, maxes        
+
+def subsetdict(d, dkeys, default=0):
+    'Subset of dictionary d: only the keys in dkeys'
+    # print 'd', d, 'dkeys', dkeys
+    newd = {} # dirty variables!
+    for k in dkeys:
+        newd[k] = d.get(k, default)
+    return newd