void StraightMovement::set_speed_y(double speed_yy) { if(std::fabs(speed_yy) <= 1E-6) { speed_yy = 0; } this->speed_y = speed_yy; uint32_t now = System::now(); // compute delay_x, move_x, next_move_date_x. if(speed_y > 0) { this->delay_y = (uint32_t) (1000 / this->speed_y); move_y = 1; set_next_move_date_y(now + delay_y); } else if(speed_y < 0) { this->delay_y = (uint32_t) (-1000 / this->speed_y); move_y = -1; set_next_move_date_y(now + delay_y); } else { move_y = 0; } this->angle = Geometry::get_angle(0.f, 0.f, speed_x * 100, speed_y * 100); start_xy.set_xy(get_xy()); this->finished = false; if(get_entity() != NULL) { get_entity()->notify_movement_changed(); } }
/** * @brief Sets the y speed. * @param y_speed the y speed of the object in pixels per second */ void StraightMovement::set_y_speed(double y_speed) { if (std::fabs(y_speed) <= 1E-6) { y_speed = 0; } this->y_speed = y_speed; uint32_t now = System::now(); // compute y_delay, y_move and next_move_date_y if (y_speed == 0) { y_move = 0; } else { if (y_speed > 0) { y_delay = (uint32_t) (1000 / y_speed); y_move = 1; } else { y_delay = (uint32_t) (1000 / (-y_speed)); y_move = -1; } set_next_move_date_y(now + y_delay); } angle = Geometry::get_angle(0, 0, (int) (x_speed * 100), (int) (y_speed * 100)); initial_xy.set_xy(get_xy()); finished = false; notify_movement_changed(); }