fixed random segfault when walking into sprite
This commit is contained in:
parent
e40b668d7e
commit
8ff76fe2e5
15
src/draw.c
15
src/draw.c
@ -6,7 +6,7 @@
|
|||||||
/* By: houtworm <codam@houtworm.net> +#+ */
|
/* By: houtworm <codam@houtworm.net> +#+ */
|
||||||
/* +#+ */
|
/* +#+ */
|
||||||
/* Created: 2023/10/26 16:54:20 by houtworm #+# #+# */
|
/* Created: 2023/10/26 16:54:20 by houtworm #+# #+# */
|
||||||
/* Updated: 2023/11/04 04:56:26 by houtworm ######## odam.nl */
|
/* Updated: 2023/11/04 05:33:09 by houtworm ######## odam.nl */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -58,7 +58,6 @@ void ft_sortsprites(t_varlist *vl)
|
|||||||
|
|
||||||
void ft_drawsprites(t_varlist *vl)
|
void ft_drawsprites(t_varlist *vl)
|
||||||
{
|
{
|
||||||
mlx_texture_t *sprite;
|
|
||||||
int i;
|
int i;
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
@ -86,7 +85,7 @@ void ft_drawsprites(t_varlist *vl)
|
|||||||
{
|
{
|
||||||
spritex = vl->sprite[i].x - vl->posx;
|
spritex = vl->sprite[i].x - vl->posx;
|
||||||
spritey = vl->sprite[i].y - vl->posy;
|
spritey = vl->sprite[i].y - vl->posy;
|
||||||
sprite = ft_selectsprite(vl, vl->sprite[i].type);
|
vl->curtext = ft_selectsprite(vl, vl->sprite[i].type);
|
||||||
invdet = 1.0 / (vl->planex * vl->diry - vl->dirx * vl->planey);
|
invdet = 1.0 / (vl->planex * vl->diry - vl->dirx * vl->planey);
|
||||||
transformx = invdet * (vl->diry * spritex - vl->dirx * spritey);
|
transformx = invdet * (vl->diry * spritex - vl->dirx * spritey);
|
||||||
transformy = invdet * (-vl->planey * spritex + vl->planex * spritey);
|
transformy = invdet * (-vl->planey * spritex + vl->planex * spritey);
|
||||||
@ -118,7 +117,15 @@ void ft_drawsprites(t_varlist *vl)
|
|||||||
d = (y - vmovescreen) * 256 - vl->h * 128 + spriteheight * 128;
|
d = (y - vmovescreen) * 256 - vl->h * 128 + spriteheight * 128;
|
||||||
texy = (d * 64) / spriteheight / 256;
|
texy = (d * 64) / spriteheight / 256;
|
||||||
uint8_t *texel;
|
uint8_t *texel;
|
||||||
texel = &sprite->pixels[(sprite->width * texy + texx) * 4];
|
if (texy < 0)
|
||||||
|
texy = 0;
|
||||||
|
if (texy > 64)
|
||||||
|
texy = 64;
|
||||||
|
if (texx < 0)
|
||||||
|
texx = 0;
|
||||||
|
if (texx > 64)
|
||||||
|
texx = 64;
|
||||||
|
texel = &vl->curtext->pixels[(vl->curtext->width * texy + texx) * 4];
|
||||||
color = texel[0] << 24 | texel[1] << 16 | texel[2] << 8 | texel[3];
|
color = texel[0] << 24 | texel[1] << 16 | texel[2] << 8 | texel[3];
|
||||||
if (color != 0x980088FF)
|
if (color != 0x980088FF)
|
||||||
mlx_put_pixel(vl->img, x, y, color);
|
mlx_put_pixel(vl->img, x, y, color);
|
||||||
|
Loading…
Reference in New Issue
Block a user