public SimulatorVisualizer(string experimentName,string genome)
        {
            frame = new CoordinateFrame(0.0f, 0.0f, 5.0f, 0.0f);

			ExperimentWrapper wr = ExperimentWrapper.load(experimentName);

            experiment = wr.experiment;
			if(genome!=null) {
			 experiment.loadGenome(genome);
			}
			
            experiment.initialize();
			
			
			frame.syncFromEnvironment(experiment.environment);

            selected_POI = -1;
            bDrawFOV = false;
            bDrawFOV = false;
            bDrawLabel = true;
            displayAOIRectangle = false;
            displayEvolution = true;

            bEvolve = false;                    //by default we are not evolving, just displaying the CurrentEnvironment
            drawMode = drawModes.selectMode;    //default mode is selecting and moving walls
            selectMode = selectModes.dragMode;

            display_tempwall = false;           //no temporary wall exists at creation
            display_snap = false;               //we have nothing to snap to at creation

            InitializeComponent();

            this.Text = "MultiAgent-HyperSharpNEAT Simulator - " + experimentName;
            //set up double buffering
            this.SetStyle(
              ControlStyles.AllPaintingInWmPaint |
              ControlStyles.UserPaint |
              ControlStyles.DoubleBuffer, true);
        }
        private void MouseDownHandler(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                selectMode = selectModes.dragMode;
            if (e.Button == MouseButtons.Right)
                selectMode = selectModes.rotateMode;
            if (e.Button == MouseButtons.Middle)
                selectMode = selectModes.scaleMode;

            if (drawMode == drawModes.selectMode)
            {

                if (selected_robot != null)
                {
                    bSelected_robot = true;
                    display_snap = false;
                    x1 = e.X;
                    y1 = e.Y;
                }
                else if (selected_wall != null)
                {
                    bSelected_wall = true;
                    display_snap = false;
                    x1 = e.X;
					y1 = e.Y;
                }
				else {
					bDragDisplay=true;
					x1 = e.X;
					y1 = e.Y;
				}
				
		
            }

            if (drawMode == drawModes.wallMode)
            {

                //try to avert some of the menu clicking business
                if (e.Y > 20)
                {

                    x1 = e.X;
                    y1 = e.Y;

                    if (display_snap)
                    {
                        x1 = snapx;
                        y1 = snapy;
                    }

                    display_tempwall = true;
                }
            }

            if (drawMode == drawModes.AOIMode)
            {
				float ox,oy;
				frame.convertFromDisplay(e.X,e.Y,out ox, out oy);
                experiment.environment.AOIRectangle = new Rectangle((int)ox,(int)oy, (int)ox, (int)oy);
                displayAOIRectangle = true;

            }
        }