def createWorld(self, world):
        world.setContactListener(self)
        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.set(Vector2(-20, 0), Vector2(20, 0))
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.setRadius(0)
        shape.set(Vector2(-8, 1), Vector2(-6, 1))
        ground.createFixture(shape, 0)
        shape.set(Vector2(-6, 1), Vector2(-4, 1))
        ground.createFixture(shape, 0)
        shape.set(Vector2(-4, 1), Vector2(-2, 1))
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(1, 1, Vector2(4, 3), 0)
        ground.createFixture(shape, 0)
        shape.setAsBox(1, 1, Vector2(6, 3), 0)
        ground.createFixture(shape, 0)
        shape.setAsBox(1, 1, Vector2(8, 3), 0)
        ground.createFixture(shape, 0)
        shape.dispose()
Exemplo n.º 2
0
    def createWorld(self, world):
        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.set(Vector2(-40, 0), Vector2(40, 0))

        ground.createFixture(shape, 0.0)
        shape.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.6, 0.125)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0
        fd.friction = 0.2

        jd = RevoluteJointDef()
        jd.collideConnected = False

        y = 25.0
        prevBody = ground

        for i in range(30):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(0.5 + i, y)
            body = world.createBody(bd)
            body.createFixture(fd)

            anchor = Vector2(i, y)
            jd.initialize(prevBody, body, anchor)
            world.createJoint(jd)
            prevBody = body

        shape.dispose()
