Exemplo n.º 1
0
    // Use this for initialization
    protected override void Init()
    {
        var ground = API.CreateBody(world, new Vector2(0,0), 0, BodyType.STATIC_BODY );

        BodyDef bd = new BodyDef(BodyType.DYNAMIC_BODY);
        bd.allowSleep = false;
        bd.position = new Vector2(0,10);
        m_body = API.CreateBody(world, bd);
        API.AddBoxShape(m_body,0.5f,10.0f,new Vector2(10.0f,0),0,new ShapeDef(5.0f));
        API.AddBoxShape(m_body,0.5f,10.0f,new Vector2(-10.0f,0),0,new ShapeDef(5.0f));
        API.AddBoxShape(m_body,10.0f,0.5f,new Vector2(0,10),0,new ShapeDef(5.0f));
        API.AddBoxShape(m_body,10.0f,0.5f,new Vector2(0,-10),0,new ShapeDef(5.0f));

        RevoluteJointDef rjd = new RevoluteJointDef(IntPtr.Zero, IntPtr.Zero);
        rjd.bodyA = ground;
        rjd.bodyB = m_body;
        rjd.localAnchorA = new Vector2(0,10);
        rjd.localAnchorB = Vector2.zero;
        rjd.referenceAngle = 0;
        rjd.motorSpeed = 0.05f * Mathf.PI;
        rjd.maxMotorTorque = 1e8f;
        rjd.enableMotor = true;

        API.CreateRevoluteJoint(world, rjd);
    }
Exemplo n.º 2
0
    public void Start()
    {
        if (!started)
        {
            started = true;

            BodyDef def = new BodyDef( type );
            def.position = transform.position;
            def.angle = transform.localEulerAngles.z*Mathf.Deg2Rad;
            def.linearVelocity = linearVelocity;
            def.angularVelocity = angularVelocity;
            def.linearDamping = linearDamping;
            def.angularDamping = angularDamping;
            def.allowSleep = allowSleep;
            def.awake = awake;
            def.fixedRotation = fixedRotation;
            def.bullet = bullet;
            def.active = active;
            def.userData = 0;
            def.gravityScale = gravityScale;

            body = API.CreateBody(B2DWorld.instance.world, def);
        }
    }
Exemplo n.º 3
0
 public static IntPtr CreateBody( IntPtr w, Vector2 pos, float angle, BodyType type)
 {
     BodyDef bd = new BodyDef(type);
     bd.position = pos;
     bd.angle = angle;
     return CreateBody(w,bd);
 }
Exemplo n.º 4
0
 public static extern IntPtr CreateBody( IntPtr w, BodyDef def);
Exemplo n.º 5
0
    // Use this for initialization
    protected override void Init()
    {
        API.SetGravity(world,Vector2.zero);
        var ground = API.CreateBody(world, new Vector2(0,20), 0, BodyType.STATIC_BODY );
        ShapeDef sp = new ShapeDef(0);
        sp.restitution = 0.4f;

        API.AddEdgeShape(ground, new Vector2(-20,-20), new Vector2(-20,20), sp);
        API.AddEdgeShape(ground, new Vector2(20,-20), new Vector2(20,20), sp);
        API.AddEdgeShape(ground, new Vector2(-20,20), new Vector2(20,20), sp);
        API.AddEdgeShape(ground, new Vector2(-20,-20), new Vector2(20,-20), sp);

        BodyDef bd = new BodyDef(BodyType.DYNAMIC_BODY);
        bd.allowSleep = false;
        bd.angle = 3.14159265359f;
        bd.angularDamping = 5.0f;
        bd.linearDamping = 0.1f;
        bd.position = new Vector2(0,2);
        m_body = API.CreateBody(world,bd);

        sp.restitution = 0.0f;
        sp.density = 4.0f;

        b2Transform xf1 = new b2Transform();
        xf1.q = new b2Rot(0.3524f * Mathf.PI);
        xf1.p = xf1.q.GetXAxis();

        Vector2[] vertices = new Vector2[3];
        vertices[0] = b2Math.b2Mul(xf1, new Vector2(-1.0f, 0.0f));
        vertices[1] = b2Math.b2Mul(xf1, new Vector2(1.0f, 0.0f));
        vertices[2] = b2Math.b2Mul(xf1, new Vector2(0.0f, 0.5f));

        API.AddPolygonShape(m_body, vertices, vertices.Length, sp);

        sp.density = 2.0f;
        xf1.q = new b2Rot(-0.3524f * Mathf.PI);
        xf1.p = -xf1.q.GetXAxis();

        vertices[0] = b2Math.b2Mul(xf1, new Vector2(-1.0f, 0.0f));
        vertices[1] = b2Math.b2Mul(xf1, new Vector2(1.0f, 0.0f));
        vertices[2] = b2Math.b2Mul(xf1, new Vector2(0.0f, 0.5f));

        API.AddPolygonShape(m_body, vertices, vertices.Length, sp);

        sp.density = 1.0f;
        sp.friction = 0.3f;
        float gravity = 10;

        FrictionJointDef jd = new FrictionJointDef();
        for(int i=0; i<10; ++i)
        {
            var b = API.CreateBody(world, new Vector2(0,5.0f+1.54f*i), 0, BodyType.DYNAMIC_BODY );
            API.AddBoxShape(b, 0.5f, 0.5f, Vector2.zero, 0, sp);
            float I = API.GetInertia(b);
            float mass = API.GetMass(b);
            float radius = Mathf.Sqrt(2.0f*I/mass);

            jd.bodyA = ground;
            jd.bodyB = b;
            jd.collideConnected = true;
            jd.maxForce = mass*gravity;
            jd.maxTorque = mass*radius*gravity;

            API.CreateFrictionJoint(world,jd);
        }
    }
