Exemple #1
0
        public override void initTest(bool deserialized)
        {
            {
                BodyDef bd = new BodyDef();
                bd.type = BodyType.DYNAMIC;
                bd.allowSleep = false;
                bd.position.set(0.0f, 10.0f);
                Body body = m_world.createBody(bd);

                PolygonShape shape = new PolygonShape();
                shape.setAsBox(0.5f, 10.0f, new Vec2(20.0f, 0.0f), 0.0f);
                body.createFixture(shape, 5.0f);
                shape.setAsBox(0.5f, 10.0f, new Vec2(-20.0f, 0.0f), 0.0f);
                body.createFixture(shape, 5.0f);
                shape.setAsBox(20.0f, 0.5f, new Vec2(0.0f, 10.0f), 0.0f);
                body.createFixture(shape, 5.0f);
                shape.setAsBox(20.0f, 0.5f, new Vec2(0.0f, -10.0f), 0.0f);
                body.createFixture(shape, 5.0f);

                RevoluteJointDef jd = new RevoluteJointDef();
                jd.bodyA = getGroundBody();
                jd.bodyB = body;
                jd.localAnchorA.set(0.0f, 10.0f);
                jd.localAnchorB.set(0.0f, 0.0f);
                jd.referenceAngle = 0.0f;
                jd.motorSpeed = 0.05f*MathUtils.PI;
                jd.maxMotorTorque = 1e7f;
                jd.enableMotor = true;
                m_joint = (RevoluteJoint) m_world.createJoint(jd);
            }

            m_world.setParticleRadius(0.15f);
            m_world.setParticleDamping(0.2f);

            {
                ParticleGroupDef pd = new ParticleGroupDef();
                pd.flags = 0;

                PolygonShape shape = new PolygonShape();
                shape.setAsBox(9.0f, 9.0f, new Vec2(0.0f, 10.0f), 0.0f);

                pd.shape = shape;
                m_world.createParticleGroup(pd);
            }

            m_time = 0;
        }