Exemplo n.º 3
0
    def createWorld(self, world):
        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.set(Vector2(-40, 0), Vector2(40, 0))
        ground.createFixture(shape, 0)
        shape.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.125)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0

        jd = WeldJointDef()

        prevBody = ground
        for i in range(self.e_count):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(-14.5 + 1.0 * i, 5.0)
            body = world.createBody(bd)
            body.createFixture(fd)

            anchor = Vector2(-15.0 + 1 * i, 5.0)
            jd.initialize(prevBody, body, anchor)
            world.createJoint(jd)
            prevBody = body

        shape.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.125)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0

        jd = WeldJointDef()

        prevBody = ground
        for i in range(self.e_count):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(-14.5 + 1.0 * i, 15.0)
            bd.gravityScale = 10.0
            body = world.createBody(bd)
            body.createFixture(fd)

            anchor = Vector2(-15.0 + 1.0 * i, 15.0)
            jd.initialize(prevBody, body, anchor)
            world.createJoint(jd)

            prevBody = body

        shape.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.125)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0

        jd = WeldJointDef()

        prevBody = ground
        for i in range(self.e_count):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(-4.5 + 1.0 * i, 5.0)
            body = world.createBody(bd)
            body.createFixture(fd)

            if i > 0:
                anchor = Vector2(-5.0 + 1.0 * i, 5.0)
                jd.initialize(prevBody, body, anchor)
                world.createJoint(jd)

            prevBody = body

        shape.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.125)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0

        jd = WeldJointDef()

        prevBody = ground
        for i in range(self.e_count):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(5.5 + 1.0 * i, 10.0)
            bd.gravityScale = 10.0
            body = world.createBody(bd)
            body.createFixture(fd)

            if i > 0:
                anchor = Vector2(5.0 + 1.0 * i, 10.0)
                jd.initialize(prevBody, body, anchor)
                world.createJoint(jd)

            prevBody = body

        shape.dispose()

        for i in range(2):
            vertices = []
            vertices.append(Vector2(-0.5, 0))
            vertices.append(Vector2(0.5, 0))
            vertices.append(Vector2(0, 1.5))

            shape = PolygonShape()
            shape.set(vertices)

            fd = FixtureDef()
            fd.shape = shape
            fd.density = 1.0

            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(-8.0 + 8.0 * i, 12.0)
            body = world.createBody(bd)
            body.createFixture(fd)

            shape.dispose()

        for i in range(2):
            shape = CircleShape()
            shape.setRadius(0.5)

            fd = FixtureDef()
            fd.shape = shape
            fd.density = 1.0

            bd = BodyDef()
            bd.type = BodyType.DynamicBody
            bd.position.set(-6.0 + 6.0 * i, 10.0)
            body = world.createBody(bd)
            body.createFixture(fd)
            shape.dispose()
    def createWorld(self, world):
        world.setGravity(Vector2(0, 0))

        k_restitution = 0.4

        bd = BodyDef()
        bd.position.set(0, 20)
        ground = world.createBody(bd)

        shape = EdgeShape()

        sd = FixtureDef()
        sd.shape = shape
        sd.density = 0
        sd.restitution = k_restitution

        shape.set(Vector2(-20, -20), Vector2(-20, 20))
        ground.createFixture(sd)

        shape.set(Vector2(20, -20), Vector2(20, 20))
        ground.createFixture(sd)

        shape.set(Vector2(-20, 20), Vector2(20, 20))
        ground.createFixture(sd)

        shape.set(Vector2(-20, -20), Vector2(20, -20))
        ground.createFixture(sd)

        shape.dispose()

        xf1 = Transform(Vector2(), 0.3524 * Math.PI)
        xf1.setPosition(xf1.mul(Vector2(1, 0)))

        vertices = [None, None, None]
        vertices[0] = xf1.mul(Vector2(-1, 0))
        vertices[1] = xf1.mul(Vector2(1, 0))
        vertices[2] = xf1.mul(Vector2(0, 0.5))

        poly1 = PolygonShape()
        poly1.set(vertices)

        sd1 = FixtureDef()
        sd1.shape = poly1
        sd1.density = 4.0

        xf2 = Transform(Vector2(), -0.3524 * Math.PI)
        xf2.setPosition(xf2.mul(Vector2(-1, 0)))

        vertices[0] = xf2.mul(Vector2(-1, 0))
        vertices[1] = xf2.mul(Vector2(1, 0))
        vertices[2] = xf2.mul(Vector2(0, 0.5))

        poly2 = PolygonShape()
        poly2.set(vertices)

        sd2 = FixtureDef()
        sd2.shape = poly2
        sd2.density = 2.0

        bd = BodyDef()
        bd.type = BodyType.DynamicBody
        bd.angularDamping = 5.0
        bd.linearDamping = 0.1

        bd.position.set(0, 2)
        bd.angle = Math.PI
        bd.allowSleep = False
        self.m_body = world.createBody(bd)
        self.m_body.createFixture(sd1)
        self.m_body.createFixture(sd2)
        poly1.dispose()
        poly2.dispose()

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.5)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 1.0
        fd.friction = 0.3

        for i in range(10):
            bd = BodyDef()
            bd.type = BodyType.DynamicBody

            bd.position.set(0, 5 + 1.54 * i)
            body = world.createBody(bd)

            body.createFixture(fd)

            gravity = 10.0
            I = body.getInertia()
            mass = body.getMass()

            radius = Math.sqrt(2 * I / mass)

            jd = FrictionJointDef()
            jd.localAnchorA.set(0, 0)
            jd.localAnchorB.set(0, 0)
            jd.bodyA = ground
            jd.bodyB = body
            jd.collideConnected = True
            jd.maxForce = mass * gravity
            jd.maxTorque = mass * radius * gravity

            world.createJoint(jd)

        shape.dispose()
    def createWorld(self, world):
        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.set(Vector2(-20, 0), Vector2(20, 0))
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.setRadius(0)
        shape.set(Vector2(-8, 1), Vector2(-6, 1))
        ground.createFixture(shape, 0)
        shape.set(Vector2(-6, 1), Vector2(-4, 1))
        ground.createFixture(shape, 0)
        shape.set(Vector2(-4, 1), Vector2(-2, 1))
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(1, 1, Vector2(4, 3), 0)
        ground.createFixture(shape, 0)
        shape.setAsBox(1, 1, Vector2(6, 3), 0)
        ground.createFixture(shape, 0)
        shape.setAsBox(1, 1, Vector2(8, 3), 0)
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        d = 2 * 2 * 0.005
        shape.setRadius(0)
        shape.set(Vector2(-1 + d, 3), Vector2(1 - d, 3))
        ground.createFixture(shape, 0)
        shape.set(Vector2(1, 3 + d), Vector2(1, 5 - d))
        ground.createFixture(shape, 0)
        shape.set(Vector2(1 - d, 5), Vector2(-1 + d, 5))
        ground.createFixture(shape, 0)
        shape.set(Vector2(-1, 5 - d), Vector2(-1, 3 + d))
        ground.createFixture(shape, 0)
        shape.dispose()

        bd = BodyDef()
        bd.position.set(-3, 5)
        bd.type = BodyType.DynamicBody
        bd.fixedRotation = True
        bd.allowSleep = False

        body = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(0.5, 0.5)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0
        body.createFixture(fd)
        shape.dispose()

        bd = BodyDef()
        bd.position.set(-5, 5)
        bd.type = BodyType.DynamicBody
        bd.fixedRotation = True
        bd.allowSleep = False

        body = world.createBody(bd)

        angle = 0.0
        delta = Math.PI / 3
        vertices = []
        for i in range(6):
            vertices.append(
                Vector2(0.5 * Math.cos(angle), 0.5 * Math.sin(angle)))
            angle += delta

        shape = PolygonShape()
        shape.set(vertices)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0
        body.createFixture(fd)
        shape.dispose()

        bd = BodyDef()
        bd.position.set(3, 5)
        bd.type = BodyType.DynamicBody
        bd.fixedRotation = True
        bd.allowSleep = False

        body = world.createBody(bd)

        shape = CircleShape()
        shape.setRadius(0.5)

        fd = FixtureDef()
        fd.shape = shape
        fd.density = 20.0
        body.createFixture(fd)
        shape.dispose()
