Exemple #1
0
        public Confined()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();

                // Floor
                shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                // Left wall
                shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(-10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Right wall
                shape.SetAsEdge(new Vec2(10.0f, 0.0f), new Vec2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Roof
                shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            m_world.Gravity = new Vec2(0.0f, 0.0f);
        }
Exemple #2
0
        private void CreateGroundAndWalls()
        {

            var grounDef = new BodyDef();
            grounDef.type = BodyType.Static;

            var groundFix = new FixtureDef();
            groundFix.restitution = 1.0f;
            groundFix.friction = 0.0f;
            groundFix.density = 0.0f;

            var groundShape = new PolygonShape();
            groundShape.SetAsEdge(new Vector2(0, 8), new Vector2(4.8f, 8.0f));

            var groundBody = world.CreateBody(grounDef);
            groundFix.shape = groundShape;
            groundBody.CreateFixture(groundFix);
            groundShape.SetAsEdge(new Vector2(0, 0), new Vector2(0f, 8.0f));

            var leftBody = world.CreateBody(grounDef);
            groundFix.shape = groundShape;
            leftBody.CreateFixture(groundFix);
            groundShape.SetAsEdge(new Vector2(4.8f, 0), new Vector2(4.8f, 8.0f));

            var rightBody = world.CreateBody(grounDef);
            groundFix.shape = groundShape;
            rightBody.CreateFixture(groundFix);
            groundShape.SetAsEdge(new Vector2(0, 0), new Vector2(4.8f, 0));

            var topBody = world.CreateBody(grounDef);
            groundFix.shape = groundShape;
            topBody.CreateFixture(groundFix);

        }
Exemple #3
0
        public Confined()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();

                // Floor
                shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                // Left wall
                shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(-10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Right wall
                shape.SetAsEdge(new Vec2(10.0f, 0.0f), new Vec2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Roof
                shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            m_world.Gravity = new Vec2(0.0f, 0.0f);
        }
Exemple #4
0
        VerticalStack()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0f);

                shape.SetAsEdge(new Vector2(20.0f, 0.0f), new Vector2(20.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            double[] xs = new double[5]
            {
                0.0f, -10.0f, -5.0f, 5.0f, 10.0f
            };

            for (int j = 0; j < (int)StackOptions.e_columnCount; ++j)
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 0.5f);

                FixtureDef fd = new FixtureDef();
                fd.shape    = shape;
                fd.density  = 1.0f;
                fd.friction = 0.3f;

                for (int i = 0; i < (int)StackOptions.e_rowCount; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;

                    int n = j * e_rowCount + i;
                    Debug.Assert(n < e_rowCount * e_columnCount);
                    _indices[n] = n;
                    bd.userData = _indices[n];

                    double x = 0.0f;
                    //double x = Rand.RandomFloat-0.02f, 0.02f);
                    //double x = i % 2 == 0 ? -0.025f : 0.025f;
                    bd.position = new Vector2(xs[j] + x, 0.752f + 1.54f * i);
                    Body body = _world.CreateBody(bd);

                    _bodies[n] = body;

                    body.CreateFixture(fd);
                }
            }

            _bullet = null;
        }
Exemple #5
0
        public Confined()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();

                // Floor
                shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                // Left wall
                shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(-10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Right wall
                shape.SetAsEdge(new Vector2(10.0f, 0.0f), new Vector2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Roof
                shape.SetAsEdge(new Vector2(-10.0f, 20.0f), new Vector2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            float       radius = 0.5f;
            CircleShape shape2 = new CircleShape();

            shape2._p      = Vector2.Zero;
            shape2._radius = radius;

            FixtureDef fd = new FixtureDef();

            fd.shape    = shape2;
            fd.density  = 1.0f;
            fd.friction = 0.1f;

            for (int j = 0; j < e_columnCount; ++j)
            {
                for (int i = 0; i < e_rowCount; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type     = BodyType.Dynamic;
                    bd.position = new Vector2(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius);
                    Body body = _world.CreateBody(bd);

                    body.CreateFixture(fd);
                }
            }

            _world.Gravity = new Vector2(0.0f, 0.0f);
        }
Exemple #6
0
        VerticalStack()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                shape.SetAsEdge(new Vector2(20.0f, 0.0f), new Vector2(20.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            float[] xs = new float[5]
            {0.0f, -10.0f, -5.0f, 5.0f, 10.0f};

            for (int j = 0; j < (int)StackOptions.e_columnCount; ++j)
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 0.5f);

                FixtureDef fd = new FixtureDef();
                fd.shape = shape;
                fd.density = 1.0f;
                fd.friction = 0.3f;

                for (int i = 0; i < (int)StackOptions.e_rowCount; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;

                    int n = j * e_rowCount + i;
                    Debug.Assert(n < e_rowCount * e_columnCount);
                    _indices[n] = n;
                    bd.userData = _indices[n];

                    float x = 0.0f;
                    //float x = Rand.RandomFloat-0.02f, 0.02f);
                    //float x = i % 2 == 0 ? -0.025f : 0.025f;
                    bd.position = new Vector2(xs[j] + x, 0.752f + 1.54f * i);
                    Body body = _world.CreateBody(bd);

                    _bodies[n] = body;

                    body.CreateFixture(fd);
                }
            }

            _bullet = null;
        }
Exemple #7
0
        public Confined()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();

                // Floor
                shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                // Left wall
                shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(-10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Right wall
                shape.SetAsEdge(new Vector2(10.0f, 0.0f), new Vector2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);

                // Roof
                shape.SetAsEdge(new Vector2(-10.0f, 20.0f), new Vector2(10.0f, 20.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            float radius = 0.5f;
            CircleShape shape2 = new CircleShape();
            shape2._p = Vector2.Zero;
            shape2._radius = radius;

            FixtureDef fd = new FixtureDef();
            fd.shape = shape2;
            fd.density = 1.0f;
            fd.friction = 0.1f;

            for (int j = 0; j < e_columnCount; ++j)
            {
                for (int i = 0; i < e_rowCount; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;
                    bd.position = new Vector2(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius);
                    Body body = _world.CreateBody(bd);

                    body.CreateFixture(fd);
                }
            }

            _world.Gravity = new Vector2(0.0f, 0.0f);
        }
Exemple #8
0
        private void AddGround()
        {
            //Window dimensions
            int windowWidth  = Window.ClientBounds.Width;
            int windowHeight = Window.ClientBounds.Height;

            //Ground body definition
            BodyDef bd     = new BodyDef();
            Body    ground = physicsWorld.CreateBody(bd);

            //Add line fixture to ground body
            PolygonShape bottomBounds = new PolygonShape();

            bottomBounds.SetAsEdge(new Vector2(0.0f, windowHeight - 25), new Vector2(windowWidth, windowHeight - 25));
            PolygonShape topBounds = new PolygonShape();

            topBounds.SetAsEdge(new Vector2(0.0f, 0.0f), new Vector2(windowWidth, 0.0f));
            PolygonShape leftBounds = new PolygonShape();

            leftBounds.SetAsEdge(new Vector2(25.0f, 0.0f), new Vector2(25.0f, windowHeight));
            PolygonShape rightBounds = new PolygonShape();

            rightBounds.SetAsEdge(new Vector2(windowWidth - 25, 0.0f), new Vector2(windowWidth - 25, windowHeight));

            ground.CreateFixture(bottomBounds, 10.0f);
            ground.CreateFixture(topBounds, 10.0f);
            ground.CreateFixture(leftBounds, 10.0f);
            ground.CreateFixture(rightBounds, 10.0f);
        }
Exemple #9
0
        public ShapeEditing()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0);
            }

            BodyDef bodydef = new BodyDef();

            bodydef.type     = BodyType.Dynamic;
            bodydef.position = new Vector2(0.0, 10.0);
            _body            = _world.CreateBody(bodydef);

            PolygonShape shape2 = new PolygonShape();

            shape2.SetAsBox(4.0f, 4.0f, new Vector2(0.0f, 0.0f), 0.0f);
            //NoNeed	_fixture1 =
            _body.CreateFixture(shape2, 10.0);

            _fixture2 = null;
        }
