def __init__(self, renderWindow, camera, sceneManager, cegui):#, ind_nodes):
        sf.FrameListener.__init__(self, renderWindow, camera, True, True)
        OIS.MouseListener.__init__(self)
        OIS.KeyListener.__init__(self)

        self.text_overlays = []
        self.toggle = 0
        self.mouse_down = False

        self.cam_node = camera.parentSceneNode.parentSceneNode
        self.sceneManager = sceneManager
        self.cegui = cegui

        #curstudy = 'delta_tree_character3d.yml'
        curstudy = 'tree_character3d.yml'
        l = 7
        ga = evolve.init_iga({'app_name': curstudy, 'geomNodes': l})
        self.genomes = ga.draw()
        self.ga = ga


        ind_nodes = []
        for i in range(len(self.genomes)):
            ind_node = sceneManager.getRootSceneNode().createChildSceneNode('Individual%d' % i)
            ind_node.position = (0, 0, 0)

            sep_node = sceneManager.getRootSceneNode().createChildSceneNode('Separator%d' % i)
            sep_node.position = (i*SPACE, 400, i*SPACE)
            sep_node.setScale(0.5, 0.5, 0.5)

            ind_nodes.append(ind_node)

        self.ind_nodes = ind_nodes


        # Register as MouseListener (Basic tutorial 5)
        self.Mouse.setEventCallback(self)
        self.Keyboard.setEventCallback(self)

        self.rotate = 0.20
        self.move = MOVE

        self.currentObject = None
        self.raySceneQuery = None
        self.raySceneQuery = self.sceneManager.createRayQuery(ogre.Ray())


        self.num_keys = ['%d' % i for i in range(10)]
	def __init__(self):
		formatArray=GeomVertexArrayFormat()
		formatArray.addColumn(InternalName.make("drawFlag"), 1, Geom.NTUint8, Geom.COther)

		format=GeomVertexFormat(GeomVertexFormat.getV3n3cpt2())
		format.addArray(formatArray)
		self.format=GeomVertexFormat.registerFormat(format)

		bodydata=GeomVertexData("body vertices", format, Geom.UHStatic)

		self.barkTexture=loader.loadTexture("barkTexture.jpg")
		treeNodePath=NodePath("Tree Holder")
		makeFractalTree(bodydata,treeNodePath,Vec3(4,4,7))

		treeNodePath.setTexture(self.barkTexture,1)
		treeNodePath.reparentTo(render)

		self.accept("q", self.regenTree)
		self.accept("n", self.newPop)
		self.accept("w", self.addTree)
		self.accept("arrow_up", self.upIterations)
		self.accept("arrow_down", self.downIterations)
		self.accept("arrow_right", self.upCopies)
		self.accept("arrow_left", self.downCopies)

		[self.accept("%d" % i, self.selectBest, ['%d' % i]) for i in range(0,9)]

		self.numIterations=11
		self.numCopies=4
		
		
		self.upDownEvent = OnscreenText( 
 			 text="Up/Down: Increase/Decrease the number of Iteratations("+str(self.numIterations)+")",
     			 style=1, fg=(1,1,1,1), pos=(-1.3, 0.85),
			 align=TextNode.ALeft, scale = .05, mayChange=True)
		
		self.leftRightEvent = OnscreenText( 
 			 text="Left/Right: Increase/Decrease branching("+str(self.numCopies)+")",
     			 style=1, fg=(1,1,1,1), pos=(-1.3, 0.80),
			 align=TextNode.ALeft, scale = .05, mayChange=True)
		

                curstudy = 'speedtree.yml'
                ga = evolve.init_iga({'app_name': curstudy})
                self.genomes = ga.draw()
                self.ga = ga
                print 'genomes', self.genomes
    def keyPressed(self, evt):
        print 'pressed', self.Keyboard.getAsString(evt.key)

        if evt.key is OIS.KC_N:
            curstudy = 'character3d.yml'
            l = 6
            ga = evolve.init_iga({'app_name': curstudy, 'geomNodes': l})
            self.genomes = ga.draw()
            self.ga = ga

            self.newPop()

        elif evt.key is not OIS.KC_ESCAPE:
            best_selected = self.Keyboard.getAsString(evt.key)
            if self.ga and best_selected in self.num_keys:
                best_selected = int(best_selected)
                self.genomes = self.ga.web_step({'feedback': [best_selected]})
                self.newPop()
        return True
    def __init__(self, renderWindow, camera, sceneManager, cegui):#, ind_nodes):
        sf.FrameListener.__init__(self, renderWindow, camera, True, True)
        OIS.MouseListener.__init__(self)
        OIS.KeyListener.__init__(self)

        # initialized with garbage intentional
        self.peer_genomes = [0]
        self.toggle = 0
        self.mouse_down = False

        self.cam_node = camera.parentSceneNode.parentSceneNode
        self.sceneManager = sceneManager
        self.cegui = cegui

        # Register as MouseListener (Basic tutorial 5)
        self.Mouse.setEventCallback(self)
        self.Keyboard.setEventCallback(self)

        collab = False
        import sys
        if len(sys.argv) > 1:
            collab = True

        #curstudy = 'delta_tree_character3d.yml'
        curstudy = 'vertex_shader.yml'
        l = 7
        ga = evolve.init_iga({'app_name': curstudy, 'geomNodes': l, 'collaborate': collab})
        self.genomes = ga.draw()
        self.ga = ga

        j, vj, vi, offset = 0, 0, 0, SPACE * 4

        # begin animation stuff
        ogre.Animation.setDefaultInterpolationMode(ogre.Animation.IM_SPLINE)
        self.animationStates = []
        self.animationSpeeds = []

        # end animation stuff

        mesh = 'ninja.mesh'
        #mesh = 'robot.mesh'
        # create nodes to hold subset models and peers
        peer_nodes = []
        ind_nodes = []
        for i in range(len(self.genomes)):

            name = 'Node_%d_%d' % (i, (nextNum()))
            ent = sceneManager.createEntity(name, mesh)
            ent.setQueryFlags(self.OBJ_MASK)

            self.animationStates.append(ent.getAnimationState('Walk'))
            self.animationStates[-1].Enabled = True
            #self.animationSpeeds.append(ogre.Math.RangeRandom(0.5, 1.5))
            self.animationSpeeds.append(1.0)

            node = sceneManager.getRootSceneNode().createChildSceneNode('Individual%d' % i)
            node.attachObject(ent)
            #node.position = (vi*SPACE, vj*VSPACE, vi*SPACE)
            node.position = (vi*SPACE, vj*VSPACE, 0)
            # incremental diagonal placement
            #node.position = (vi*SPACE, vj*VSPACE, 0)
            node.yaw(-135)
            #node.yaw(-90)

            #sep_node = sceneManager.getRootSceneNode().createChildSceneNode('Separator%d' % i)
            #sep_node.position = (0,0,0)
            #sep_node.setScale(0.25, 0.25, 0.25)

            #ent = sceneManager.createEntity('Separator%d' %i, 'knot.mesh')
            #ent.setMaterialName('Examples/OgreLogo')
            #sep_node.attachObject(ent)
            #sep_node.setVisible(True)
            #sep_node.position = (vi*SPACE, vj*VSPACE + offset, vi*SPACE + offset)


            name = 'Peer_%d_%d' % (i, (nextNum()))
            ent = sceneManager.createEntity(name, mesh)
            ent.setQueryFlags(self.OBJ_MASK)

            self.animationStates.append(ent.getAnimationState('Walk'))
            self.animationStates[-1].Enabled = True
            self.animationSpeeds.append(ogre.Math.RangeRandom(0.5, 1.5))

            p_node = sceneManager.getRootSceneNode().createChildSceneNode('Peer%d' % i)
            p_node.attachObject(ent)
            #p_node.position = (vi*SPACE + offset, vj*VSPACE, vi*SPACE + offset)
            p_node.position = (vi*SPACE+offset, vj*VSPACE, 0)
            p_node.yaw(-135)
            #p_node.yaw(-180)
            p_node.setVisible(True)

            vi += 1
            j += 1
            if j % 3 == 0:
                vj -= 1
                vi = 0

            ind_nodes.append(node)
            peer_nodes.append(p_node)

        self.ind_nodes = ind_nodes
        self.peer_nodes = peer_nodes

        # add screen splitter
        split = sceneManager.getRootSceneNode().createChildSceneNode('ScreenSplit')
        ent = sceneManager.createEntity('SplitMesh', 'column.mesh')
        split.attachObject(ent)
        split.position = (3*SPACE, -SPACE*2, 0)
        split.setScale(0.25, 5.0, 0.25)


        self.pic_count = 0

        self.mesh_rotate = 0.

        self.rotate = 0.20
        self.move = MOVE

        self.currentObject = None

        self.best_selected = {'index': None, 'individual': None}
        self.peer_selected = {}

        self.raySceneQuery = None
        self.raySceneQuery = self.sceneManager.createRayQuery(ogre.Ray())


        self.num_keys = ['%d' % i for i in range(10)]

        self.all_online = False
        self.collaborate = False
    def initEntities(self):
        # load default entity, set texture and default configuration of mesh
        # then make copies to render
        ent = loader.loadModel("../mesh/nsplitninja")
        tex = loader.loadTexture('../mesh/textures/spacesky.jpg')
        ent.setTexGen(TextureStage.getDefault(), TexGenAttrib.MWorldPosition)
        ent.setTexture(tex)
        #ent.showBounds()
        # last coord is height
        ent.setPos(0, 0, 0)
        ent.setHpr(0, -90, 180)
        #ent.setScale(0.5, 0.5, 0.5)
        self.root_ent = ent

        scale_factor = 0.5
        pos_offset = 10
        ent_list = [ent.copyTo(NodePath('Individual')) for i in range(9)]
        self.entity_list = ent_list
        for i, entity in enumerate(ent_list):
            entity.reparentTo(render)
            entity.setPos(i*10, 0, 0)
            entity.setScale(scale_factor, scale_factor, scale_factor)

            #nodes = entity.findAllMatches('**/+GeomNode')
            #l = nodes.asList()
            #for path in nodes.asList():
            #    g_node = path.node()
            #    #ent.setScale(scale_factor, scale_factor, scale_factor)
            #    ent.setHpr(0,-90,180)
            #    mat = ent.getMat()
            #    #newCS = Mat4(   3, 0, 0, 0,
            #    #                0, 3, 0, 0,
            #    #                0, 0, 3, 0,
            #    #                0, 0, 0, 1)
            #    g_node.setTransform(TransformState.makeMat(mat))



        #scale_factor = 0.1
        #for i in range(9):
        #    place_holder = render.attachNewNode('ent-place-holder')
        #    place_holder.setPos(i*5, 0, 0)
        #    place_holder.setScale(i*scale_factor, i*scale_factor, i*scale_factor)
        #    ent.instanceTo(place_holder)
        #    nodes = place_holder.findAllMatches('**/+GeomNode')
        #    l = nodes.asList()
        #    if i == 4:
        #        for path in nodes.asList():
        #            g_node = path.node()
        #            newCS = Mat4(1,-0.3,0,0,
        #                            0,1,2,0,
        #                            0,0,1,0,
        #                            0,0,0,1)
        #            g_node.setTransform(TransformState.makeMat(newCS))
               

        nodes = ent.findAllMatches('**/+GeomNode')
        l = nodes.asList()

        curstudy = 'character3d.yml'
        ga = evolve.init_iga({'app_name': curstudy, 'geomNodes': len(l)})
        self.genomes = ga.draw()
        self.ga = ga
        self.newPop()