Exemplo n.º 1
0
        public Main()
        {
            StartPosition = FormStartPosition.Manual;
            InitializeComponent();

            Tao.FreeGlut.Glut.glutInit();
            //OnGLResize(_glcontrol.Width, _glcontrol.Height);

            simulationThread = new Thread(SimulationLoop);

            Text = "Box2CS Testbed - Box2D version " + Box2DVersion.Version.ToString();

            testIndex     = b2Math.b2Clamp(testIndex, 0, entries.Entries.Count - 1);
            testSelection = testIndex;

            entry = entries.Entries[testIndex];
            test  = entry.Construct();

            foreach (var e in entries.Entries)
            {
                comboBox1.Items.Add(e.Name);
            }

            comboBox1.SelectedIndex         = 0;
            comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);

            numericUpDown1.Value = TestSettings.velocityIterations;
            numericUpDown2.Value = TestSettings.positionIterations;
            numericUpDown3.Value = (decimal)TestSettings.hz;

            renderWindow                      = new RenderWindow(panel1.Handle, new ContextSettings(32, 0, 12));
            renderWindow.Resized             += new EventHandler <SizeEventArgs>(render_Resized);
            renderWindow.MouseButtonPressed  += new EventHandler <MouseButtonEventArgs>(renderWindow_MouseButtonPressed);
            renderWindow.MouseButtonReleased += new EventHandler <MouseButtonEventArgs>(renderWindow_MouseButtonReleased);
            renderWindow.MouseMoved          += new EventHandler <MouseMoveEventArgs>(renderWindow_MouseMoved);
            renderWindow.KeyPressed          += new EventHandler <SFML.Window.KeyEventArgs>(renderWindow_KeyPressed);
            renderWindow.KeyReleased         += new EventHandler <SFML.Window.KeyEventArgs>(renderWindow_KeyReleased);
            renderWindow.Show(true);

            OnGLResize((int)renderWindow.Width, (int)renderWindow.Height);

            updateDraw = UpdateDraw;

            simulationThread.Start();
        }
Exemplo n.º 2
0
        void Enumerate()
        {
            foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
            {
                if (type.BaseType == typeof(Test))
                {
                    TestEntry newEntry = new TestEntry();
                    newEntry.Type = type;
                    newEntry.Name = type.Name;
                    _entries.Add(newEntry);
                }
            }

            _entries.Sort(delegate(TestEntry t1, TestEntry t2)
            {
                return(t1.Name.CompareTo(t2.Name));
            });
        }
Exemplo n.º 3
0
        static void SimulationLoop()
        {
            Vec2 oldCenter = settings.viewCenter;

            settings.hz = settingsHz;
            test.Step(settings);

            test.DrawTitle(entry.name);

            if (testSelection != testIndex)
            {
                testIndex = testSelection;
                entry     = g_testEntries[testIndex];
                test      = entry.createFcn();
                viewZoom  = 12.0f;
                camera.SetZoom(viewZoom);
                settings.viewCenter.Set(0.0f, 20.0f);
            }
        }
Exemplo n.º 4
0
        void Simulate()
        {
            if (test != null)
            {
                if (TestSettings.restart)
                {
                    OnGLRestart();
                    TestSettings.restart = false;
                }

                sw.Reset();
                TestSettings.hz = settingsHz;
                test.Step();
                sw.Stop();
                _ts = sw.ElapsedMilliseconds;

                if (_ts < _min)
                {
                    _min = _ts;
                }
                if (_ts > _max)
                {
                    _max = _ts;
                }

                _ts_b2   = b2world_getelapsed();
                _ts_max_ = b2world_getmax();
                _ts_min_ = b2world_getmin();

                if (testSelection != testIndex)
                {
                    testIndex = testSelection;
                    entry     = entries.Entries[testIndex];
                    test.Dispose();
                    test       = entry.Construct();
                    viewZoom   = 1.0f;
                    viewCenter = new Vec2(0.0f, 20.0f);
                    OnGLResize(width, height);
                }
            }
        }
Exemplo n.º 5
0
        void Enumerate()
        {
            foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
            {
                if (type.BaseType == typeof(Test))
                {
                    TestEntry newEntry = new TestEntry();
                    newEntry.Type = type;
                    newEntry.Name = type.Name;
                    _entries.Add(newEntry);
                }
            }

            _entries.Sort(delegate(TestEntry t1, TestEntry t2)
            {
                return t1.Name.CompareTo(t2.Name);
            });
        }
Exemplo n.º 6
0
 public void AddTest(TestEntry test)
 {
     //TestEntries.Add(test);
 }
Exemplo n.º 7
0
 static void Restart()
 {
     entry = g_testEntries[testIndex];
     test  = entry.createFcn();
 }
