Value * tumble ( std::list<Value *> * args, Scope * s ) { World * world = current_gro_program->get_world(); std::list<Value *>::iterator i = args->begin(); float vel = (*i)->num_value(); if ( current_cell != NULL ) { float a = current_cell->get_theta(); cpBody * body = current_cell->get_body(); cpVect v = cpBodyGetVel ( body ); cpFloat adot = cpBodyGetAngVel ( body ); cpBodySetTorque ( body, vel - adot ); // apply torque cpBodyApplyForce ( // damp translation current_cell->get_shape()->body, cpv ( - v.x * world->get_sim_dt(), - v.y * world->get_sim_dt() ), cpv ( 0, 0 ) ); } else printf ( "Warning: Tried to emit signal from outside a cell program. No action taken\n" ); return new Value ( Value::UNIT ); }
void RigidBody2D::CopyBodyData(cpBody* body) { cpBodySetAngle(m_handle, cpBodyGetAngle(body)); cpBodySetAngularVelocity(m_handle, cpBodyGetAngularVelocity(body)); cpBodySetCenterOfGravity(m_handle, cpBodyGetCenterOfGravity(body)); cpBodySetForce(m_handle, cpBodyGetForce(body)); cpBodySetPosition(m_handle, cpBodyGetPosition(body)); cpBodySetTorque(m_handle, cpBodyGetTorque(body)); cpBodySetVelocity(m_handle, cpBodyGetVelocity(body)); }
void RigidBody2D::CopyBodyData(cpBody* from, cpBody* to) { cpBodySetAngle(to, cpBodyGetAngle(from)); cpBodySetAngularVelocity(to, cpBodyGetAngularVelocity(from)); cpBodySetCenterOfGravity(to, cpBodyGetCenterOfGravity(from)); cpBodySetForce(to, cpBodyGetForce(from)); cpBodySetPosition(to, cpBodyGetPosition(from)); cpBodySetTorque(to, cpBodyGetTorque(from)); cpBodySetVelocity(to, cpBodyGetVelocity(from)); }
static int l_physics_setBodyTorque(lua_State* state) { l_tools_checkUserDataPlusErrMsg(state, 1, "You must provide a body"); l_physics_Body* body = (l_physics_Body*)lua_touserdata(state, 1); float value = l_tools_toNumberOrError(state, 2); cpBodySetTorque(body->body, value); return 0; }
void update_turn() { int i; for(i=0; i<1; i++) { cpFloat desired_torque = 0; if(controls.left) desired_torque = -1100; else if(controls.right) desired_torque = 1100; cpBodySetTorque(tire[i], desired_torque); } }
static void internalBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt) { cpBodyUpdateVelocity(body, cpvzero, damping, dt); // Skip kinematic bodies. if(cpBodyGetType(body) == CP_BODY_TYPE_KINEMATIC) return; cpAssertSoft(body->m > 0.0f && body->i > 0.0f, "Body's mass and moment must be positive to simulate. (Mass: %f Moment: f)", body->m, body->i); cocos2d::PhysicsBody *physicsBody = static_cast<cocos2d::PhysicsBody*>(body->userData); if(physicsBody->isGravityEnabled()) body->v = cpvclamp(cpvadd(cpvmult(body->v, damping), cpvmult(cpvadd(gravity, cpvmult(body->f, body->m_inv)), dt)), physicsBody->getVelocityLimit()); else body->v = cpvclamp(cpvadd(cpvmult(body->v, damping), cpvmult(cpvmult(body->f, body->m_inv), dt)), physicsBody->getVelocityLimit()); cpFloat w_limit = physicsBody->getAngularVelocityLimit(); body->w = cpfclamp(body->w*damping + body->t*body->i_inv*dt, -w_limit, w_limit); // Reset forces. body->f = cpvzero; //to check body sanity cpBodySetTorque(body, 0.0f); }
void cBody::Torque( const cpFloat& torque ) { cpBodySetTorque( mBody, torque ); }
void PhysicsBody::applyTorque(float torque) { cpBodySetTorque(_info->getBody(), PhysicsHelper::float2cpfloat(torque)); }
void PhysicsBody::applyTorque(float torque) { cpBodySetTorque(_cpBody, torque); }
void RigidBody2D::AddTorque(float torque) { cpBodySetTorque(m_handle, cpBodyGetTorque(m_handle) + ToRadians(torque)); }
void RigidBody2D::AddTorque(const RadianAnglef& torque) { cpBodySetTorque(m_handle, cpBodyGetTorque(m_handle) + torque.value); }
void physics_set_torque(Entity ent, Scalar torque) { PhysicsInfo *info = entitypool_get(pool, ent); error_assert(info); cpBodySetTorque(info->body, torque); }
void PhysicsBody::applyTorque(float torque) { cpBodySetTorque(_cpBody, PhysicsHelper::float2cpfloat(torque)); }
void Body::setTorque(cpFloat value) { cpBodySetTorque(body,value); }
void RCPBody::setTorque(float t) { if (mBody) { cpBodySetTorque(mBody, t); } }