changeset 110:490843093506

all of this stuff is super rough and not well thought out yet. all of this stuff is super rough and not well thought out yet. i'm just checking in so we have some stuff to work with for the sprint tonight.
author dmcc
date Tue, 10 Jun 2003 10:31:57 +0000
parents ec82e1eea3c8
children 0c619695d6c6
files flax/Node.py flax/Timeline.py
diffstat 2 files changed, 26 insertions(+), 122 deletions(-) [+]
line wrap: on
line diff
--- a/flax/Node.py	Sun May 25 16:25:35 2003 +0000
+++ b/flax/Node.py	Tue Jun 10 10:31:57 2003 +0000
@@ -6,7 +6,7 @@
 class NodeType:
     def __init__(self, iports=None, oports=None):
         make_attributes_from_args('iports', 'oports')
-    def process(self,iports,oports):
+    def process(self):
         pass
         # TODO: handle NoChange stuff
 
@@ -34,10 +34,10 @@
 class FadeNode(NodeType):
     """Provides a UI scaler to let you fade a value"""
     def __init__(self):
-        NodeType.__init__(self, iports={'in1' : Port(), 
-                                        'scale1' : Port()},
-                                oports={'out1' : Port()},
-    def process(self, iports, oports):
+        NodeType.__init__(self, iports={'in1' : Port, 
+                                        'scale1' : Port},
+                                oports={'out1' : Port},
+    def process(self, ports):
         ports.out1 = ports.in1 * ports.scale1 
 
 class FadeConstellation(Constellation):
@@ -75,106 +75,3 @@
       | out
       | 
     """
-
-Persistence
-node instance saves:
-    node name, id, and such
-    input ports:
-        any port details
-        what the port connects to
-    values:
-        maybe UI.Scale level
-        maybe group contents
-
-
-p=InputPort(node=self,minconns=1,maxconns=2) # an input port to this node
-p.connect(othernode)
-print p.connections()
-p.connect(yetanother)
-
-op=OutputPort(node=self) # an output port
-print op.connections() # lists all the nodes that call us an input node
-op.connect(n) # calls n.connect(self)
-
-
-
-        
-Ports
-    Port: "scalar"
-    MultiPort: "array of Port"
-    ^ all wrong
-
-    Ports II:
-        min/max number of connections
-           (failure to fit these numbers means port is "deactivated")
-        "Normal" ports are min=1, max=1
-        "Multiports" are min=0, max=None
-        "Binary" ports are min=2, max=2
-        oh yeah, there are two totally different types of ports
-
-        Input ports: min/max numbers of connections
-           store current connections
-        Output ports: nothing
-           store nothing!
-
-fake node persistence for subtract node
-
-<!-- "my subtract" is a unique id -->
-<!-- drew: there is no such thing as a subtract group -->
-<node name="my subtract" type="math.Add">
-  <inputs>
-    <port name="in1">
-       <noderef name="node I"/>
-       <noderef name="node II"/>
-    </port>
-  </inputs>
-  <state>
-  </state>
-    
-</node>
-
-
-<node name="the group" type="group">
-
-  <!-- all of the port names of the group are being made up right
-  here- a group has no preset inputs or outputs-->
-
-  <inputs>
-    <port name="group-in 1">
-      <noderef name="node5"/>
-      <noderef name="node6"/>
-    </port>
-  </inputs>
-  
-  <state>  
-    <children>
-      <noderef name="node3">
-        <connect localPort="in1" groupPort="group-in1"/>
-      </noderef>
-      <noderef name="node4">
-        <connect localPort="in1" groupPort="group-in1"/>
-        <connect localPort="out1" groupPort="theoutput"/>
-      </noderef>
-    </children>
-
-  </state>  
-</node>
-
-<node name="preset value" type="source.Scalar">
-  <!-- no inputs, node has output only -->
-  <state>
-    <value>8.3</value>
-
-    <minvalue>0</minvalue>
-    <maxvalue>100</maxvalue>
-    
-    <gui>
-      <slider res=".1" height="200" bgcolor="red"/>
-      <priority>very high</priority>
-      <xpos>395</xpos>
-      <ypos>21</ypos>
-    </gui>
-    
-  </state>
-
-</node>
--- a/flax/Timeline.py	Sun May 25 16:25:35 2003 +0000
+++ b/flax/Timeline.py	Tue Jun 10 10:31:57 2003 +0000
@@ -4,13 +4,10 @@
 from __future__ import division # "I'm sending you back to future!"
 
 """
-Changelog:
-Fri May 16 15:17:34 PDT 2003
-    Project started (roughly).
-
-Mon May 19 17:56:24 PDT 2003
-    Timeline is more or less working.  Still bugs with skipping
-    FunctionFrames at random times.
+Quote of the Build (from Ghostbusters II)
+Dana:  Okay, but after dinner, I don't want you putting any of your old cheap 
+       moves on me. 
+Peter: Ohhhh no! I've got all NEW cheap moves.
 
 Timeline idea
 =============
@@ -177,15 +174,17 @@
 class LoopFunction(FunctionFrame):
     def __call__(self, timeline, timedevent, node):
         timeline.set_time(0)
-        print 'looped!'
+        # print 'looped!'
 
 class DoubleTimeFunction(FunctionFrame):
     def __call__(self, timeline, timedevent, node):
         timeline.set_rate(2 * timeline.rate)
+        print 'doubled!', timeline.rate
 
 class HalfTimeFunction(FunctionFrame):
     def __call__(self, timeline, timedevent, node):
         timeline.set_rate(0.5 * timeline.rate)
+        print 'halved!', timeline.rate
 
 class TimedEvent:
     """Container for a Frame which includes a time that it occurs at,
@@ -326,6 +325,8 @@
         be included.  This is because this is used to find FunctionFrames
         and we assume that any function frames at the start point (which
         could be i or j) have been processed."""
+        return [e for e in self.events if e >= i and e <= j]
+
         if direction == FORWARD:
             return [e for e in self.events if e > i and e <= j]
         else:
@@ -416,8 +417,6 @@
             last_clock = clock_time
         diff = clock_time - last_clock
         new_time = (self.direction * self.rate * diff) + last_time
-        new_time = max(new_time, 0)
-        new_time = min(new_time, self.length())
         
         # update the time
         self.last_clock_time = clock_time
@@ -426,6 +425,7 @@
         # now, find out if we missed any functions
         if self.fn_track.has_events():
             lower_time, higher_time = last_time, new_time
+            if lower_time == higher_time: print "zarg!"
             if lower_time > higher_time:
                 lower_time, higher_time = higher_time, lower_time
             
@@ -436,6 +436,11 @@
                 # they better be FunctionFrames
                 event.frame(self, event, None) # the None should be a Node, 
                                                # but that part is coming later
+        
+        # now we make sure we're in bounds (we don't do this before, since it
+        # can cause us to skip events that are at boundaries.
+        self.current_time = max(self.current_time, 0)
+        self.current_time = min(self.current_time, self.length())
     def reverse_direction(self):
         """Reverses the direction of play for this node"""
         self.direction = self.direction * -1
@@ -475,18 +480,20 @@
         T(10, scene3, blender=smoove),
         T(15, scene2)) # last TimedEvent doesn't need a blender
 
-    if 1:
+    halver = HalfTimeFunction('1/2x')
+    doubler = DoubleTimeFunction('2x')
+    if 0:
         # bounce is semiworking
         bouncer = BounceFunction('boing')
-        halver = HalfTimeFunction('1/2x')
-        doubler = DoubleTimeFunction('2x')
         tl = Timeline([track1], [T(0, bouncer), 
                                  T(0, halver),
                                  T(15, bouncer),
                                  T(15, doubler)])
     else:
         looper = LoopFunction('loop1')
-        tl = Timeline([track1], [T(14, looper)])
+        tl = Timeline([track1], [T(0, doubler),
+                                 T(5, halver),
+                                 T(14, looper)])
     tl.play()
 
     import Tix