float CCar::EngineDriveSpeed() { //float wheel_speed,drive_speed=phInfinity; float calc_rpm=0.f; if(b_transmission_switching) { calc_rpm=m_max_rpm; if(m_current_rpm>m_power_rpm) { b_transmission_switching=false; } }else { calc_rpm=EngineRpmFromWheels(); if(!b_clutch&&calc_rpm<m_min_rpm) { calc_rpm=m_min_rpm; } limit_above(calc_rpm,m_max_rpm) ; } if(calc_rpm>m_current_rpm) return (1.f-m_rpm_increment_factor)*m_current_rpm+m_rpm_increment_factor*calc_rpm; else return (1.f-m_rpm_decrement_factor)*m_current_rpm+m_rpm_decrement_factor*calc_rpm; //if(drive_speed<phInfinity) return dFabs(drive_speed*m_current_gear_ratio); //else return 0.f; }
void TTestDepthCallback (bool& do_colide,bool bo1,dContact& c,SGameMtl* material_1,SGameMtl* material_2) { if(saved_callback)saved_callback(do_colide,bo1,c,material_1,material_2); if(do_colide&&!material_1->Flags.test(SGameMtl::flPassable) &&!material_2->Flags.test(SGameMtl::flPassable)) { float& depth=c.geom.depth; float test_depth=depth-Pars::decrement_depth; save_max(max_depth,test_depth); c.surface.mu*=Pars::calback_friction_factor; if(test_depth>Pars::depth_to_use_force) { float force = Pars::callback_force_factor*ph_world->Gravity(); dBodyID b1=dGeomGetBody(c.geom.g1); dBodyID b2=dGeomGetBody(c.geom.g2); if(b1)dBodyAddForce(b1,c.geom.normal[0]*force,c.geom.normal[1]*force,c.geom.normal[2]*force); if(b2)dBodyAddForce(b2,-c.geom.normal[0]*force,-c.geom.normal[1]*force,-c.geom.normal[2]*force); dxGeomUserData* ud1=retrieveGeomUserData(c.geom.g1); dxGeomUserData* ud2=retrieveGeomUserData(c.geom.g2); if(ud1) { CPhysicsShell* phsl=ud1->ph_ref_object->PPhysicsShell(); if(phsl) phsl->Enable(); } if(ud2) { CPhysicsShell* phsl=ud2->ph_ref_object->PPhysicsShell(); if(phsl) phsl->Enable(); } do_colide=false; } else if(test_depth>Pars::depth_to_change_softness_pars) { c.surface.soft_cfm=Pars::callback_cfm_factor; c.surface.soft_erp=Pars::callback_erp_factor; } limit_above(depth,Pars::max_real_depth); } }
void stack(node_t *n, bool focused) { if (IS_FLOATING(n->client) && !auto_raise) { return; } if (stack_head == NULL) { stack_insert_after(NULL, n); } else { stacking_list_t *s = (focused ? limit_above(n) : limit_below(n)); if (s == NULL) { return; } int i = stack_cmp(n->client, s->node->client); if (i < 0 || (i == 0 && !focused)) { stack_insert_before(s, n); window_below(n->client->window, s->node->client->window); } else { stack_insert_after(s, n); window_above(n->client->window, s->node->client->window); } } }