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); }
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(); }
// From chipmunk_unsafe.h void wrCircleShapeSetOffset(cpShape *shape, cpVect *offset) { cpCircleShapeSetOffset(shape, *offset); }
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); }