Exemple #10
0
        public SphereStack()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.0f;

                for (int i = 0; i < e_count; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;
                    bd.position = new Vector2(0.0f, 4.0f + 3.0f * i);

                    _bodies[i] = _world.CreateBody(bd);

                    _bodies[i].CreateFixture(shape, 1.0f);

                    //_bodies[i].SetLinearVelocity(new Vector2(0.0f, -100.0f));
                }
            }
        }
Exemple #11
0
        public Breakable()
        {
            // Ground body
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Breakable dynamic body
            {
                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 40.0f);
                bd.angle = 0.25f * Settings.b2_pi;
                _body1 = _world.CreateBody(bd);

                _shape1 = new PolygonShape();
                _shape1.SetAsBox(0.5f, 0.5f, new Vector2(-0.5f, 0.0f), 0.0f);
                _piece1 = _body1.CreateFixture(_shape1, 1.0f);

                _shape2 = new PolygonShape();
                _shape2.SetAsBox(0.5f, 0.5f, new Vector2(0.5f, 0.0f), 0.0f);
                _piece2 = _body1.CreateFixture(_shape2, 1.0f);
            }

            _break = false;
            _broke = false;
        }
Exemple #12
0
        public SphereStack()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();

                for (int i = 0; i < e_count; ++i)
                {
                    shape.Radius = Rand.RandomFloat(0.5f, 0.5f);
                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(0.0f, 4.0f + 3.0f * i);

                    m_bodies[i] = m_world.CreateBody(bd);

                    m_bodies[i].CreateFixture(shape, 1.0f);
                }
            }
        }
Exemple #13
0
        public LineJoint()
        {
            Body ground = null;
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));

                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 2.0f);

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 7.0f);
                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 1.0f);

                LineJointDef jd = new LineJointDef();
                Vector2 axis = new Vector2(2.0f, 1.0f);
                axis.Normalize();
                jd.Initialize(ground, body, new Vector2(0.0f, 8.5f), axis);
                jd.motorSpeed = 0.0f;
                jd.maxMotorForce = 100.0f;
                jd.enableMotor = true;
                jd.lowerTranslation = -4.0f;
                jd.upperTranslation = 4.0f;
                jd.enableLimit = true;
                _world.CreateJoint(jd);
            }
        }
Exemple #14
0
        public Breakable()
        {
            // Ground body
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Breakable dynamic body
            {
                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 40.0f);
                bd.angle    = 0.25f * Settings.b2_pi;
                _body1      = _world.CreateBody(bd);

                _shape1 = new PolygonShape();
                _shape1.SetAsBox(0.5f, 0.5f, new Vector2(-0.5f, 0.0f), 0.0f);
                _piece1 = _body1.CreateFixture(_shape1, 1.0f);

                _shape2 = new PolygonShape();
                _shape2.SetAsBox(0.5f, 0.5f, new Vector2(0.5f, 0.0f), 0.0f);
                _piece2 = _body1.CreateFixture(_shape2, 1.0f);
            }

            _break = false;
            _broke = false;
        }
Exemple #15
0
        public SphereStack()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.0f;

                for (int i = 0; i < e_count; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type     = BodyType.Dynamic;
                    bd.position = new Vector2(0.0, 4.0 + 3.0 * i);

                    _bodies[i] = _world.CreateBody(bd);

                    _bodies[i].CreateFixture(shape, 1.0);

                    //_bodies[i].SetLinearVelocity(new Vector2(0.0, -100.0));
                }
            }
        }
Exemple #16
0
        public SphereStack()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();

                for (int i = 0; i < e_count; ++i)
                {
                    shape.Radius = Rand.RandomFloat(0.5f, 0.5f);
                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(0.0f, 4.0f + 3.0f * i);

                    m_bodies[i] = m_world.CreateBody(bd);

                    m_bodies[i].CreateFixture(shape, 1.0f);
                }
            }
        }
Exemple #17
0
        public LineJoint()
        {
            Body ground = null;
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));

                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 2.0f);

                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 7.0f);
                Body body = m_world.CreateBody(bd);
                body.CreateFixture(shape, 1.0f);

                LineJointDef jd   = new LineJointDef();
                Vec2         axis = new Vec2(2.0f, 1.0f);
                axis.Normalize();
                jd.Initialize(ground, body, new Vec2(0.0f, 8.5f), axis);
                jd.MotorSpeed       = 0.0f;
                jd.MaxMotorForce    = 100.0f;
                jd.EnableMotor      = true;
                jd.LowerTranslation = -4.0f;
                jd.UpperTranslation = 4.0f;
                jd.EnableLimit      = true;
                m_world.CreateJoint(jd);
            }
        }
Exemple #18
0
        public LineJoint()
        {
            Body ground = null;
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));

                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5, 2.0);

                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(0.0, 7.0);
                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 1.0);

                LineJointDef jd   = new LineJointDef();
                Vector2      axis = new Vector2(2.0, 1.0);
                axis.Normalize();
                jd.Initialize(ground, body, new Vector2(0.0, 8.5), axis);
                jd.motorSpeed       = 0.0;
                jd.maxMotorForce    = 100.0;
                jd.enableMotor      = true;
                jd.lowerTranslation = -4.0;
                jd.upperTranslation = 4.0;
                jd.enableLimit      = true;
                _world.CreateJoint(jd);
            }
        }
        VaryingRestitution()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.0f;

                FixtureDef fd = new FixtureDef();
                fd.shape = shape;
                fd.density = 1.0f;

                float[] restitution = new float[7] {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f};

                for (int i = 0; i < 7; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;
                    bd.position = new Vector2(-10.0f + 3.0f * i, 20.0f);

                    Body body = _world.CreateBody(bd);

                    fd.restitution = restitution[i];
                    body.CreateFixture(fd);
                }
            }
        }
        public VaryingRestitution()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape.Radius = 1.0f;

                FixtureDef fd = new FixtureDef();
                fd.Shape = shape;
                fd.Density = 1.0f;

                float[] restitution = {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f};

                for (int i = 0; i < 7; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f);

                    Body body = m_world.CreateBody(bd);

                    fd.Restitution = restitution[i];
                    fd.UserData = i;
                    body.CreateFixture(fd);
                }
            }
        }
Exemple #21
0
        public VaryingRestitution()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape.Radius = 1.0f;

                FixtureDef fd = new FixtureDef();
                fd.Shape   = shape;
                fd.Density = 1.0f;

                float[] restitution = { 0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f };

                for (int i = 0; i < 7; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f);

                    Body body = m_world.CreateBody(bd);

                    fd.Restitution = restitution[i];
                    fd.UserData    = i;
                    body.CreateFixture(fd);
                }
            }
        }
Exemple #22
0
        public Revolute()
        {
            System.Collections.Generic.List <JointDef> joints = new System.Collections.Generic.List <JointDef>();

            Body ground = null;

            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape.Radius = 0.5f;

                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;

                RevoluteJointDef rjd = new RevoluteJointDef();

                bd.Position = new Vec2(0.0f, 20.0f);
                Body body = m_world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                float w = 100.0f;
                body.AngularVelocity = w;
                body.LinearVelocity  = new Vec2(-8.0f * w, 0.0f);

                rjd.Initialize(ground, body, new Vec2(0.0f, 12.0f));
                rjd.MotorSpeed       = 1.0f * (float)Math.PI;
                rjd.MaxMotorTorque   = 10000.0f;
                rjd.EnableMotor      = false;
                rjd.LowerAngle       = -0.25f * (float)Math.PI;
                rjd.UpperAngle       = 0.5f * (float)Math.PI;
                rjd.EnableLimit      = true;
                rjd.CollideConnected = true;

                m_joint = (RevoluteJoint)m_world.CreateJoint(rjd);
                joints.Add(rjd);
            }

            using (System.IO.FileStream fs = new System.IO.FileStream("out.xml", System.IO.FileMode.Create))
            {
                var serializer = Box2CS.Serialize.WorldSerializer.SerializeWorld(m_world, new Box2CS.Serialize.WorldXmlSerializer());

                foreach (var j in joints)
                {
                    serializer.AddJoint(j);
                }

                serializer.Serialize(fs);
            }
        }