Exemplo n.º 8
0
        public static void Main(string[] args)
        {
            g_testEntries = AllTests.GetTests();
            testCount     = g_testEntries.Count();

            testIndex     = Math.Max(0, Math.Min(testIndex, testCount - 1));
            testSelection = testIndex;

            entry = g_testEntries[testIndex];
            test  = entry.createFcn();

            GraphicsManager.SetWindowState(OpenTK.WindowState.Maximized);
            string title = String.Format("Box2D Version {0}.{1}.{2}", Settings._version.major, Settings._version.minor, Settings._version.revision);

            GraphicsManager.SetTitle(title);

            camera           = new Camera2D();
            camera.OnRender += SimulationLoop;

            camera.SetZoom(12);
            camera.CenterOnTarget(true);
            camera.SetLocation(0, 0);

            GraphicsManager.Update += new GraphicsManager.Updater(GraphicsManager_Update);

            WindowControl glui = new WindowControl(MainCanvas.GetCanvas());

            glui.Dock = Gwen.Pos.Left;

            Label text = new Label(glui);

            text.Text = "Tests";
            text.SetPosition(10, 10);

            testList              = new ListBox(glui);
            testList.RowSelected += delegate(Base sender, ItemSelectedEventArgs tlargs) {
                testSelection = testList.SelectedRowIndex;
            };
            foreach (TestEntry e in g_testEntries)
            {
                testList.AddRow(e.name, "", e);
            }
            testList.SelectedRowIndex = testSelection;
            testList.SetPosition(10, 30);
            testList.SetSize(170, 180);

            //glui.add_separator();
            Base SettingsBox = new Base(glui);

            SettingsBox.SetSize(200, 185);
            SettingsBox.SetPosition(0, 250);
            {
                NumericUpDown spinner = new NumericUpDown(SettingsBox);
                spinner.Text          = "Vel Iters";
                spinner.Min           = 1;
                spinner.Max           = 500;
                spinner.ValueChanged += delegate(Base sender, EventArgs vcargs) {
                    settings.velocityIterations = (int)spinner.Value;
                };
                spinner.Value = settings.velocityIterations;
                spinner.SetPosition(10, 10);

                NumericUpDown posSpinner = new NumericUpDown(SettingsBox);
                posSpinner.Min           = 0;
                posSpinner.Max           = 100;
                posSpinner.Text          = "Pos Iters";
                posSpinner.ValueChanged += delegate(Base sender, EventArgs psargs) {
                    settings.positionIterations = (int)posSpinner.Value;
                };
                posSpinner.Value = settings.positionIterations;
                posSpinner.SetPosition(10, 35);

                NumericUpDown hertzSpinner = new NumericUpDown(SettingsBox);
                hertzSpinner.Text          = "Hertz";
                hertzSpinner.Min           = 5;
                hertzSpinner.Max           = 200;
                hertzSpinner.ValueChanged += delegate(Base sender, EventArgs hargs) {
                    settingsHz = hertzSpinner.Value;
                };
                hertzSpinner.Value = settingsHz;
                hertzSpinner.SetPosition(10, 60);

                LabeledCheckBox scb = new LabeledCheckBox(SettingsBox);
                scb.Text          = "Sleep";
                scb.CheckChanged += delegate(Base sender, EventArgs argsscb) {
                    settings.enableSleep = scb.IsChecked;
                };
                scb.IsChecked = settings.enableSleep;
                scb.SetPosition(10, 85);

                LabeledCheckBox wsu = new LabeledCheckBox(SettingsBox);
                wsu.Text          = "Warm Starting";
                wsu.CheckChanged += delegate(Base sender, EventArgs argsscb) {
                    settings.enableWarmStarting = wsu.IsChecked;
                };
                wsu.IsChecked = settings.enableWarmStarting;
                wsu.SetPosition(10, 110);

                LabeledCheckBox toi = new LabeledCheckBox(SettingsBox);
                toi.Text          = "Time of Impact";
                toi.CheckChanged += delegate(Base sender, EventArgs argsscb) {
                    settings.enableContinuous = toi.IsChecked;
                };
                toi.IsChecked = settings.enableContinuous;
                toi.SetPosition(10, 135);

                LabeledCheckBox ssb = new LabeledCheckBox(SettingsBox);
                ssb.Text          = "Sub-Stepping";
                ssb.CheckChanged += delegate(Base sender, EventArgs argsscb) {
                    settings.enableSubStepping = ssb.IsChecked;
                };
                ssb.IsChecked = settings.enableSubStepping;
                ssb.SetPosition(10, 160);
            }

            Base drawPanel = new Base(glui);

            drawPanel.Dock = Gwen.Pos.Bottom;
            drawPanel.SetSize(200, 225);
            {
                LabeledCheckBox cbShapes = new LabeledCheckBox(drawPanel);
                cbShapes.Text          = "Shapes";
                cbShapes.IsChecked     = settings.drawShapes;
                cbShapes.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawShapes = cbShapes.IsChecked;
                };
                cbShapes.SetPosition(10, 10);



                //glui.add_checkbox_to_panel(drawPanel, "Joints", &settings.drawJoints);
                LabeledCheckBox cbJoints = new LabeledCheckBox(drawPanel);
                cbJoints.Text          = "Joints";
                cbJoints.IsChecked     = settings.drawJoints;
                cbJoints.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawJoints = cbJoints.IsChecked;
                };
                cbJoints.SetPosition(10, 30);



                //glui.add_checkbox_to_panel(drawPanel, "AABBs", &settings.drawAABBs);
                LabeledCheckBox cbAABBs = new LabeledCheckBox(drawPanel);
                cbAABBs.Text          = "AABBs";
                cbAABBs.IsChecked     = settings.drawAABBs;
                cbAABBs.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawAABBs = cbAABBs.IsChecked;
                };
                cbAABBs.SetPosition(10, 50);



                //glui.add_checkbox_to_panel(drawPanel, "Contact Points", &settings.drawContactPoints);
                LabeledCheckBox cbPoints = new LabeledCheckBox(drawPanel);
                cbPoints.Text          = "Contact Points";
                cbPoints.IsChecked     = settings.drawContactPoints;
                cbPoints.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawContactPoints = cbPoints.IsChecked;
                };
                cbPoints.SetPosition(10, 70);



                //glui.add_checkbox_to_panel(drawPanel, "Contact Normals", &settings.drawContactNormals);
                LabeledCheckBox cbNormals = new LabeledCheckBox(drawPanel);
                cbNormals.Text          = "Contact Normals";
                cbNormals.IsChecked     = settings.drawContactNormals;
                cbNormals.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawContactNormals = cbNormals.IsChecked;
                };
                cbNormals.SetPosition(10, 90);



                //glui.add_checkbox_to_panel(drawPanel, "Contact Impulses", &settings.drawContactImpulse);
                LabeledCheckBox cbImpulses = new LabeledCheckBox(drawPanel);
                cbImpulses.Text          = "Contact Impulses";
                cbImpulses.IsChecked     = settings.drawContactImpulse;
                cbImpulses.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawContactImpulse = cbImpulses.IsChecked;
                };
                cbImpulses.SetPosition(10, 110);



                //glui.add_checkbox_to_panel(drawPanel, "Friction Impulses", &settings.drawFrictionImpulse);
                LabeledCheckBox cbFriction = new LabeledCheckBox(drawPanel);
                cbFriction.Text          = "Friction Impulses";
                cbFriction.IsChecked     = settings.drawFrictionImpulse;
                cbFriction.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawFrictionImpulse = cbFriction.IsChecked;
                };
                cbFriction.SetPosition(10, 130);



                //glui.add_checkbox_to_panel(drawPanel, "Center of Masses", &settings.drawCOMs);
                LabeledCheckBox cbMasses = new LabeledCheckBox(drawPanel);
                cbMasses.Text          = "Center of Masses";
                cbMasses.IsChecked     = settings.drawCOMs;
                cbMasses.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawCOMs = cbMasses.IsChecked;
                };
                cbMasses.SetPosition(10, 150);



                //glui.add_checkbox_to_panel(drawPanel, "Statistics", &settings.drawStats);
                LabeledCheckBox cbStatistics = new LabeledCheckBox(drawPanel);
                cbStatistics.Text          = "Statistics";
                cbStatistics.IsChecked     = settings.drawStats;
                cbStatistics.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawStats = cbStatistics.IsChecked;
                };
                cbStatistics.SetPosition(10, 170);



                //glui.add_checkbox_to_panel(drawPanel, "Profile", &settings.drawProfile);
                LabeledCheckBox cbProfile = new LabeledCheckBox(drawPanel);
                cbProfile.Text          = "Profile";
                cbProfile.IsChecked     = settings.drawProfile;
                cbProfile.CheckChanged += delegate(Base cbshapes, EventArgs eacbshapes) {
                    settings.drawProfile = cbProfile.IsChecked;
                };
                cbProfile.SetPosition(10, 190);
            }


            Base Buttons = new Base(glui);

            Buttons.Dock   = Gwen.Pos.Bottom;
            Buttons.Height = 100;
            {
                Button btnPause = new Button(Buttons);
                btnPause.Text     = "Pause";
                btnPause.IsToggle = true;
                btnPause.SetPosition(10, 10);
                btnPause.ToggleState = settings.pause;
                btnPause.Clicked    += delegate(Base sender, ClickedEventArgs evargs) {
                    settings.pause = btnPause.ToggleState;
                };

                Button btnSS = new Button(Buttons);
                btnSS.Text = "Single Step";
                btnSS.SetPosition(10, 40);
                btnSS.Clicked += delegate(Base sender, ClickedEventArgs evargs) {
                    SingleStep();
                };

                Button btnRestart = new Button(Buttons);
                btnRestart.Text = "Restart";
                btnRestart.SetPosition(10, 70);
                btnRestart.Clicked += delegate(Base sender, ClickedEventArgs evargs) {
                    Restart();
                };
            }

            glui.SetSize(200, 300);
            GraphicsManager.Start();
        }