Files
42_INT_10_cube3d/srcs/player/player_rotates.c

91 lines
1.8 KiB
C

#include "cube3d.h"
void rotate(t_plr *plr, t_coord *coord)
{
int old_x;
t_coord tmp;
// do nothing if not rotating
if (plr->rot == 0)
return ;
// offset center
tmp.x = coord->x - plr->pos.x;
tmp.y = coord->y - plr->pos.y;
// calculate new coordinates
old_x = tmp.x;
tmp.x = tmp.x * plr->cosi + tmp.y * plr->cosj;
tmp.y = old_x * plr->sini + tmp.y * plr->sinj;
// de-offset center
coord->x = tmp.x + plr->pos.x;
coord->y = tmp.y + plr->pos.y;
}
void rotate_double(t_plr *plr, t_d_coord *coord)
{
double old_x;
t_d_coord tmp;
// do nothing if not rotating
if (plr->rot == 0)
return ;
// offset center
tmp.x = coord->x - plr->exact.x;
tmp.y = coord->y - plr->exact.y;
// calculate new coordinates
old_x = tmp.x;
tmp.x = tmp.x * plr->cosi + tmp.y * plr->cosj;
tmp.y = old_x * plr->sini + tmp.y * plr->sinj;
// de-offset center
coord->x = tmp.x + plr->exact.x;
coord->y = tmp.y + plr->exact.y;
}
void plr_turn_left(t_plr *plr)
{
double radi;
double radj;
if (plr->rot == -180)
(plr->rot) *= -1;
(plr->rot)--;
// calculate trigo for rotations
radi = plr->rot * M_PI / 180;
radj = radi + (M_PI / 2);
plr->cosi = cos(radi);
plr->sini = sin(radi);
plr->cosj = cos(radj);
plr->sinj = sin(radj);
}
void plr_turn_right(t_plr *plr)
{
double radi;
double radj;
if (plr->rot == 180)
(plr->rot) *= -1;
(plr->rot)++;
// calculate trigo for rotations
radi = plr->rot * M_PI / 180;
radj = radi + (M_PI / 2);
plr->cosi = cos(radi);
plr->sini = sin(radi);
plr->cosj = cos(radj);
plr->sinj = sin(radj);
}
void plr_turn(t_plr *plr, int deg)
{
double radi;
double radj;
plr->rot = deg;
// calculate trigo for rotations
radi = plr->rot * M_PI / 180;
radj = radi + (M_PI / 2);
plr->cosi = cos(radi);
plr->sini = sin(radi);
plr->cosj = cos(radj);
plr->sinj = sin(radj);
}