Exemple #23
0
        // Polygon versus 2-sided edge.
        /// <summary>
        ///     Collides the poly and edge using the specified manifold
        /// </summary>
        /// <param name="manifold">The manifold</param>
        /// <param name="polygon">The polygon</param>
        /// <param name="transformA">The transform</param>
        /// <param name="edge">The edge</param>
        /// <param name="transformB">The transform</param>
        public static void CollidePolyAndEdge(ref Manifold manifold, PolygonShape polygon, XForm transformA,
                                              EdgeShape edge, XForm transformB)
        {
            PolygonShape polygonB = new PolygonShape();

            polygonB.SetAsEdge(edge.Vertex1, edge.Vertex2);

            CollidePolygons(ref manifold, polygon, transformA, polygonB, transformB);
        }
Exemple #24
0
        public ConfinedBullet()
        {
            {
                BodyDef bd = new BodyDef();
                {
                    Body ground = m_world.CreateBody(bd);

                    PolygonShape shape = new PolygonShape();
                    {
                        shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f));
                        ground.CreateFixture(shape, 0.0f);
                    }

                    ground = m_world.CreateBody(bd);

                    shape = new PolygonShape();
                    {
                        shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f));
                        ground.CreateFixture(shape, 0.0f);
                    }

                    ground = m_world.CreateBody(bd);

                    shape = new PolygonShape();
                    {
                        shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(-10.0f, 0.0f));
                        ground.CreateFixture(shape, 0.0f);
                    }

                    ground = m_world.CreateBody(bd);

                    shape = new PolygonShape();
                    {
                        shape.SetAsEdge(new Vec2(10.0f, 20.0f), new Vec2(10.0f, 0.0f));
                        ground.CreateFixture(shape, 0.0f);
                    }
                }

                bd = new BodyDef();
                {
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(0, 10.0f);
                    {
                        PolygonShape bottom = new PolygonShape(1.5f, 0.15f);
                        PolygonShape left   = new PolygonShape(0.15f, 2.7f, new Vec2(-1.45f, 2.35f), 0.2f);
                        PolygonShape right  = new PolygonShape(0.15f, 2.7f, new Vec2(1.45f, 2.35f), -0.2f);

                        var body = m_world.CreateBody(bd);
                        body.IsBullet = true;
                        body.CreateFixture(new FixtureDef(bottom, 1.0f, 10, 0.1f));
                        body.CreateFixture(new FixtureDef(left, 1.0f, 10, 0.1f));
                        body.CreateFixture(new FixtureDef(right, 1.0f, 10, 0.1f));
                    }
                }
            }
        }
Exemple #25
0
        public Revolute()
        {
            System.Collections.Generic.List<JointDef> joints = new System.Collections.Generic.List<JointDef>();

            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape.Radius = 0.5f;

                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;

                RevoluteJointDef rjd = new RevoluteJointDef();

                bd.Position = new Vec2(0.0f, 20.0f);
                Body body = m_world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                float w = 100.0f;
                body.AngularVelocity = w;
                body.LinearVelocity = new Vec2(-8.0f * w, 0.0f);

                rjd.Initialize(ground, body, new Vec2(0.0f, 12.0f));
                rjd.MotorSpeed = 1.0f * (float)Math.PI;
                rjd.MaxMotorTorque = 10000.0f;
                rjd.EnableMotor = false;
                rjd.LowerAngle = -0.25f * (float)Math.PI;
                rjd.UpperAngle = 0.5f * (float)Math.PI;
                rjd.EnableLimit = true;
                rjd.CollideConnected = true;

                m_joint = (RevoluteJoint)m_world.CreateJoint(rjd);
                joints.Add(rjd);
            }

            using (System.IO.FileStream fs = new System.IO.FileStream("out.xml", System.IO.FileMode.Create))
            {
                var serializer = Box2CS.Serialize.WorldSerializer.SerializeWorld(m_world, new Box2CS.Serialize.WorldXmlSerializer());

                foreach (var j in joints)
                    serializer.AddJoint(j);

                serializer.Serialize(fs);
            }
        }
Exemple #26
0
        private void LoadGround()
        {
            BodyDef bd = new BodyDef();

            bd.type     = BodyType.Static;
            bd.position = Vector2.Zero;
            ground      = world.CreateBody(bd);

            Vector2[] vertices = new Vector2[4];
            vertices[0] = new Vector2(0, 0);
            vertices[1] = new Vector2(Width * TileWidth, 0);
            vertices[2] = new Vector2(Width * TileWidth, Height * TileHeight);
            vertices[3] = new Vector2(0, Height * TileHeight);

            PolygonShape shape = new PolygonShape();

            shape.SetAsEdge(vertices[0], vertices[1]); ground.CreateFixture(shape, 1);
            shape.SetAsEdge(vertices[1], vertices[2]); ground.CreateFixture(shape, 1);
            shape.SetAsEdge(vertices[2], vertices[3]); ground.CreateFixture(shape, 1);
            shape.SetAsEdge(vertices[3], vertices[0]); ground.CreateFixture(shape, 1);
        }
Exemple #27
0
        public SensorTest()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                {
                    PolygonShape shape = new PolygonShape();
                    shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                    ground.CreateFixture(shape, 0.0);
                }

    #if false
                {
                    FixtureDef sd;
                    sd.SetAsBox(10.0f, 2.0f, new Vector2(0.0f, 20.0f), 0.0f);
                    sd.isSensor = true;
                    _sensor     = ground.CreateFixture(&sd);
                }
    #else
                {
                    CircleShape shape = new CircleShape();
                    shape._radius = 5.0;
                    shape._p      = new Vector2(0.0, 10.0);

                    FixtureDef fd = new FixtureDef();
                    fd.shape    = shape;
                    fd.isSensor = true;
                    _sensor     = ground.CreateFixture(fd);
                }
    #endif
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.0;

                for (int i = 0; i < e_count; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type     = BodyType.Dynamic;
                    bd.position = new Vector2(-10.0 + 3.0 * i, 20.0);
                    bd.userData = i;

                    _touching[i] = false;
                    _bodies[i]   = _world.CreateBody(bd);

                    _bodies[i].CreateFixture(shape, 1.0);
                }
            }
        }
Exemple #28
0
        public SensorTest()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                {
                    PolygonShape shape = new PolygonShape();
                    shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                    ground.CreateFixture(shape, 0.0f);
                }

            #if false
                {
                    FixtureDef sd;
                    sd.SetAsBox(10.0f, 2.0f, new Vector2(0.0f, 20.0f), 0.0f);
                    sd.isSensor = true;
                    _sensor = ground.CreateFixture(&sd);
                }
            #else
                {
                    CircleShape shape = new CircleShape();
                    shape._radius = 5.0f;
                    shape._p = new Vector2(0.0f, 10.0f);

                    FixtureDef fd = new FixtureDef();
                    fd.shape = shape;
                    fd.isSensor = true;
                    _sensor = ground.CreateFixture(fd);
                }
            #endif
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.0f;

                for (int i = 0; i < e_count; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;
                    bd.position = new Vector2(-10.0f + 3.0f * i, 20.0f);
                    bd.userData = i;

                    _touching[i] = false;
                    _bodies[i] = _world.CreateBody(bd);

                    _bodies[i].CreateFixture(shape, 1.0f);
                }
            }
        }
Exemple #29
0
        public ContinuousTest()
        {
        {
			BodyDef bd = new BodyDef();
			bd.position = new Vector2(0.0f, 0.0f);
			Body body = _world.CreateBody(bd);

			PolygonShape shape = new PolygonShape();

			shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f));
			body.CreateFixture(shape, 1.0f);

			shape.SetAsBox(0.2f, 1.0f, new Vector2(0.5f, 1.0f), 0.0f);
            body.CreateFixture(shape, 1.0f);
		}

#if true
		{
			BodyDef bd = new BodyDef();
			bd.type = BodyType.Dynamic;
			bd.position = new Vector2(0.0f, 20.0f);
			//bd.angle = 0.1f;

			PolygonShape shape = new PolygonShape();
			shape.SetAsBox(2.0f, 0.1f);

			_body = _world.CreateBody(bd);
			_body.CreateFixture(shape, 1.0f);

            Launch();
		}
