void Ball::add_speed() { if (velocity_x() < 0.0f) { if (m_ball_speed.x() >= -8 && m_ball_speed.y() >= -6) { m_ball_speed += m_ball_speed() * Random::get_real(0.1f, 0.15f); m_last_ball_speed = m_ball_speed; } } else { if (m_ball_speed.x() <= 8 && m_ball_speed.y() <= 6) { m_ball_speed += m_ball_speed() * Random::get_real(0.1f, 0.15f); m_last_ball_speed = m_ball_speed; } } Debug::log("New speed is: x(", velocity_x(), ") y(", velocity_y(), ")"); }
void simulator::update_particle_position_velocity() { int comID=0; for(int i=0;i<p_particle_data->num_body;i++) { if(p_particle_data->contact) comID=p_particle_data->body_list[i]->component_id; for(int p=p_particle_data->body_list[i]->begin;p<p_particle_data->body_list[i]->end;p++) { particle* pp=p_particle_data->particle_list[p]; pp->icell=p_grid_data->in_which_cell(pp->position_t); if(pp->icell<0) continue; cinder::Vec3f position_x=pp->position_t; cinder::Vec3f velocity_x(0,0,0); cinder::Vec3f acceleration_x(0,0,0); for(int ss=0;ss<8;ss++) p_grid_data->influenced_node_list[ss]=p_grid_data->cell_node_list[pp->icell][ss]; if(p_particle_data->GIMP) { p_grid_data->get_influenced_node_list(pp,pp->icell); p_grid_data->calc_shape_function_GIMP(pp); } else p_grid_data->calc_shape_function(p_grid_data->grid_node_list[p_grid_data->influenced_node_list[0]],pp,2); for(int m=0;m<p_grid_data->num_influence_node;m++) { if(p_grid_data->influenced_node_list[m]>=0&&p_grid_data->influenced_node_list[m]<p_grid_data->num_gridnode) { grid_node_property* gnp=p_grid_data->grid_node_property_list[comID][p_grid_data->influenced_node_list[m]]; if(gnp->mass>p_grid_data->mass_cutoff) { velocity_x+=gnp->momentum/gnp->mass*p_grid_data->value_shape_func[m]; acceleration_x+=gnp->force/gnp->mass*p_grid_data->value_shape_func[m]; } } } //update particle pp->position_t_1=position_x+velocity_x*p_particle_data->time_interval; if(p_particle_data->current_step==1) pp->velocity+=acceleration_x*p_particle_data->time_interval*0.5f; else pp->velocity+=acceleration_x*p_particle_data->time_interval; if(p_particle_data->USF) pp->position_t=pp->position_t_1; } } }
void Ball::move(SDL_Rect* player1, SDL_Rect* player2) { m_BRect.x += velocity_x(); m_BRect.y += velocity_y(); // Detecting the collision in the Y axis. if(m_BRect.y <= 0) { velocity_y(-m_ball_speed.y()); m_last_ball_speed = m_ball_speed; } if(m_BRect.y+m_BRect.h > Window::get_height()) { velocity_y(-m_ball_speed.y()); m_last_ball_speed = m_ball_speed; } // Detecting the collision with the players. if(collision(player1)) { if (m_BRect.x + abs(velocity_x()) < player1->x + player1->w) { velocity_y(-m_ball_speed.y()); } else { if (Paddle::get_hits() == 3) { add_speed(); velocity_x(-m_ball_speed.x()); Paddle::reset_hit_count(); } else { velocity_x(-m_ball_speed.x()); } } m_last_ball_speed = m_ball_speed; if(Game::audio->is_open()) { Game::audio->play_effect(Audio::EffectType::hit_paddle); } Debug::log("Hit count: ", Paddle::get_hits()); Paddle::add_hit(); } if(collision(player2)) { if ((m_BRect.x + m_BRect.w)-velocity_x() > player2->x) { velocity_y(-m_ball_speed.y()); } else { velocity_x(-m_ball_speed.x()); if(Paddle::get_hits() == 3) { add_speed(); Paddle::reset_hit_count(); } else { } } m_last_ball_speed = m_ball_speed; if(Game::audio->is_open()) { Game::audio->play_effect(Audio::EffectType::hit_paddle); } Debug::log("Hit count: ", Paddle::get_hits()); Paddle::add_hit(); } }