コード例 #1
0
ファイル: explosive.cpp プロジェクト: teritriano/ftf
void fff::explosive::setPosition(float x, float y){
    cpCircleShapeSetOffset(shape, (cpVect){x, y});
    sprite.SetPosition(x, y);
    explosion.SetPosition(x, y);
    signal.SetX(x);
    meters.SetX(x);
}
コード例 #2
0
void PhysicsShapeCircle::updateScale()
{
    cpFloat factor = std::abs(_newScaleX / _scaleX);

    cpShape* shape = _cpShapes.front();
    cpVect v = cpCircleShapeGetOffset(shape);
    v = cpvmult(v, factor);
    cpCircleShapeSetOffset(shape, v);

    cpCircleShapeSetRadius(shape, cpCircleShapeGetRadius(shape) * factor);

    PhysicsShape::updateScale();
}
コード例 #3
0
ファイル: wrapper.c プロジェクト: Et999/Hipmunk
// From chipmunk_unsafe.h
void wrCircleShapeSetOffset(cpShape *shape, cpVect *offset) {
    cpCircleShapeSetOffset(shape, *offset);
}
コード例 #4
0
ファイル: editor.c プロジェクト: davidreynolds/Atlas2D
static void pullControlPoint(cpShape *shape) {
    int i;
    float origArea, newArea, newMass;
    control_point_t *cp;
    cpPolyShape *ps;
    cpCircleShape *circle;
    cpVect lp;
    cpVect verts[4];
    cpConstraint *mouseJoint;

    mouseJoint = atlMouseJoint();

    if (!mouseJoint) {
        lp = cpBodyWorld2Local(shape->body, atlMouseClickPos());
    } else {
        /* update joint position */
        lp = cpBodyWorld2Local(shape->body, atlMousePos());
        atlRemoveMouseJoint(g_Space);
    }

    atlCreateMouseJoint(g_Space, shape->body, lp);

    cp = (control_point_t *)shape->data;
    ps = (cpPolyShape *)cp->dom->shape;

    control_point_t *circlePoint;

    for (i = 0; i < 4; ++i) {
        verts[i] = cpPolyShapeGetVert((cpShape *)ps, i);
        if (lp.x > 0) {
            if (verts[i].x > 0)
                verts[i].x = lp.x;
            else
                verts[i].x = -lp.x;
        } else if (lp.x < 0) {
            if (verts[i].x < 0)
                verts[i].x = lp.x;
            else
                verts[i].x = -lp.x;
        }

        if (lp.y > 0) {
            if (verts[i].y > 0)
                verts[i].y = lp.y;
            else
                verts[i].y = -lp.y;
        } else if (lp.y < 0) {
            if (verts[i].y < 0)
                verts[i].y = lp.y;
            else
                verts[i].y = -lp.y;
        }

        circlePoint = (control_point_t *)cp->dom->pControlPoints[i];
        circle = (cpCircleShape *)circlePoint->shape;
        cpCircleShapeSetOffset((cpShape *)circle, verts[i]);
    }

    origArea = (fabs(dominoVerts[0].x)+dominoVerts[3].x) *
               (fabs(dominoVerts[0].y)+dominoVerts[1].y);
    newArea = (fabs(verts[0].x)+verts[3].x) *
              (fabs(verts[0].y)+verts[1].y);

    if (newArea > origArea)
        newMass = newArea/origArea * 0.05f;
    else
        newMass = 1.0f;

    cpBodySetMass(cp->dom->body, newMass);
    cpPolyShapeSetVerts((cpShape *)ps, ps->numVerts, verts, cpvzero);
}