#else
		{
			BodyDef bd = new BodyDef();
			bd.type = BodyType.Dynamic;
			bd.position = new Vector2(0.0f, 0.5f);
			Body body = _world.CreateBody(bd);

			CircleShape shape = new CircleShape();
			shape._p = new Vector2Zero();
			shape._radius = 0.5f;
			body.CreateFixture(shape, 1.0f);

			//bd.bullet = true;
			bd.position = new Vector2(0.0f, 10.0f);
			body = _world.CreateBody(bd);
			body.CreateFixture(shape, 1.0f);
			body.SetLinearVelocity(new Vector2(0.0f, -100.0f));
		}
#endif
        }
Exemple #30
0
        public ContinuousTest()
        {
            {
                BodyDef bd = new BodyDef();
                bd.position = new Vector2(0.0f, 0.0f);
                Body body = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();

                shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f));
                body.CreateFixture(shape, 1.0f);

                shape.SetAsBox(0.2f, 1.0f, new Vector2(0.5f, 1.0f), 0.0f);
                body.CreateFixture(shape, 1.0f);
            }

#if true
            {
                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 20.0f);
                //bd.angle = 0.1f;

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(2.0f, 0.1f);

                _body = _world.CreateBody(bd);
                _body.CreateFixture(shape, 1.0f);

                Launch();
            }
#else
            {
                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 0.5f);
                Body body = _world.CreateBody(bd);

                CircleShape shape = new CircleShape();
                shape._p      = new Vector2Zero();
                shape._radius = 0.5f;
                body.CreateFixture(shape, 1.0f);

                //bd.bullet = true;
                bd.position = new Vector2(0.0f, 10.0f);
                body        = _world.CreateBody(bd);
                body.CreateFixture(shape, 1.0f);
                body.SetLinearVelocity(new Vector2(0.0f, -100.0f));
            }
#endif
        }
Exemple #31
0
        public PolyCollision()
        {
            {
                _polygonA.SetAsEdge(new Vector2(20.0, 0.0), new Vector2(20.0, 20.0));
                _transformA.Set(new Vector2(0.0, 0.0), 0.0);
            }

            {
                _polygonB.SetAsBox(0.25f, 0.25f);
                _positionB = new Vector2(19.345284f, 1.5632932f);
                _angleB    = 1.9160721f;
                _transformB.Set(_positionB, _angleB);
            }
        }
Exemple #32
0
        public Prismatic()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(2.0f, 0.5f);

                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(-10.0f, 10.0f);
                bd.Angle = 0.5f * (float)Math.PI;
                bd.AllowSleep = false;
                Body body = m_world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                PrismaticJointDef pjd = new PrismaticJointDef();

                // Bouncy limit
                Vec2 axis = new Vec2(2.0f, 1.0f);
                axis.Normalize();
                pjd.Initialize(ground, body, new Vec2(0.0f, 0.0f), axis);

                // Non-bouncy limit
                //pjd.Initialize(ground, body, new Vec2(-10.0f, 10.0f), new Vec2(1.0f, 0.0f));

                pjd.MotorSpeed = 10.0f;
                pjd.MaxMotorForce = 10000.0f;
                pjd.EnableMotor = true;
                pjd.LowerTranslation = 0.0f;
                pjd.UpperTranslation = 20.0f;
                pjd.EnableLimit = false;

                m_joint = (PrismaticJoint)m_world.CreateJoint(pjd);
            }
        }
Exemple #33
0
        public Prismatic()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(2.0f, 0.5f);

                BodyDef bd = new BodyDef();
                bd.BodyType   = BodyType.Dynamic;
                bd.Position   = new Vec2(-10.0f, 10.0f);
                bd.Angle      = 0.5f * (float)Math.PI;
                bd.AllowSleep = false;
                Body body = m_world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                PrismaticJointDef pjd = new PrismaticJointDef();

                // Bouncy limit
                Vec2 axis = new Vec2(2.0f, 1.0f);
                axis.Normalize();
                pjd.Initialize(ground, body, new Vec2(0.0f, 0.0f), axis);

                // Non-bouncy limit
                //pjd.Initialize(ground, body, new Vec2(-10.0f, 10.0f), new Vec2(1.0f, 0.0f));

                pjd.MotorSpeed       = 10.0f;
                pjd.MaxMotorForce    = 10000.0f;
                pjd.EnableMotor      = true;
                pjd.LowerTranslation = 0.0f;
                pjd.UpperTranslation = 20.0f;
                pjd.EnableLimit      = false;

                m_joint = (PrismaticJoint)m_world.CreateJoint(pjd);
            }
        }
Exemple #34
0
        public OneSidedPlatform()
        {
            // Ground
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-20.0f, 0.0f), new Vector2(20.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Platform
            {
                BodyDef bd = new BodyDef();
                bd.position = new Vector2(0.0f, 10.0f);
                Body body = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(3.0f, 0.5f);
                _platform = body.CreateFixture(shape, 0.0f);

                _bottom = 10.0f - 0.5f;
                _top = 10.0f + 0.5f;
            }

            // Actor
            {
                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 12.0f);
                Body body = _world.CreateBody(bd);

                _radius = 0.5f;
                CircleShape shape = new CircleShape();
                shape._radius = _radius;
                _character = body.CreateFixture(shape, 20.0f);

                body.SetLinearVelocity(new Vector2(0.0f, -50.0f));

                _state = State.e_unknown;
            }
        }
Exemple #35
0
        public SensorTest()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                {
                    PolygonShape shape = new PolygonShape();
                    shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                    ground.CreateFixture(shape, 0.0f);
                }

                {
                    CircleShape shape = new CircleShape();
                    shape.Radius = 5.0f;
                    shape.Position = new Vec2(0.0f, 10.0f);

                    FixtureDef fd = new FixtureDef();
                    fd.Shape = shape;
                    fd.IsSensor = true;
                    m_sensor = ground.CreateFixture(fd);
                }
            }

            {
                CircleShape shape = new CircleShape();

                for (int i = 0; i < e_count; ++i)
                {
                    shape.Radius = Rand.RandomFloat(0.85f, 1.0f);

                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f);
                    bd.UserData = i;

                    m_touching[i] = false;
                    m_bodies[i] = m_world.CreateBody(bd);

                    m_bodies[i].CreateFixture(shape, 1.0f);
                }
            }
        }
Exemple #36
0
        public Prismatic()
	    {
		    Body ground = null;
		    {
			    BodyDef bd = new BodyDef();
			    ground = _world.CreateBody(bd);

			    PolygonShape shape = new PolygonShape();
			    shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
			    ground.CreateFixture(shape, 0.0f);
		    }

		    {
			    PolygonShape shape = new PolygonShape();
			    shape.SetAsBox(2.0f, 0.5f);

			    BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
			    bd.position = new Vector2(-10.0f, 10.0f);
			    bd.angle = 0.5f * (float)Settings.b2_pi;
			    Body body = _world.CreateBody(bd);
			    body.CreateFixture(shape, 5.0f);

                PrismaticJointDef pjd = new PrismaticJointDef();

			    // Bouncy limit
                Vector2 axis = new Vector2(2, 1);
			    axis.Normalize();
			    pjd.Initialize(ground, body, new Vector2(0.0f, 0.0f), axis);

			    // Non-bouncy limit
			    //pjd.Initialize(ground, body, new Vector2(-10.0f, 10.0f), new Vector2(1.0f, 0.0f));

			    pjd.motorSpeed = 10.0f;
			    pjd.maxMotorForce = 1000.0f;
			    pjd.enableMotor = true;
			    pjd.lowerTranslation = 0.0f;
			    pjd.upperTranslation = 20.0f;
			    pjd.enableLimit = true;

			    _joint = (PrismaticJoint)_world.CreateJoint(pjd);
		    }
	    }
Exemple #37
0
        public SensorTest()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                {
                    PolygonShape shape = new PolygonShape();
                    shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                    ground.CreateFixture(shape, 0.0f);
                }

                {
                    CircleShape shape = new CircleShape();
                    shape.Radius   = 5.0f;
                    shape.Position = new Vec2(0.0f, 10.0f);

                    FixtureDef fd = new FixtureDef();
                    fd.Shape    = shape;
                    fd.IsSensor = true;
                    m_sensor    = ground.CreateFixture(fd);
                }
            }

            {
                CircleShape shape = new CircleShape();

                for (int i = 0; i < e_count; ++i)
                {
                    shape.Radius = Rand.RandomFloat(0.85f, 1.0f);

                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f);
                    bd.UserData = i;

                    m_touching[i] = false;
                    m_bodies[i]   = m_world.CreateBody(bd);

                    m_bodies[i].CreateFixture(shape, 1.0f);
                }
            }
        }
