diff flax/Show.py @ 0:45b12307c695

Initial revision
author drewp
date Wed, 03 Jul 2002 09:37:57 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flax/Show.py	Wed Jul 03 09:37:57 2002 +0000
@@ -0,0 +1,102 @@
+from Timeline import *
+from Submaster import Submasters, sub_maxes
+
+class Show:
+    def __init__(self, timelines, submasters):
+        self.timelines = dict([(timeline.name, timeline)
+            for timeline in timelines])
+        self.submasters = submasters
+        self.current_timeline = None
+        self.current_time = 0
+    def calc_active_submaster(self):
+        "get levels from the current timeline at the current time"
+        if not (self.current_timeline or self.current_time):
+            return {}
+        tl = self.current_timeline
+        tl.set_time(self.current_time)
+        levels = tl.get_levels()
+        scaledsubs = [self.submasters.get_sub_by_name(sub) * level \
+            for sub, level in levels.items()]
+        maxes = sub_maxes(*scaledsubs)
+
+        return maxes
+    def set_timeline(self, name):
+        "select a timeline"
+        self.current_timeline = self.timelines.get(name)
+        if not self.current_timeline:
+            print "Show: '%s' is not the name of a timeline." % name
+        else:
+            self.set_time(0)
+    def set_time(self, time):
+        "set time of current timeline"
+        self.current_time = time
+        if not self.current_timeline:
+            return
+        self.current_timeline.set_time(time)
+    def get_timelines(self):
+        "Get names of all timelines"
+        return self.timelines.keys()
+
+# this is the default blender
+linear = LinearBlender()
+def T(time, level, **kw):
+    """This used to be a synonym for TimedEvent:
+
+    T = TimedEvent
+
+    It now acts in a similar way, except that it will fill in a default 
+    blender if you don't.  The default blender is a LinearBlender.  It also
+    sets frame to MISSING so the track can fill it in."""
+    if 'blender' not in kw:
+        global linear
+        kw['blender'] = linear
+
+    return TimedEvent(time, level=level, frame=MISSING, **kw)
+
+def translate_tracks_from_file(timelinename):
+    try:
+        f = open('timelines/' + timelinename)
+    except IOError:
+        return []
+
+    events = {}
+    current_sub = None
+    current_time = None
+    lines = f.readlines()
+    alltext = ' '.join(lines)
+
+    for token in alltext.split():
+        # print 't', token
+        if token.endswith(':'):
+            # print 'sub'
+            current_sub = token[:-1]
+            current_time = None
+        else:
+            if not current_sub:
+                raise "invalid file format", line
+            if current_time is not None: # we now have a level
+                # print 'level'
+                try:
+                    level = float(token)
+                except:
+                    print "bad level token", token
+                    level = 0
+                # time to write
+                events.setdefault(current_sub, [])
+                events[current_sub].append((current_time, level))
+                current_time = None
+            else:
+                # print 'time'
+                try:
+                    current_time = float(token)
+                except ValueError:
+                    print "bad time token", token
+                    current_time = 0
+
+    tracks = []
+    for sub, timelevels in events.items():
+        tracks.append(TimelineTrack(sub, default_frame=sub,
+            *[T(time, level) for time, level in timelevels]))
+
+    return tracks
+