Exemple #2
0
        public override void initTest(bool argDeserialized)
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = getWorld().createBody(bd);

                EdgeShape shape = new EdgeShape();
                shape.set(new Vec2(50.0f, 0.0f), new Vec2(-50.0f, 0.0f));
                ground.createFixture(shape, 0.0f);
            }

            {
                CircleShape circle1 = new CircleShape();
                circle1.m_radius = 1.0f;

                PolygonShape box = new PolygonShape();
                box.setAsBox(0.5f, 5.0f);

                CircleShape circle2 = new CircleShape();
                circle2.m_radius = 2.0f;

                BodyDef bd1 = new BodyDef();
                bd1.type = BodyType.STATIC;
                bd1.position.set(10.0f, 9.0f);
                Body body1 = m_world.createBody(bd1);
                body1.createFixture(circle1, 5.0f);

                BodyDef bd2 = new BodyDef();
                bd2.type = BodyType.DYNAMIC;
                bd2.position.set(10.0f, 8.0f);
                Body body2 = m_world.createBody(bd2);
                body2.createFixture(box, 5.0f);

                BodyDef bd3 = new BodyDef();
                bd3.type = BodyType.DYNAMIC;
                bd3.position.set(10.0f, 6.0f);
                Body body3 = m_world.createBody(bd3);
                body3.createFixture(circle2, 5.0f);

                RevoluteJointDef jd1 = new RevoluteJointDef();
                jd1.initialize(body2, body1, bd1.position);
                Joint joint1 = m_world.createJoint(jd1);

                RevoluteJointDef jd2 = new RevoluteJointDef();
                jd2.initialize(body2, body3, bd3.position);
                Joint joint2 = m_world.createJoint(jd2);

                GearJointDef jd4 = new GearJointDef();
                jd4.bodyA = body1;
                jd4.bodyB = body3;
                jd4.joint1 = joint1;
                jd4.joint2 = joint2;
                jd4.ratio = circle2.m_radius/circle1.m_radius;
                m_world.createJoint(jd4);
            }

            {
                CircleShape circle1 = new CircleShape();
                circle1.m_radius = 1.0f;

                CircleShape circle2 = new CircleShape();
                circle2.m_radius = 2.0f;

                PolygonShape box = new PolygonShape();
                box.setAsBox(0.5f, 5.0f);

                BodyDef bd1 = new BodyDef();
                bd1.type = BodyType.DYNAMIC;
                bd1.position.set(-3.0f, 12.0f);
                Body body1 = m_world.createBody(bd1);
                body1.createFixture(circle1, 5.0f);

                RevoluteJointDef jd1 = new RevoluteJointDef();
                jd1.bodyA = ground;
                jd1.bodyB = body1;
                ground.getLocalPointToOut(bd1.position, ref jd1.localAnchorA);
                body1.getLocalPointToOut(bd1.position, ref jd1.localAnchorB);
                jd1.referenceAngle = body1.getAngle() - ground.getAngle();
                m_joint1 = (RevoluteJoint) m_world.createJoint(jd1);

                BodyDef bd2 = new BodyDef();
                bd2.type = BodyType.DYNAMIC;
                bd2.position.set(0.0f, 12.0f);
                Body body2 = m_world.createBody(bd2);
                body2.createFixture(circle2, 5.0f);

                RevoluteJointDef jd2 = new RevoluteJointDef();
                jd2.initialize(ground, body2, bd2.position);
                m_joint2 = (RevoluteJoint) m_world.createJoint(jd2);

                BodyDef bd3 = new BodyDef();
                bd3.type = BodyType.DYNAMIC;
                bd3.position.set(2.5f, 12.0f);
                Body body3 = m_world.createBody(bd3);
                body3.createFixture(box, 5.0f);

                PrismaticJointDef jd3 = new PrismaticJointDef();
                jd3.initialize(ground, body3, bd3.position, new Vec2(0.0f, 1.0f));
                jd3.lowerTranslation = -5.0f;
                jd3.upperTranslation = 5.0f;
                jd3.enableLimit = true;

                m_joint3 = (PrismaticJoint) m_world.createJoint(jd3);

                GearJointDef jd4 = new GearJointDef();
                jd4.bodyA = body1;
                jd4.bodyB = body2;
                jd4.joint1 = m_joint1;
                jd4.joint2 = m_joint2;
                jd4.ratio = circle2.m_radius/circle1.m_radius;
                m_joint4 = (GearJoint) m_world.createJoint(jd4);

                GearJointDef jd5 = new GearJointDef();
                jd5.bodyA = body2;
                jd5.bodyB = body3;
                jd5.joint1 = m_joint2;
                jd5.joint2 = m_joint3;
                jd5.ratio = 1f/circle2.m_radius;
                m_joint5 = (GearJoint) m_world.createJoint(jd5);
            }
        }
Exemple #3
0
 public override void processJoint(Joint joint, long tag)
 {
     if (tag == JOINT_TAG)
     {
         m_joint = (RevoluteJoint) joint;
         isLeft = m_joint.getMotorSpeed() > 0;
     }
     else
     {
         base.processJoint(joint, tag);
     }
 }