Exemple #38
0
        public OneSidedPlatform()
        {
            // Ground
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-20.0f, 0.0f), new Vector2(20.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Platform
            {
                BodyDef bd = new BodyDef();
                bd.position = new Vector2(0.0f, 10.0f);
                Body body = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(3.0f, 0.5f);
                _platform = body.CreateFixture(shape, 0.0f);

                _bottom = 10.0f - 0.5f;
                _top    = 10.0f + 0.5f;
            }

            // Actor
            {
                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(0.0f, 12.0f);
                Body body = _world.CreateBody(bd);

                _radius = 0.5f;
                CircleShape shape = new CircleShape();
                shape._radius = _radius;
                _character    = body.CreateFixture(shape, 1.0f);

                body.SetLinearVelocity(new Vector2(0.0f, -50.0f));

                _state = State.e_unknown;
            }
        }
Exemple #39
0
        public Prismatic()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(2.0, 0.5);

                BodyDef bd = new BodyDef();
                bd.type     = BodyType.Dynamic;
                bd.position = new Vector2(-10.0, 10.0);
                bd.angle    = 0.5 * Alt.Box2D.Settings.b2_pi;
                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 5.0);

                PrismaticJointDef pjd = new PrismaticJointDef();

                // Bouncy limit
                Vector2 axis = new Vector2(2, 1);
                axis.Normalize();
                pjd.Initialize(ground, body, new Vector2(0.0, 0.0), axis);

                // Non-bouncy limit
                //pjd.Initialize(ground, body, new Vector2(-10.0, 10.0), new Vector2(1.0, 0.0));

                pjd.motorSpeed       = 10.0;
                pjd.maxMotorForce    = 1000.0;
                pjd.enableMotor      = true;
                pjd.lowerTranslation = 0.0;
                pjd.upperTranslation = 20.0;
                pjd.enableLimit      = true;

                _joint = (PrismaticJoint)_world.CreateJoint(pjd);
            }
        }
Exemple #40
0
        public Pulleys()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                float a = 2.0f;
                float b = 4.0f;
                float y = 16.0f;
                float L = 12.0f;

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(a, b);

                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;

                bd.Position = new Vec2(-10.0f, y);
                Body body1 = m_world.CreateBody(bd);
                body1.CreateFixture(shape, 5.0f);

                bd.Position = new Vec2(10.0f, y);
                Body body2 = m_world.CreateBody(bd);
                body2.CreateFixture(shape, 5.0f);

                PulleyJointDef pulleyDef     = new PulleyJointDef();
                Vec2           anchor1       = new Vec2(-10.0f, y + b);
                Vec2           anchor2       = new Vec2(10.0f, y + b);
                Vec2           groundAnchor1 = new Vec2(-10.0f, y + b + L);
                Vec2           groundAnchor2 = new Vec2(10.0f, y + b + L);
                pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f);

                m_joint1 = (PulleyJoint)m_world.CreateJoint(pulleyDef);
            }
        }
Exemple #41
0
        public Chain()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.6f, 0.125f);

                FixtureDef fd = new FixtureDef();
                fd.shape    = shape;
                fd.density  = 20.0f;
                fd.friction = 0.2f;

                RevoluteJointDef jd = new RevoluteJointDef();
                jd.collideConnected = false;

                float y        = 25.0f;
                Body  prevBody = ground;
                for (int i = 0; i < 30; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type     = BodyType.Dynamic;
                    bd.position = new Vector2(0.5f + i, y);
                    Body body = _world.CreateBody(bd);
                    body.CreateFixture(fd);

                    Vector2 anchor = new Vector2((float)i, y);
                    jd.Initialize(prevBody, body, anchor);
                    _world.CreateJoint(jd);

                    prevBody = body;
                }
            }
        }
Exemple #42
0
        public Chain()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.6f, 0.125f);

                FixtureDef fd = new FixtureDef();
                fd.shape = shape;
                fd.density = 20.0f;
                fd.friction = 0.2f;

                RevoluteJointDef jd = new RevoluteJointDef();
                jd.collideConnected = false;

                float y = 25.0f;
                Body prevBody = ground;
                for (int i = 0; i < 30; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.Dynamic;
                    bd.position = new Vector2(0.5f + i, y);
                    Body body = _world.CreateBody(bd);
                    body.CreateFixture(fd);

                    Vector2 anchor = new Vector2((float)i, y);
                    jd.Initialize(prevBody, body, anchor);
                    _world.CreateJoint(jd);

                    prevBody = body;
                }
            }
        }
Exemple #43
0
        Pulleys()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                float a = 2.0f;
                float b = 4.0f;
                float y = 16.0f;
                float L = 12.0f;

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(a, b);

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;

                bd.position = new Vector2(-10.0f, y);
                Body body1 = _world.CreateBody(bd);
                body1.CreateFixture(shape, 5.0f);

                bd.position = new Vector2(10.0f, y);
                Body body2 = _world.CreateBody(bd);
                body2.CreateFixture(shape, 5.0f);

                PulleyJointDef pulleyDef = new PulleyJointDef();
                Vector2 anchor1 = new Vector2(-10.0f, y + b);
                Vector2 anchor2 = new Vector2(10.0f, y + b);
                Vector2 groundAnchor1 = new Vector2(-10.0f, y + b + L);
                Vector2 groundAnchor2 = new Vector2(10.0f, y + b + L);
                pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f);

                _joint1 = (PulleyJoint)_world.CreateJoint(pulleyDef);
            }
        }
Exemple #44
0
        Pulleys()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0);
            }

            {
                double a = 2.0;
                double b = 4.0;
                double y = 16.0;
                double L = 12.0;

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(a, b);

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;

                bd.position = new Vector2(-10.0, y);
                Body body1 = _world.CreateBody(bd);
                body1.CreateFixture(shape, 5.0);

                bd.position = new Vector2(10.0, y);
                Body body2 = _world.CreateBody(bd);
                body2.CreateFixture(shape, 5.0);

                PulleyJointDef pulleyDef     = new PulleyJointDef();
                Vector2        anchor1       = new Vector2(-10.0, y + b);
                Vector2        anchor2       = new Vector2(10.0, y + b);
                Vector2        groundAnchor1 = new Vector2(-10.0, y + b + L);
                Vector2        groundAnchor2 = new Vector2(10.0, y + b + L);
                pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f);

                _joint1 = (PulleyJoint)_world.CreateJoint(pulleyDef);
            }
        }
Exemple #45
0
        public Revolute()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 0.5f;

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;

                RevoluteJointDef rjd = new RevoluteJointDef();

                bd.position = new Vector2(0.0f, 20.0f);
                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                float w = 100.0f;
                body.SetAngularVelocity(w);
                body.SetLinearVelocity(new Vector2(-8.0f * w, 0.0f));

                rjd.Initialize(ground, body, new Vector2(0.0f, 12.0f));
                rjd.motorSpeed       = 1.0f * (float)Settings.b2_pi;
                rjd.maxMotorTorque   = 10000.0f;
                rjd.enableMotor      = false;
                rjd.lowerAngle       = -0.25f * (float)Settings.b2_pi;
                rjd.upperAngle       = 0.5f * (float)Settings.b2_pi;
                rjd.enableLimit      = true;
                rjd.collideConnected = true;

                _joint = (RevoluteJoint)_world.CreateJoint(rjd);
            }
        }