Exemplo n.º 6
0
    def createWorld(self, world):
        shape = EdgeShape()
        shape.set(Vector2(-40.0, 0), Vector2(40, 0))

        fd = FixtureDef()
        fd.shape = shape
        fd.friction = 0.3

        bd = BodyDef()
        ground = world.createBody(bd)
        ground.createFixture(fd)
        shape.dispose()

        vertices = []
        vertices.append(Vector2(-1, 0))
        vertices.append(Vector2(1, 0))
        vertices.append(Vector2(0, 2))
        polygon = PolygonShape()
        polygon.set(vertices)

        triangleShapeDef = FixtureDef()
        triangleShapeDef.shape = polygon
        triangleShapeDef.density = 1.0

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

        triangleBodyDef = BodyDef()
        triangleBodyDef.type = BodyType.DynamicBody
        triangleBodyDef.position.set(-5, 2)

        body1 = world.createBody(triangleBodyDef)
        body1.createFixture(triangleShapeDef)

        vertices[0].scl(2)
        vertices[1].scl(2)
        vertices[2].scl(2)

        polygon.set(vertices)
        triangleShapeDef.filter.groupIndex = self.k_largeGroup
        triangleBodyDef.position.set(-5, 6)
        triangleBodyDef.fixedRotation = True

        body2 = world.createBody(triangleBodyDef)
        body2.createFixture(triangleShapeDef)

        bd = BodyDef()
        bd.type = BodyType.DynamicBody
        bd.position.set(-5, 10)
        body = world.createBody(bd)

        p = PolygonShape()
        p.setAsBox(0.5, 1.0)
        body.createFixture(p, 1)

        jd = PrismaticJointDef()
        jd.bodyA = body2
        jd.bodyB = body
        jd.enableLimit = True
        jd.localAnchorA.set(0, 4)
        jd.localAnchorB.set(0, 0)
        jd.localAxisA.set(0, 1)
        jd.lowerTranslation = -1
        jd.upperTranslation = 1

        world.createJoint(jd)

        p.dispose()

        polygon.setAsBox(1, 0.5)
        boxShapeDef = FixtureDef()
        boxShapeDef.shape = polygon
        boxShapeDef.density = 1
        boxShapeDef.restitution = 0.1

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

        boxBodyDef = BodyDef()
        boxBodyDef.type = BodyType.DynamicBody
        boxBodyDef.position.set(0, 2)

        body3 = world.createBody(boxBodyDef)
        body3.createFixture(boxShapeDef)

        polygon.setAsBox(2, 1)
        boxShapeDef.filter.groupIndex = self.k_largeGroup
        boxBodyDef.position.set(0, 6)

        body4 = world.createBody(boxBodyDef)
        body4.createFixture(boxShapeDef)

        circle = CircleShape()
        circle.setRadius(1)

        circleShapeDef = FixtureDef()
        circleShapeDef.shape = circle
        circleShapeDef.density = 1.0

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

        circleBodyDef = BodyDef()
        circleBodyDef.type = BodyType.DynamicBody
        circleBodyDef.position.set(5, 2)

        body5 = world.createBody(circleBodyDef)
        body5.createFixture(circleShapeDef)

        circle.setRadius(2)
        circleShapeDef.filter.groupIndex = self.k_largeGroup
        circleBodyDef.position.set(5, 6)

        body6 = world.createBody(circleBodyDef)
        body6.createFixture(circleShapeDef)
Exemplo n.º 7
0
    def createWorld(self, world):
        ground = None

        bd = BodyDef()
        ground = world.createBody(bd)

        shape = EdgeShape()
        shape.set(Vector2(-20, 0), Vector2(20, 0))

        fd = FixtureDef()
        fd.shape = shape
        ground.createFixture(fd)
        shape.dispose()

        bd = BodyDef()
        bd.type = BodyType.DynamicBody
        bd.position.set(0, 3.0)
        self.m_attachment = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(0.5, 2.0)
        self.m_attachment.createFixture(shape, 2.0)
        shape.dispose()

        bd = BodyDef()
        bd.type = BodyType.DynamicBody
        bd.position.set(-4.0, 5.0)
        self.m_platform = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(0.5, 4.0, Vector2(4.0, 0), 0.5 * Math.PI)

        fd = FixtureDef()
        fd.shape = shape
        fd.friction = 0.6
        fd.density = 2.0

        self.m_platform.createFixture(fd)
        shape.dispose()

        rjd = RevoluteJointDef()
        rjd.initialize(self.m_attachment, self.m_platform, Vector2(0, 5.0))
        rjd.maxMotorTorque = 50.0
        rjd.enableMotor = True
        world.createJoint(rjd)

        pjd = PrismaticJointDef()
        pjd.initialize(ground, self.m_platform, Vector2(0, 5.0), Vector2(1, 0))

        pjd.maxMotorForce = 1000.0
        pjd.enableMotor = True
        pjd.lowerTranslation = -10.0
        pjd.upperTranslation = 10.0
        pjd.enableLimit = True

        world.createJoint(pjd)

        self.m_speed = 3.0

        bd = BodyDef()
        bd.type = BodyType.DynamicBody
        bd.position.set(0, 8.0)
        body = world.createBody(bd)

        shape = PolygonShape()
        shape.setAsBox(0.75, 0.75)

        fd = FixtureDef()
        fd.shape = shape
        fd.friction = 0.6
        fd.density = 2.0

        body.createFixture(fd)
        shape.dispose()