# super rough code # The magic value NoChange = "NoChange" class NodeType: def __init__(self, iports=None, oports=None): make_attributes_from_args('iports', 'oports') def process(self,iports,oports): pass # TODO: handle NoChange stuff class AddNode(NodeType): """Adds two nodes together""" def __init__(self): NodeType.__init__(self, iports={'in1' : Port, 'in2' : Port}, oports={'out1' : Port}) def process(self, ports): ports.out1 = ports.in1 + ports.in2 class SumNode(NodeType): """Adds any number of nodes together""" def __init__(self, empty_val=0): NodeType.__init__(self, iports={'in1' : MultiPort}, oports={'out1' : Port}) self.empty_val = 0 def process(self, ports): val = self.empty_val for p in ports.in1: val += p ports.out1 = val 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): ports.out1 = ports.in1 * ports.scale1 class FadeConstellation(Constellation): """This somehow describes the following: [ ] [ UI.Scale ] | | | in | scale | ____ / | | [ FadeNode ] | | out | [ ] Maybe this is a group (I like this more): | | in | FadeGroup - - - - - - - - - - - - -- - - | | | | [ UI.Scale ] | | | | | in | scale | | ____ / | | | | [ FadeNode ] | | | | out | | \ - - - - - - - - - - - -- - - / | | 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 8.3 0 100 very high 395 21