Exemple #46
0
        public Revolute()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 0.5f;

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;

                RevoluteJointDef rjd = new RevoluteJointDef();

                bd.position = new Vector2(0.0f, 20.0f);
                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 5.0f);

                float w = 100.0f;
                body.SetAngularVelocity(w);
                body.SetLinearVelocity(new Vector2(-8.0f * w, 0.0f));

                rjd.Initialize(ground, body, new Vector2(0.0f, 12.0f));
                rjd.motorSpeed = 1.0f * (float)Settings.b2_pi;
                rjd.maxMotorTorque = 10000.0f;
                rjd.enableMotor = false;
                rjd.lowerAngle = -0.25f * (float)Settings.b2_pi;
                rjd.upperAngle = 0.5f * (float)Settings.b2_pi;
                rjd.enableLimit = true;
                rjd.collideConnected = true;

                _joint = (RevoluteJoint)_world.CreateJoint(rjd);
            }
        }
Exemple #47
0
        public OneSidedPlatform()
        {
            // Ground
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Platform
            {
                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(0.0f, 10.0f);
                Body body = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(3.0f, 0.5f);
                m_platform = body.CreateFixture(shape, 0.0f);

                m_top = 10.0f + 0.5f;
            }

            // Actor
            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 12.0f);
                Body body = m_world.CreateBody(bd);

                m_radius = 0.5f;
                CircleShape shape = new CircleShape();
                shape.Radius = m_radius;
                m_character = body.CreateFixture(shape, 20.0f);

                body.LinearVelocity = new Vec2(0.0f, -50.0f);
            }
        }
Exemple #48
0
        public OneSidedPlatform()
        {
            // Ground
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Platform
            {
                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(0.0f, 10.0f);
                Body body = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(3.0f, 0.5f);
                m_platform = body.CreateFixture(shape, 0.0f);

                m_top = 10.0f + 0.5f;
            }

            // Actor
            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 12.0f);
                Body body = m_world.CreateBody(bd);

                m_radius = 0.5f;
                CircleShape shape = new CircleShape();
                shape.Radius = m_radius;
                m_character  = body.CreateFixture(shape, 20.0f);

                body.LinearVelocity = new Vec2(0.0f, -50.0f);
            }
        }
Exemple #49
0
        public Pyramid()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0));
                ground.CreateFixture(shape, 0.0);
            }

            {
                double       a     = 0.5;
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(a, a);

                Vector2 x = new Vector2(-7.0, 0.75);
                Vector2 y;
                Vector2 deltaX = new Vector2(0.5625, 1.25);
                Vector2 deltaY = new Vector2(1.125, 0.0);

                for (int i = 0; i < e_count; ++i)
                {
                    y = x;

                    for (int j = i; j < e_count; ++j)
                    {
                        BodyDef bd = new BodyDef();
                        bd.type     = BodyType.Dynamic;
                        bd.position = y;
                        Body body = _world.CreateBody(bd);
                        body.CreateFixture(shape, 5.0);

                        y += deltaY;
                    }

                    x += deltaX;
                }
            }
        }
Exemple #50
0
        public Pyramid()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                float a = 0.5f;
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(a, a);

                Vector2 x = new Vector2(-7.0f, 0.75f);
                Vector2 y;
                Vector2 deltaX = new Vector2(0.5625f, 1.25f);
                Vector2 deltaY = new Vector2(1.125f, 0.0f);

                for (int i = 0; i < e_count; ++i)
                {
                    y = x;

                    for (int j = i; j < e_count; ++j)
                    {
                        BodyDef bd = new BodyDef();
                        bd.type = BodyType.Dynamic;
                        bd.position = y;
                        Body body = _world.CreateBody(bd);
                        body.CreateFixture(shape, 5.0f);

                        y += deltaY;
                    }

                    x += deltaX;
                }
            }
        }
Exemple #51
0
        public ShapeEditing()
	    {
		    {
			    BodyDef bd = new BodyDef();
			    Body ground = _world.CreateBody(bd);

			    PolygonShape shape = new PolygonShape();
			    shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
			    ground.CreateFixture(shape, 0.0f);
		    }

            BodyDef bodydef = new BodyDef();
            bodydef.type = BodyType.Dynamic;
		    bodydef.position = new Vector2(0.0f, 10.0f);
		    _body = _world.CreateBody(bodydef);

		    PolygonShape shape2 = new PolygonShape();
		    shape2.SetAsBox(4.0f, 4.0f, new Vector2(0.0f, 0.0f), 0.0f);
		    _fixture1 = _body.CreateFixture(shape2, 10.0f);

		    _fixture2 = null;
	    }
Exemple #52
0
        public ShapeEditing()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 10.0f);
                m_body = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(4.0f, 4.0f, new Vec2(0.0f, 0.0f), 0.0f);
                m_fixture1 = m_body.CreateFixture(shape, 10.0f);
                m_fixture2 = null;
            }
        }
Exemple #53
0
        public ShapeEditing()
        {
            {
                BodyDef bd     = new BodyDef();
                Body    ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 10.0f);
                m_body      = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(4.0f, 4.0f, new Vec2(0.0f, 0.0f), 0.0f);
                m_fixture1 = m_body.CreateFixture(shape, 10.0f);
                m_fixture2 = null;
            }
        }
        public CollisionFiltering()
        {
            // Ground body
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));

                FixtureDef sd = new FixtureDef();
                sd.shape = shape;
                sd.friction = 0.3f;

                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);
                ground.CreateFixture(sd);
            }

            // Small triangle
            Vector2[] vertices = new Vector2[3];
            vertices[0] = new Vector2(-1.0f, 0.0f);
            vertices[1] = new Vector2(1.0f, 0.0f);
            vertices[2] = new Vector2(0.0f, 2.0f);
            PolygonShape polygon = new PolygonShape();
            polygon.Set(vertices, 3);

            FixtureDef triangleShapeDef = new FixtureDef();
            triangleShapeDef.shape = polygon;
            triangleShapeDef.density = 1.0f;

            triangleShapeDef.filter.groupIndex = k_smallGroup;
            triangleShapeDef.filter.categoryBits = k_triangleCategory;
            triangleShapeDef.filter.maskBits = k_triangleMask;

            BodyDef triangleBodyDef = new BodyDef();
            triangleBodyDef.type = BodyType.Dynamic;
            triangleBodyDef.position = new Vector2(-5.0f, 2.0f);

            Body body1 = _world.CreateBody(triangleBodyDef);
            body1.CreateFixture(triangleShapeDef);

            // Large triangle (recycle definitions)
            vertices[0] *= 2.0f;
            vertices[1] *= 2.0f;
            vertices[2] *= 2.0f;
            polygon.Set(vertices, 3);
            triangleShapeDef.filter.groupIndex = k_largeGroup;
            triangleBodyDef.position = new Vector2(-5.0f, 6.0f);
            triangleBodyDef.fixedRotation = true; // look at me!

            Body body2 = _world.CreateBody(triangleBodyDef);
            body2.CreateFixture(triangleShapeDef);

            {
                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = new Vector2(-5.0f, 10.0f);
                Body body = _world.CreateBody(bd);

                PolygonShape p = new PolygonShape();
                p.SetAsBox(0.5f, 1.0f);
                body.CreateFixture(p, 1.0f);

                PrismaticJointDef jd = new PrismaticJointDef();
                jd.bodyA = body2;
                jd.bodyB = body;
                jd.enableLimit = true;
                jd.localAnchorA = new Vector2(0.0f, 4.0f);
                jd.localAnchorB = Vector2.Zero;
                jd.localAxis1 = new Vector2(0.0f, 1.0f);
                jd.lowerTranslation = -1.0f;
                jd.upperTranslation = 1.0f;

                _world.CreateJoint(jd);
            }

            // Small box
            polygon.SetAsBox(1.0f, 0.5f);
            FixtureDef boxShapeDef = new FixtureDef();
            boxShapeDef.shape = polygon;
            boxShapeDef.density = 1.0f;
            boxShapeDef.restitution = 0.1f;

            boxShapeDef.filter.groupIndex = k_smallGroup;
            boxShapeDef.filter.categoryBits = k_boxCategory;
            boxShapeDef.filter.maskBits = k_boxMask;

            BodyDef boxBodyDef = new BodyDef();
            boxBodyDef.type = BodyType.Dynamic;
            boxBodyDef.position = new Vector2(0.0f, 2.0f);

            Body body3 = _world.CreateBody(boxBodyDef);
            body3.CreateFixture(boxShapeDef);

            // Large box (recycle definitions)
            polygon.SetAsBox(2.0f, 1.0f);
            boxShapeDef.filter.groupIndex = k_largeGroup;
            boxBodyDef.position = new Vector2(0.0f, 6.0f);

            Body body4 = _world.CreateBody(boxBodyDef);
            body4.CreateFixture(boxShapeDef);

            // Small circle
            CircleShape circle = new CircleShape();
            circle._radius = 1.0f;

            FixtureDef circleShapeDef = new FixtureDef();
            circleShapeDef.shape = circle;
            circleShapeDef.density = 1.0f;

            circleShapeDef.filter.groupIndex = k_smallGroup;
            circleShapeDef.filter.categoryBits = k_circleCategory;
            circleShapeDef.filter.maskBits = k_circleMask;

            BodyDef circleBodyDef = new BodyDef();
            circleBodyDef.type = BodyType.Dynamic;
            circleBodyDef.position = new Vector2(5.0f, 2.0f);

            Body body5 = _world.CreateBody(circleBodyDef);
            body5.CreateFixture(circleShapeDef);

            // Large circle
            circle._radius *= 2.0f;
            circleShapeDef.filter.groupIndex = k_largeGroup;
            circleBodyDef.position = new Vector2(5.0f, 6.0f);

            Body body6 = _world.CreateBody(circleBodyDef);
            body6.CreateFixture(circleShapeDef);
        }
