Пример #1
0
bool Bee:: movebee(sf::Time dt) // on modularise car on en a besoin pour targetmove() et randomMove()
{
	double beta(0);
	
	// calcule de la position envisagée en fonction du vecteur vitesse
	Vec2d possible_pos = centre + speed_*dt.asSeconds();
	
	//verifier que l'abeille peut occuper cette position
	if(getAppEnv().world_.isFlyable(possible_pos))
	{
		//si oui bouger le centre du collider abeille
		centre=possible_pos;
		//on s'assure que il fait toujorus partie de la carte
		clamping();
		return 1;
	} else //si la position envisagée n'est pas libre
	{
		//changement de direction dans la sens opposé
		if(bernoulli(prob))
		{	
			beta=PI/4;
		} else
		{
			beta= -PI/4;
		}
		speed_.rotate(beta);
		clamping();
		return 0;
	}
}
Пример #2
0
Collider&
Collider::move(const Vec2d& dx)
{
    position_ += dx;

    clamping();
    return *this;
}
Пример #3
0
Collider::Collider(const Vec2d& position, double radius)
// affecte par défaut le rayon et la position
    :
    radius_(radius), position_(position)
{
    reloadConfig();
    // PRECODITIONS for constructor
    if (radius_ < 0) {
        throw std::runtime_error(
            "Collider with negative radius created. (Collider::Collider)");
    }

    // puts Collider into map
    clamping();
}
Пример #4
0
Vec2d
Collider::clamping()
{
    //tant que position en x <0, on lui incrémente la largeur du monde
    //tant que position > largeur du monde, on lui décremente la largeur du monde

    if (position_.x < 0)
        position_.x += world_size_.x;

    if (position_.x > world_size_.x)
        position_.x -= world_size_.x;

    //idem pour position en y
    if (position_.y < 0)
        position_.y += world_size_.y;

    if (position_.y > world_size_.y)
        position_.y -= world_size_.y;

    if (!isClamped())
        clamping();
    //retourne le nouveau vec2d position
    return position_;
}
Пример #5
0
void
Collider::setPosition(const Vec2d& position)
{
    position_ = position;
    clamping();
}