Exemplo n.º 6
0
    void CreateLeg(float s, Vector2 wheelAnchor)
    {
        Vector2 p1 = new Vector2(5.4f * s, -6.1f);
        Vector2 p2 = new Vector2(7.2f * s, -1.2f);
        Vector2 p3 = new Vector2(4.3f * s, -1.9f);
        Vector2 p4 = new Vector2(3.1f * s, 0.8f);
        Vector2 p5 = new Vector2(6.0f * s, 1.5f);
        Vector2 p6 = new Vector2(2.5f * s, 3.7f);

        ShapeDef sp = new ShapeDef(1.0f);
        sp.groupIndex = -1;
        Vector2[] vertices1 = new Vector2[3];
        Vector2[] vertices2 = new Vector2[3];
        if( s > 0.0f )
        {
            vertices1[0] = p1;
            vertices1[1] = p2;
            vertices1[2] = p3;

            vertices2[0] = Vector2.zero;
            vertices2[1] = p5-p4;
            vertices2[2] = p6-p4;
        }
        else
        {
            vertices1[0] = p1;
            vertices1[1] = p3;
            vertices1[2] = p2;

            vertices2[0] = Vector2.zero;
            vertices2[1] = p6-p4;
            vertices2[2] = p5-p4;
        }

        BodyDef bd1 = new BodyDef(BodyType.DYNAMIC_BODY);
        BodyDef bd2 = new BodyDef(BodyType.DYNAMIC_BODY);
        bd1.position = m_offset;
        bd2.position = p4 + m_offset;

        bd1.angularDamping = 10.0f;
        bd2.angularDamping = 10.0f;

        var body1 = API.CreateBody(world,bd1);
        var body2 = API.CreateBody(world,bd2);
        API.AddPolygonShape(body1, vertices1,vertices1.Length,sp);
        API.AddPolygonShape(body2, vertices2,vertices2.Length,sp);

        DistanceJointDef djd = new DistanceJointDef();
        djd.dampingRatio = 0.5f;
        djd.frequencyHz = 10.0f;

        djd.Initialize(body1,body2,p2+m_offset, p5+m_offset);
        API.CreateDistanceJoint(world, djd );

        djd.Initialize(body1, body2, p3 + m_offset, p4 + m_offset);
        API.CreateDistanceJoint(world, djd );

        djd.Initialize(body1, m_wheel, p3 + m_offset, wheelAnchor + m_offset);
        API.CreateDistanceJoint(world, djd );

        djd.Initialize(body2, m_wheel, p6 + m_offset, wheelAnchor + m_offset);
        API.CreateDistanceJoint(world, djd );

        RevoluteJointDef rjd = new RevoluteJointDef();
        rjd.Initialize(body2, m_chassis,p4+m_offset);
        API.CreateRevoluteJoint(world,rjd);
    }