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; } }
Collider& Collider::move(const Vec2d& dx) { position_ += dx; clamping(); return *this; }
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(); }
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_; }
void Collider::setPosition(const Vec2d& position) { position_ = position; clamping(); }