static int l_physics_setBodyCenterOfGravity(lua_State* state) { l_tools_checkUserDataPlusErrMsg(state, 1, "You must provide a body"); l_physics_Body* body = (l_physics_Body*)lua_touserdata(state, 1); cpVect value = cpvzero; value.x = l_tools_toNumberOrError(state, 2); value.y = l_tools_toNumberOrError(state, 3); cpBodySetCenterOfGravity(body->body, value); return 0; }
void RigidBody2D::SetMassCenter(const Vector2f& center, CoordSys coordSys) { cpVect massCenter = cpv(center.x, center.y); switch (coordSys) { case CoordSys_Global: massCenter = cpBodyWorldToLocal(m_handle, massCenter); break; case CoordSys_Local: break; // Nothing to do } cpBodySetCenterOfGravity(m_handle, massCenter); }
Ship(int vn, cpVect* vl, cpVect pos, Genome* ng = 0) { float mass = cpAreaForPoly(vn, vl, 0) * ship_density; float moi = cpMomentForPoly(mass, vn, vl, cpv(0, 0), 0); body = cpBodyNew(mass, moi); cpshape = cpPolyShapeNew(body, vn, vl, cpTransformIdentity, 0); cpShapeSetFriction(cpshape, 0.9); cpVect centroid = cpCentroidForPoly(vn, vl); shape.setPointCount(vn); for (int i = 0; i < vn; i++) { shape.setPoint(i, sf::Vector2f(vl[i].x, vl[i].y)); } cpBodySetCenterOfGravity(body, centroid); cpBodySetPosition(body, pos-centroid); cpBodySetVelocity(body, cpv(0, 0)); cpShapeSetCollisionType(cpshape, 1); cpShapeSetUserData(cpshape, this); last_fired = 0; nose_angle = PI/2; player = false; target = 0; score = 0; if (ng == 0) { Genome* braingenome = mutate(readgenome("shipmind.mind")); brain = braingenome->makenetwork(); delete braingenome; } else { brain = ng->makenetwork(); } score = 0; }
void RigidBody2D::SetMassCenter(const Vector2f& center) { cpBodySetCenterOfGravity(m_handle, cpv(center.x, center.y)); }