void StraightMovement::set_speed_x(double speed_xx) { if(std::fabs(speed_xx) <= 1E-6) { speed_xx = 0; } this->speed_x = speed_xx; uint32_t now = System::now(); // compute delay_x, move_x, next_move_date_x. if(speed_x > 0) { this->delay_x = (uint32_t) (1000 / this->speed_x); move_x = 1; set_next_move_date_x(now + delay_x); } else if(speed_x < 0) { this->delay_x = (uint32_t) (-1000 / this->speed_x); move_x = -1; set_next_move_date_x(now + delay_x); } else { move_x = 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 x speed. * @param x_speed the x speed of the object in pixels per second */ void StraightMovement::set_x_speed(double x_speed) { if (std::fabs(x_speed) <= 1E-6) { x_speed = 0; } this->x_speed = x_speed; uint32_t now = System::now(); // compute x_delay, x_move and next_move_date_x if (x_speed == 0) { x_move = 0; } else { if (x_speed > 0) { x_delay = (uint32_t) (1000 / x_speed); x_move = 1; } else { x_delay = (uint32_t) (1000 / (-x_speed)); x_move = -1; } set_next_move_date_x(now + x_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(); }