Ejemplo n.º 1
0
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();
	}
}
Ejemplo n.º 2
0
/**
 * @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();
}