Beispiel #1
0
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(), ")");
}
Beispiel #2
0
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;
		}
	}
}
Beispiel #3
0
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();
    }
}