Exemple #55
0
        public RayCast()
        {
            // Ground body
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                Vec2[] vertices = new Vec2[3];
                vertices[0] = new Vec2(-0.5f, 0.0f);
                vertices[1] = new Vec2(0.5f, 0.0f);
                vertices[2] = new Vec2(0.0f, 1.5f);
                m_polygons[0] = new PolygonShape();
                m_polygons[0].Vertices = vertices;
            }

            {
                Vec2[] vertices = new Vec2[3];
                vertices[0] = new Vec2(-0.1f, 0.0f);
                vertices[1] = new Vec2(0.1f, 0.0f);
                vertices[2] = new Vec2(0.0f, 1.5f);
                m_polygons[1] = new PolygonShape();
                m_polygons[1].Vertices = vertices;
            }

            {
                float w = 1.0f;
                float b = w / (2.0f + (float)Math.Sqrt(2.0f));
                float s = (float)Math.Sqrt(2.0f) * b;

                Vec2[] vertices = new Vec2[8];
                vertices[0] = new Vec2(0.5f * s, 0.0f);
                vertices[1] = new Vec2(0.5f * w, b);
                vertices[2] = new Vec2(0.5f * w, b + s);
                vertices[3] = new Vec2(0.5f * s, w);
                vertices[4] = new Vec2(-0.5f * s, w);
                vertices[5] = new Vec2(-0.5f * w, b + s);
                vertices[6] = new Vec2(-0.5f * w, b);
                vertices[7] = new Vec2(-0.5f * s, 0.0f);

                m_polygons[2] = new PolygonShape();
                m_polygons[2].Vertices = vertices;
            }

            {
                m_polygons[3] = new PolygonShape();
                m_polygons[3].SetAsBox(0.5f, 0.5f);
            }

            {
                m_circle = new CircleShape();
                m_circle.Radius = 0.5f;
            }

            m_bodyIndex = 0;
            m_angle = 0.0f;

            m_mode = Mode.e_closest;
        }
Exemple #56
0
        public RayCast()
        {
            // Ground body
		    {
			    BodyDef bd = new BodyDef();
			    Body ground = _world.CreateBody(bd);

			    PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
			    ground.CreateFixture(shape, 0.0f);
		    }

		    {
			    var vertices = new Vector2[3];
			    vertices[0] = new Vector2(-0.5f, 0.0f);
			    vertices[1] = new Vector2(0.5f, 0.0f);
			    vertices[2] = new Vector2(0.0f, 1.5f);
                _polygons[0] = new PolygonShape();
			    _polygons[0].Set(vertices, 3);
		    }

		    {
			    var vertices2 = new Vector2[3];
			    vertices2[0] = new Vector2(-0.1f, 0.0f);
			    vertices2[1] = new Vector2(0.1f, 0.0f);
			    vertices2[2] = new Vector2(0.0f, 1.5f);
                _polygons[1] = new PolygonShape();
			    _polygons[1].Set(vertices2, 3);
		    }

		    {
			    float w = 1.0f;
                float b = w / (2.0f + (float)Math.Sqrt(2.0));
			    float s = (float)Math.Sqrt(2.0) * b;

			    var vertices3 = new Vector2[8];
			    vertices3[0] = new Vector2(0.5f * s, 0.0f);
			    vertices3[1] = new Vector2(0.5f * w, b);
			    vertices3[2] = new Vector2(0.5f * w, b + s);
			    vertices3[3] = new Vector2(0.5f * s, w);
			    vertices3[4] = new Vector2(-0.5f * s, w);
			    vertices3[5] = new Vector2(-0.5f * w, b + s);
			    vertices3[6] = new Vector2(-0.5f * w, b);
			    vertices3[7] = new Vector2(-0.5f * s, 0.0f);
                _polygons[2] = new PolygonShape();
			    _polygons[2].Set(vertices3, 8);
		    }

		    {
                _polygons[3] = new PolygonShape();
			    _polygons[3].SetAsBox(0.5f, 0.5f);
		    }

		    {
                _circle = new CircleShape();
			    _circle._radius = 0.5f;
		    }

		    _bodyIndex = 0;
		    _angle = 0.0f;
            _mode = RayCastMode.Closest;
        }
Exemple #57
0
        public VaryingFriction()
        {
            {
                BodyDef bd = new BodyDef();
                Body ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(13.0f, 0.25f);

                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(-4.0f, 22.0f);
                bd.Angle = -0.25f;

                Body ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.25f, 1.0f);

                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(10.5f, 19.0f);

                Body ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(13.0f, 0.25f);

                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(4.0f, 14.0f);
                bd.Angle = 0.25f;

                Body ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.25f, 1.0f);

                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(-10.5f, 11.0f);

                Body ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(13.0f, 0.25f);

                BodyDef bd = new BodyDef();
                bd.Position = new Vec2(-4.0f, 6.0f);
                bd.Angle = -0.25f;

                Body ground = m_world.CreateBody(bd);
                ground.CreateFixture(shape, 0.0f);
            }

            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 0.5f);

                FixtureDef fd = new FixtureDef();
                fd.Shape = shape;
                fd.Density = 25.0f;

                float[] friction = {0.75f, 0.5f, 0.35f, 0.1f, 0.0f};

                for (int i = 0; i < 5; ++i)
                {
                    BodyDef bd = new BodyDef();
                    bd.BodyType = BodyType.Dynamic;
                    bd.Position = new Vec2(-15.0f + 4.0f * i, 28.0f);
                    Body body = m_world.CreateBody(bd);

                    fd.Friction = friction[i];
                    body.CreateFixture(fd);
                }
            }
        }