Exemple #4
0
        public override void initTest(bool deserialized)
        {
            if (deserialized)
            {
                return;
            }
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = getWorld().createBody(bd);

                EdgeShape shape = new EdgeShape();
                shape.set(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.createFixture(shape, 0.0f);
            }

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

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

                RevoluteJointDef rjd = new RevoluteJointDef();

                bd.position.set(-10f, 20.0f);
                Body body = getWorld().createBody(bd);
                body.createFixture(shape, 5.0f);

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

                rjd.initialize(ground, body, new Vec2(-10.0f, 12.0f));
                rjd.motorSpeed = -1.0f*MathUtils.PI;
                rjd.maxMotorTorque = 10000.0f;
                rjd.enableMotor = false;
                rjd.lowerAngle = -0.25f*MathUtils.PI;
                rjd.upperAngle = 0.5f*MathUtils.PI;
                rjd.enableLimit = true;
                rjd.collideConnected = true;

                m_joint = (RevoluteJoint) getWorld().createJoint(rjd);
            }

            {
                CircleShape circle_shape = new CircleShape();
                circle_shape.m_radius = 3.0f;

                BodyDef circle_bd = new BodyDef();
                circle_bd.type = BodyType.DYNAMIC;
                circle_bd.position.set(5.0f, 30.0f);

                FixtureDef fd = new FixtureDef();
                fd.density = 5.0f;
                fd.filter.maskBits = 1;
                fd.shape = circle_shape;

                Body ball = m_world.createBody(circle_bd);
                ball.createFixture(fd);

                PolygonShape polygon_shape = new PolygonShape();
                polygon_shape.setAsBox(10.0f, 0.2f, new Vec2(-10.0f, 0.0f), 0.0f);

                BodyDef polygon_bd = new BodyDef();
                polygon_bd.position.set(20.0f, 10.0f);
                polygon_bd.type = BodyType.DYNAMIC;
                polygon_bd.bullet = true;
                Body polygon_body = m_world.createBody(polygon_bd);
                polygon_body.createFixture(polygon_shape, 2.0f);

                RevoluteJointDef rjd = new RevoluteJointDef();
                rjd.initialize(ground, polygon_body, new Vec2(20.0f, 10.0f));
                rjd.lowerAngle = -0.25f*MathUtils.PI;
                rjd.upperAngle = 0.0f*MathUtils.PI;
                rjd.enableLimit = true;
                m_world.createJoint(rjd);
            }

            // Tests mass computation of a small object far from the origin
            {
                BodyDef bodyDef = new BodyDef();
                bodyDef.type = BodyType.DYNAMIC;
                Body body = m_world.createBody(bodyDef);

                PolygonShape polyShape = new PolygonShape();
                Vec2[] verts = new Vec2[3];
                verts[0] = new Vec2(17.63f, 36.31f);
                verts[1] = new Vec2(17.52f, 36.69f);
                verts[2] = new Vec2(17.19f, 36.36f);
                polyShape.set(verts, 3);

                FixtureDef polyFixtureDef = new FixtureDef();
                polyFixtureDef.shape = polyShape;
                polyFixtureDef.density = 1;

                body.createFixture(polyFixtureDef); // assertion hits inside here
            }
        }
Exemple #5
0
        public override void initTest(bool argDeserialized)
        {
            if (argDeserialized)
            {
                return;
            }

            m_offset.set(0.0f, 8.0f);
            m_motorSpeed = 2.0f;
            m_motorOn = true;
            Vec2 pivot = new Vec2(0.0f, 0.8f);

            // Ground
            {
                BodyDef bd = new BodyDef();
                Body ground = getWorld().createBody(bd);

                EdgeShape shape = new EdgeShape();
                shape.set(new Vec2(-50.0f, 0.0f), new Vec2(50.0f, 0.0f));
                ground.createFixture(shape, 0.0f);

                shape.set(new Vec2(-50.0f, 0.0f), new Vec2(-50.0f, 10.0f));
                ground.createFixture(shape, 0.0f);

                shape.set(new Vec2(50.0f, 0.0f), new Vec2(50.0f, 10.0f));
                ground.createFixture(shape, 0.0f);
            }

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

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

                Body body = getWorld().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.set(pivot);
                bd.position.addLocal(m_offset);
                m_chassis = getWorld().createBody(bd);
                m_chassis.createFixture(sd);
            }

            {
                CircleShape shape = new CircleShape();
                shape.m_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.set(pivot);
                bd.position.addLocal(m_offset);
                m_wheel = getWorld().createBody(bd);
                m_wheel.createFixture(sd);
            }

            {
                RevoluteJointDef jd = new RevoluteJointDef();

                jd.initialize(m_wheel, m_chassis, pivot.add(m_offset));
                jd.collideConnected = false;
                jd.motorSpeed = m_motorSpeed;
                jd.maxMotorTorque = 400.0f;
                jd.enableMotor = m_motorOn;
                m_motorJoint = (RevoluteJoint) getWorld().createJoint(jd);
            }

            Vec2 wheelAnchor;

            wheelAnchor = pivot.add(new Vec2(0.0f, -0.8f));

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

            m_wheel.setTransform(m_wheel.getPosition(), 120.0f*MathUtils.PI/180.0f);
            createLeg(-1.0f, wheelAnchor);
            createLeg(1.0f, wheelAnchor);

            m_wheel.setTransform(m_wheel.getPosition(), -120.0f*MathUtils.PI/180.0f);
            createLeg(-1.0f, wheelAnchor);
            createLeg(1.0f, wheelAnchor);
        }
