hanafuda/move.c
2025-02-03 20:07:22 -05:00

33 lines
833 B
C

#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;
}