Exemple #58
0
        TheoJansen()
        {
            _offset = new Vector2(0.0f, 8.0f);
            _motorSpeed = 2.0f;
            _motorOn = true;
            Vector2 pivot = new Vector2(0.0f, 0.8f);

            // Ground
            {
                BodyDef bd = new BodyDef();
                Body ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(50.0f, 0.0f));
                ground.CreateFixture(shape, 0.0f);

                shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(-50.0f, 10.0f));
                ground.CreateFixture(shape, 0.0f);

                shape.SetAsEdge(new Vector2(50.0f, 0.0f), new Vector2(50.0f, 10.0f));
                ground.CreateFixture(shape, 0.0f);
            }

            // Balls
            for (int i = 0; i < 40; ++i)
            {
                CircleShape shape = new CircleShape();
                shape._radius = 0.25f;

                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = new Vector2(-40.0f + 2.0f * i, 0.5f);

                Body body = _world.CreateBody(bd);
                body.CreateFixture(shape, 1.0f);
            }

            // Chassis
            {
                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(2.5f, 1.0f);

                FixtureDef sd = new FixtureDef();
                sd.density = 1.0f;
                sd.shape = shape;
                sd.filter.groupIndex = -1;
                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = pivot + _offset;
                _chassis = _world.CreateBody(bd);
                _chassis.CreateFixture(sd);
            }

            {
                CircleShape shape = new CircleShape();
                shape._radius = 1.6f;

                FixtureDef sd = new FixtureDef();
                sd.density = 1.0f;
                sd.shape = shape;
                sd.filter.groupIndex = -1;
                BodyDef bd = new BodyDef();
                bd.type = BodyType.Dynamic;
                bd.position = pivot + _offset;
                _wheel = _world.CreateBody(bd);
                _wheel.CreateFixture(sd);
            }

            {
                RevoluteJointDef jd = new RevoluteJointDef();
                jd.Initialize(_wheel, _chassis, pivot + _offset);
                jd.collideConnected = false;
                jd.motorSpeed = _motorSpeed;
                jd.maxMotorTorque = 400.0f;
                jd.enableMotor = _motorOn;
                _motorJoint = (RevoluteJoint)_world.CreateJoint(jd);
            }

            Vector2 wheelAnchor;

            wheelAnchor = pivot + new Vector2(0.0f, -0.8f);

            CreateLeg(-1.0f, wheelAnchor);
            CreateLeg(1.0f, wheelAnchor);

            _wheel.SetTransform(_wheel.GetPosition(), 120.0f * (float)Settings.b2_pi / 180.0f);
            CreateLeg(-1.0f, wheelAnchor);
            CreateLeg(1.0f, wheelAnchor);

            _wheel.SetTransform(_wheel.GetPosition(), -120.0f * (float)Settings.b2_pi / 180.0f);
            CreateLeg(-1.0f, wheelAnchor);
            CreateLeg(1.0f, wheelAnchor);
        }
Exemple #59
0
        public Cantilever()
        {
            Body ground = null;
		    {
                BodyDef bd = new BodyDef();
			    ground = _world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
			    shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
			    ground.CreateFixture(shape, 0.0f);
		    }

		    {
                PolygonShape shape = new PolygonShape();
			    shape.SetAsBox(0.5f, 0.125f);

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 20.0f;

                WeldJointDef jd = new WeldJointDef();

			    Body prevBody = ground;
			    for (int i = 0; i < e_count; ++i)
			    {
                    BodyDef bd = new BodyDef();
				    bd.type = BodyType.Dynamic;
				    bd.position = new Vector2(-14.5f + 1.0f * i, 5.0f);
				    Body body = _world.CreateBody(bd);
				    body.CreateFixture(fd);

				    Vector2 anchor = new Vector2(-15.0f + 1.0f * i, 5.0f);
				    jd.Initialize(prevBody, body, anchor);
				    _world.CreateJoint(jd);

				    prevBody = body;
			    }
		    }

		   	{
                PolygonShape shape = new PolygonShape();
			    shape.SetAsBox(0.5f, 0.125f);

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 20.0f;

                WeldJointDef jd = new WeldJointDef();

			    Body prevBody = ground;
			    for (int i = 0; i < e_count; ++i)
			    {
                    BodyDef bd = new BodyDef();
				    bd.type = BodyType.Dynamic;
				    bd.position = new Vector2(-14.5f + 1.0f * i, 15.0f);
				    bd.inertiaScale = 10.0f;
				    Body body = _world.CreateBody(bd);
				    body.CreateFixture(fd);

				    Vector2 anchor = new Vector2(-15.0f + 1.0f * i, 15.0f);
				    jd.Initialize(prevBody, body, anchor);
				    _world.CreateJoint(jd);

				    prevBody = body;
			    }
		    }

		    {
                PolygonShape shape = new PolygonShape();
			    shape.SetAsBox(0.5f, 0.125f);

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 20.0f;

                WeldJointDef jd = new WeldJointDef();

			    Body prevBody = ground;
			    for (int i = 0; i < e_count; ++i)
			    {
                    BodyDef bd = new BodyDef();
				    bd.type = BodyType.Dynamic;
				    bd.position = new Vector2(-4.5f + 1.0f * i, 5.0f);
				    Body body = _world.CreateBody(bd);
				    body.CreateFixture(fd);

				    if (i > 0)
				    {
					    Vector2 anchor = new Vector2(-5.0f + 1.0f * i, 5.0f);
					    jd.Initialize(prevBody, body, anchor);
					    _world.CreateJoint(jd);
				    }

				    prevBody = body;
			    }
		    }
            {
                PolygonShape shape = new PolygonShape();
			    shape.SetAsBox(0.5f, 0.125f);

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 20.0f;

                WeldJointDef jd = new WeldJointDef();

			    Body prevBody = ground;
			    for (int i = 0; i < e_count; ++i)
			    {
                    BodyDef bd = new BodyDef();
				    bd.type = BodyType.Dynamic;
				    bd.position = new Vector2(5.5f + 1.0f * i, 10.0f);
				    bd.inertiaScale = 10.0f;
				    Body body = _world.CreateBody(bd);
				    body.CreateFixture(fd);

				    if (i > 0)
				    {
					    Vector2 anchor = new Vector2(5.0f + 1.0f * i, 10.0f);
					    jd.Initialize(prevBody, body, anchor);
					    _world.CreateJoint(jd);
				    }

				    prevBody = body;
			    }
		    }

		    for (int i = 0; i < 2; ++i)
		    {
			    Vector2[] vertices = new Vector2[3];
			    vertices[0] = new Vector2(-0.5f, 0.0f);
			    vertices[1] = new Vector2(0.5f, 0.0f);
			    vertices[2] = new Vector2(0.0f, 1.5f);

                PolygonShape shape = new PolygonShape();
			    shape.Set(vertices, 3);

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 1.0f;

                BodyDef bd = new BodyDef();
			    bd.type = BodyType.Dynamic;
			    bd.position = new Vector2(-8.0f + 8.0f * i, 12.0f);
			    Body body = _world.CreateBody(bd);
			    body.CreateFixture(fd);
		    }

            for (int i = 0; i < 2; ++i)
		    {
                CircleShape shape = new CircleShape();
			    shape._radius = 0.5f;

                FixtureDef fd = new FixtureDef();
			    fd.shape = shape;
			    fd.density = 1.0f;

                BodyDef bd = new BodyDef();
			    bd.type = BodyType.Dynamic;
			    bd.position = new Vector2(-6.0f + 6.0f * i, 10.0f);
			    Body body = _world.CreateBody(bd);
			    body.CreateFixture(fd);
		    }
        }
Exemple #60
0
        public BodyTypes()
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f));

                FixtureDef fd = new FixtureDef();
                fd.Shape = shape;

                ground.CreateFixture(fd);
            }

            // Define attachment
            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 3.0f);
                m_attachment = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 2.0f);
                m_attachment.CreateFixture(shape, 2.0f);
            }

            // Define platform
            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(-4.0f, 5.0f);
                m_platform = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.5f, 4.0f, new Vec2(4.0f, 0.0f), 0.5f * (float)Math.PI);

                FixtureDef fd = new FixtureDef();
                fd.Shape = shape;
                fd.Friction = 0.6f;
                fd.Density = 2.0f;
                m_platform.CreateFixture(fd);

                RevoluteJointDef rjd = new RevoluteJointDef();
                rjd.Initialize(m_attachment, m_platform, new Vec2(0.0f, 5.0f));
                rjd.MaxMotorTorque = 50.0f;
                rjd.EnableMotor = true;
                m_world.CreateJoint(rjd);

                PrismaticJointDef pjd = new PrismaticJointDef();
                pjd.Initialize(ground, m_platform, new Vec2(0.0f, 5.0f), new Vec2(1.0f, 0.0f));

                pjd.MaxMotorForce = 1000.0f;
                pjd.EnableMotor = true;
                pjd.LowerTranslation = -10.0f;
                pjd.UpperTranslation = 10.0f;
                pjd.EnableLimit = true;

                m_world.CreateJoint(pjd);

                m_speed = 3.0f;
            }

            // Create a payload
            {
                BodyDef bd = new BodyDef();
                bd.BodyType = BodyType.Dynamic;
                bd.Position = new Vec2(0.0f, 8.0f);
                m_payload = m_world.CreateBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.SetAsBox(0.75f, 0.75f);

                FixtureDef fd = new FixtureDef();
                fd.Shape = shape;
                fd.Friction = 0.6f;
                fd.Density = 2.0f;

                m_payload.CreateFixture(fd);
            }
        }