Exemple #6
0
 public override void processJoint(Joint argJoint, long argTag)
 {
     if (argTag == MOTOR_TAG)
     {
         m_motorJoint = (RevoluteJoint) argJoint;
         m_motorOn = m_motorJoint.isMotorEnabled();
     }
 }
Exemple #7
0
        public override void initTest(bool argDeserialized)
        {
            if (argDeserialized)
            {
                return;
            }

            Body leftWall = null;
            Body rightWall = null;
            {
                // Ground
                PolygonShape sd = new PolygonShape();
                sd.setAsBox(50.0f, 10.0f);
                BodyDef bd = new BodyDef();
                bd.type = BodyType.STATIC;
                bd.position = new Vec2(0.0f, -10.0f);
                Body b = getWorld().createBody(bd);
                FixtureDef fd = new FixtureDef();
                fd.shape = sd;
                fd.friction = 1.0f;
                b.createFixture(fd);

                // Walls
                sd.setAsBox(3.0f, 50.0f);
                bd = new BodyDef();
                bd.position = new Vec2(45.0f, 25.0f);
                rightWall = getWorld().createBody(bd);
                rightWall.createFixture(sd, 0);
                bd.position = new Vec2(-45.0f, 25.0f);
                leftWall = getWorld().createBody(bd);
                leftWall.createFixture(sd, 0);

                // Corners
                bd = new BodyDef();
                sd.setAsBox(20.0f, 3.0f);
                bd.angle = (float) (-System.Math.PI/4.0);
                bd.position = new Vec2(-35f, 8.0f);
                Body myBod = getWorld().createBody(bd);
                myBod.createFixture(sd, 0);
                bd.angle = (float) (System.Math.PI/4.0);
                bd.position = new Vec2(35f, 8.0f);
                myBod = getWorld().createBody(bd);
                myBod.createFixture(sd, 0);

                // top
                sd.setAsBox(50.0f, 10.0f);
                bd.type = BodyType.STATIC;
                bd.angle = 0;
                bd.position = new Vec2(0.0f, 75.0f);
                b = getWorld().createBody(bd);
                fd.shape = sd;
                fd.friction = 1.0f;
                b.createFixture(fd);

            }

            CircleShape cd;
            FixtureDef fd2 = new FixtureDef();

            BodyDef bd2 = new BodyDef();
            bd2.type = BodyType.DYNAMIC;
            int numPieces = 5;
            float radius = 6f;
            bd2.position = new Vec2(0.0f, 10.0f);
            Body body = getWorld().createBody(bd2);
            for (int i = 0; i < numPieces; i++)
            {
                cd = new CircleShape();
                cd.m_radius = 1.2f;
                fd2.shape = cd;
                fd2.density = 25;
                fd2.friction = .1f;
                fd2.restitution = .9f;
                float xPos = radius*(float) System.Math.Cos(2f*System.Math.PI*(i/(float) (numPieces)));
                float yPos = radius*(float) System.Math.Sin(2f*System.Math.PI*(i/(float) (numPieces)));
                cd.m_p.set(xPos, yPos);

                body.createFixture(fd2);
            }

            body.setBullet(false);

            RevoluteJointDef rjd = new RevoluteJointDef();
            rjd.initialize(body, getGroundBody(), body.getPosition());
            rjd.motorSpeed = MathUtils.PI;
            rjd.maxMotorTorque = 1000000.0f;
            rjd.enableMotor = true;
            joint = (RevoluteJoint) getWorld().createJoint(rjd);

            {
                int loadSize = 41;

                for (int j = 0; j < 15; j++)
                {
                    for (int i = 0; i < loadSize; i++)
                    {
                        CircleShape circ = new CircleShape();
                        BodyDef bod = new BodyDef();
                        bod.type = BodyType.DYNAMIC;
                        circ.m_radius = 1.0f + (i%2 == 0 ? 1.0f : -1.0f)*.5f*MathUtils.randomFloat(.5f, 1f);
                        FixtureDef fd3 = new FixtureDef();
                        fd3.shape = circ;
                        fd3.density = circ.m_radius*1.5f;
                        fd3.friction = 0.5f;
                        fd3.restitution = 0.7f;
                        float xPos = -39f + 2*i;
                        float yPos = 50f + j;
                        bod.position = new Vec2(xPos, yPos);
                        Body myBody = getWorld().createBody(bod);
                        myBody.createFixture(fd3);

                    }
                }

            }

            getWorld().setGravity(new Vec2(0, -50));
        }
