#include <math.h>
#include "move.h"

void move_position(Move *m, float delta) {
  m->current_time += delta;
  float percentage = m->current_time / m->end_time;
  if (percentage < 0.0) percentage = 0.0;
  else if (percentage > 1.0) percentage = 1.0;

  Vector2 v;
  switch (m->curve) {
  case CURVE_LINEAR:
    v = (Vector2) {
      ((m->destination.x - m->origin.x) * percentage) + m->origin.x,
      ((m->destination.y - m->origin.y) * percentage) + m->origin.y
    };
    break;
  case CURVE_EASE_IN_OUT:
    percentage = -(cos(PI * percentage) - 1) / 2;
    v = (Vector2) {
      ((m->destination.x - m->origin.x) * percentage) + m->origin.x,
      ((m->destination.y - m->origin.y) * percentage) + m->origin.y
    };
    break;
  default:
    v = m->destination;
    break;
  }

  m->position->x = v.x;
  m->position->y = v.y;
}