/** * \brief Creates a boomerang. * \param hero the hero * \param max_distance maximum distance of the movement in pixels * \param speed speed of the movement in pixels per second * \param angle the angle of the boomerang trajectory in radians * \param sprite_name animation set id representing the boomerang */ Boomerang::Boomerang( const HeroPtr& hero, int max_distance, int speed, double angle, const std::string& sprite_name ): Entity("", 0, hero->get_layer(), Point(0, 0), Size(0, 0)), hero(hero), has_to_go_back(false), going_back(false), speed(speed) { // initialize the entity create_sprite(sprite_name); set_size(16, 16); set_origin(8, 8); int hero_x = hero->get_top_left_x(); int hero_y = hero->get_top_left_y(); switch (hero->get_animation_direction()) { case 0: set_xy(hero_x + 24, hero_y + 8); break; case 1: set_xy(hero_x + 8, hero_y - 8); break; case 2: set_xy(hero_x - 8, hero_y + 8); break; case 3: set_xy(hero_x + 8, hero_y + 24); break; } std::shared_ptr<StraightMovement> movement = std::make_shared<StraightMovement>(false, false); movement->set_speed(speed); movement->set_angle(angle); movement->set_max_distance(max_distance); set_movement(movement); next_sound_date = System::now(); }