Exemple #8
0
 public override void processJoint(Joint argJoint, long argTag)
 {
     if (argTag == JOINT_TAG)
     {
         joint = (RevoluteJoint) argJoint;
     }
 }
Exemple #9
0
        public override void initTest(bool argDeserialized)
        {
            Body ground = null;
            {
                BodyDef bd = new BodyDef();
                ground = getWorld().createBody(bd);

                EdgeShape shape = new EdgeShape();
                shape.set(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
                ground.createFixture(shape, 0.0f);
            }

            {
                Body prevBody = ground;

                // Define crank.
                {
                    PolygonShape shape = new PolygonShape();
                    shape.setAsBox(0.5f, 2.0f);

                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.DYNAMIC;
                    bd.position.set(0.0f, 7.0f);
                    Body body = getWorld().createBody(bd);
                    body.createFixture(shape, 2.0f);

                    RevoluteJointDef rjd = new RevoluteJointDef();
                    rjd.initialize(prevBody, body, new Vec2(0.0f, 5.0f));
                    rjd.motorSpeed = 1.0f*MathUtils.PI;
                    rjd.maxMotorTorque = 10000.0f;
                    rjd.enableMotor = true;
                    m_joint1 = (RevoluteJoint) getWorld().createJoint(rjd);

                    prevBody = body;
                }

                // Define follower.
                {
                    PolygonShape shape = new PolygonShape();
                    shape.setAsBox(0.5f, 4.0f);

                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.DYNAMIC;
                    bd.position.set(0.0f, 13.0f);
                    Body body = getWorld().createBody(bd);
                    body.createFixture(shape, 2.0f);

                    RevoluteJointDef rjd = new RevoluteJointDef();
                    rjd.initialize(prevBody, body, new Vec2(0.0f, 9.0f));
                    rjd.enableMotor = false;
                    getWorld().createJoint(rjd);

                    prevBody = body;
                }

                // Define piston
                {
                    PolygonShape shape = new PolygonShape();
                    shape.setAsBox(1.5f, 1.5f);

                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.DYNAMIC;
                    bd.fixedRotation = true;
                    bd.position.set(0.0f, 17.0f);
                    Body body = getWorld().createBody(bd);
                    body.createFixture(shape, 2.0f);

                    RevoluteJointDef rjd = new RevoluteJointDef();
                    rjd.initialize(prevBody, body, new Vec2(0.0f, 17.0f));
                    getWorld().createJoint(rjd);

                    PrismaticJointDef pjd = new PrismaticJointDef();
                    pjd.initialize(ground, body, new Vec2(0.0f, 17.0f), new Vec2(0.0f, 1.0f));

                    pjd.maxMotorForce = 1000.0f;
                    pjd.enableMotor = false;

                    m_joint2 = (PrismaticJoint) getWorld().createJoint(pjd);
                }

                // Create a payload
                {
                    PolygonShape shape = new PolygonShape();
                    shape.setAsBox(1.5f, 1.5f);

                    BodyDef bd = new BodyDef();
                    bd.type = BodyType.DYNAMIC;
                    bd.position.set(0.0f, 23.0f);
                    Body body = getWorld().createBody(bd);
                    body.createFixture(shape, 2.0f);
                }
            }
        }