예제 #1
0
        public Main()
        {
            StartPosition = FormStartPosition.Manual;
            InitializeComponent();

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

            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();
            Tao.FreeGlut.Glut.glutInit();

            debugDraw       = new TestDebugDraw();
            debugDraw.Flags = DebugFlags.Shapes | DebugFlags.Joints | DebugFlags.CenterOfMasses;

            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
        }
예제 #2
0
파일: Main.cs 프로젝트: RubisetCie/box2c
        public Main()
        {
            StartPosition = FormStartPosition.Manual;
            InitializeComponent();

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

            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();
            Tao.FreeGlut.Glut.glutInit();

            debugDraw = new TestDebugDraw();
            debugDraw.Flags = DebugFlags.Shapes | DebugFlags.Joints | DebugFlags.CenterOfMasses;

            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
        }
예제 #3
0
        void UpdateDraw()
        {
            // Process events
            renderWindow.DispatchEvents();

            // Clear the window
            renderWindow.Clear();

            Gl.glClearColor((float)BackColor.R / 255.0f, (float)BackColor.G / 255.0f, (float)BackColor.B / 255.0f, 1);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();

            // Draw
            //test.m_world.DrawDebugData();

            //DrawTest();

            Gl.glBegin(Gl.GL_LINES);
            Gl.glColor4ub(0, 255, 0, 64);
            Gl.glVertex2f(0, 10);
            Gl.glVertex2f(0, -10);
            Gl.glColor4ub(255, 0, 0, 64);
            Gl.glVertex2f(10, 0);
            Gl.glVertex2f(-10, 0);
            Gl.glEnd();

            if (!_testing)
            {
                foreach (var x in WorldObject.Bodies)
                {
                    var xf = new Transform(x.Body.Position, new Mat22(x.Body.Angle));

                    foreach (var fixture in x.Fixtures)
                    {
                        ColorF color = new ColorF(0.9f, 0.7f, 0.7f);

                        if (SelectedNode.NodeType == SelectedNodeType.Body && x == SelectedNode.BodyNode)
                        {
                            color = new ColorF(1, 1, 0);
                        }
                        else if (HoverBody != null && x.Body == HoverBody.Body)
                        {
                            color = new ColorF(1, 0, 0);
                        }
                        else if (!x.Body.Active)
                        {
                            color = new ColorF(0.5f, 0.5f, 0.3f);
                        }
                        else if (x.Body.BodyType == BodyType.Static)
                        {
                            color = new ColorF(0.5f, 0.9f, 0.5f);
                        }
                        else if (x.Body.BodyType == BodyType.Kinematic)
                        {
                            color = new ColorF(0.5f, 0.5f, 0.9f);
                        }
                        else if (x.Body.Awake)
                        {
                            color = new ColorF(0.6f, 0.6f, 0.6f);
                        }

                        debugDraw.DrawShape(fixture.Fixture, xf, color);
                    }

                    debugDraw.DrawTransform(xf);
                }

                if (HoverBody != null && !string.IsNullOrEmpty(HoverBody.Name))
                {
                    Vec2 p = ConvertScreenToWorld(CursorPos.X, CursorPos.Y);
                    TestDebugDraw.DrawStringFollow(p.X, p.Y, HoverBody.Name);
                }

                /*foreach (var x in WorldObject.Joints)
                 * {
                 *      Vec2 a1 = Vec2.Empty, a2 = Vec2.Empty;
                 *
                 *      switch (x.Joint.JointType)
                 *      {
                 *      case JointType.Revolute:
                 *              a1 = ((RevoluteJointDef)x.Joint).LocalAnchorA;
                 *              a2 = ((RevoluteJointDef)x.Joint).LocalAnchorB;
                 *              break;
                 *      case JointType.Friction:
                 *              a1 = ((FrictionJointDef)x.Joint).LocalAnchorA;
                 *              a2 = ((FrictionJointDef)x.Joint).LocalAnchorB;
                 *              break;
                 *      case JointType.Line:
                 *              a1 = ((LineJointDef)x.Joint).LocalAnchorA;
                 *              a2 = ((LineJointDef)x.Joint).LocalAnchorB;
                 *              break;
                 *      case JointType.Prismatic:
                 *              a1 = ((PrismaticJointDef)x.Joint).LocalAnchorA;
                 *              a2 = ((PrismaticJointDef)x.Joint).LocalAnchorB;
                 *              break;
                 *      case JointType.Weld:
                 *              a1 = ((WeldJointDef)x.Joint).LocalAnchorA;
                 *              a2 = ((WeldJointDef)x.Joint).LocalAnchorB;
                 *              break;
                 *      }
                 *      debugDraw.DrawJoint(x, a1, a2, WorldObject.Bodies[x.BodyAIndex].Body, WorldObject.Bodies[x.BodyBIndex].Body);
                 * }*/
            }
            else
            {
                _world.DrawDebugData();
            }

            renderWindow.Display();
        }