aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-02-02 09:57:02 +0100
committerCharles <sircharlesaze@gmail.com>2020-02-02 09:57:02 +0100
commit628f82dbb9d44dfda7ebde0a54b6559b275e204c (patch)
treef41e8195ab7063d65142b37aefecad2b1e72535f /src
parent44e93a191badd8c23d0bb971665f335bbb38f177 (diff)
downloadcub3d-628f82dbb9d44dfda7ebde0a54b6559b275e204c.tar.gz
cub3d-628f82dbb9d44dfda7ebde0a54b6559b275e204c.tar.bz2
cub3d-628f82dbb9d44dfda7ebde0a54b6559b275e204c.zip
sprite kinda working but like walls (fml)
Diffstat (limited to 'src')
-rw-r--r--src/capture.c4
-rw-r--r--src/event.c5
-rw-r--r--src/render.c27
-rw-r--r--src/render_state.c6
-rw-r--r--src/state.c16
-rw-r--r--src/texture.c4
6 files changed, 41 insertions, 21 deletions
diff --git a/src/capture.c b/src/capture.c
index 042eb14..a052709 100644
--- a/src/capture.c
+++ b/src/capture.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 13:15:11 by cacharle #+# #+# */
-/* Updated: 2020/02/01 13:49:43 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 08:33:14 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -21,7 +21,7 @@ int capture(t_state *state)
{
t_bmp_header header;
- render_update_window(state);
+ render_update_window(state, CELL_WALL);
bmp_fill_header(&state->window, &header);
if (!bmp_write(&state->window, &header))
{
diff --git a/src/event.c b/src/event.c
index b1d465f..3517978 100644
--- a/src/event.c
+++ b/src/event.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:39:37 by cacharle #+# #+# */
-/* Updated: 2020/02/01 14:00:48 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 09:52:09 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -38,7 +38,8 @@ int event_keydown(int key, t_state *state)
helper_rotate_player(state, -ROTATE_STEP);
else if (key == MLXK_RIGHT)
helper_rotate_player(state, ROTATE_STEP);
- if (state->map[(int)state->pos.y][(int)state->pos.x] == CELL_WALL)
+ if (state->map[(int)state->pos.y][(int)state->pos.x] == CELL_WALL ||
+ state->map[(int)state->pos.y][(int)state->pos.x] == CELL_ITEM)
state->pos = saved_pos;
return (0);
}
diff --git a/src/render.c b/src/render.c
index fec701c..5d3c5d4 100644
--- a/src/render.c
+++ b/src/render.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 13:37:17 by cacharle #+# #+# */
-/* Updated: 2020/02/01 14:15:44 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 09:56:37 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -25,10 +25,14 @@ int render_update(void *param)
}
state->surface = &state->window;
render_update_window(state, CELL_WALL);
- /* state->surface = &state->sprite_window; */
- /* render_update_window(state, CELL_ITEM); */
mlx_put_image_to_window(state->mlx_ptr, state->window_ptr,
- state->window.id, 0, 0);
+ state->surface->id, 0, 0);
+ state->surface = &state->sprite_window;
+ for (int i = 0; i < state->surface->width * state->surface->height; i++)
+ ((unsigned int*)state->surface->data)[i] = 0xff000000;
+ render_update_window(state, CELL_ITEM);
+ mlx_put_image_to_window(state->mlx_ptr, state->window_ptr,
+ state->surface->id, 0, 0);
return (0);
}
@@ -37,7 +41,7 @@ void render_update_window(t_state *state, t_cell target)
int x;
x = -1;
- while (++x < state->window.width)
+ while (++x < state->surface->width)
render_column(state, x, target);
}
@@ -45,6 +49,7 @@ void render_column(t_state *state, int x, t_cell target)
{
t_render_state rstate;
+ rstate.target = target;
rstate.x = x;
rstate_ray(state, &rstate);
rstate.map_pos = vector_new((double)((int)state->pos.x), (double)((int)state->pos.y));
@@ -53,13 +58,11 @@ void render_column(t_state *state, int x, t_cell target)
rstate.map_step = vector_new(rstate.ray.x < 0.0 ? -1.0 : 1.0, rstate.ray.y < 0.0 ? -1.0 : 1.0);
while (TRUE)
{
- if (rstate.probe.x < 0 || rstate.probe.y < 0
- || rstate.probe.x > state->map_width
- || rstate.probe.y > state->map_height)
- return ;
rstate.side = rstate.probe.x < rstate.probe.y ? SIDE_WE : SIDE_NS;
rstate_next_probe(&rstate);
- if (state->map[(int)rstate.map_pos.y][(int)rstate.map_pos.x] == CELL_WALL)
+ if (target == CELL_ITEM && state->map[(int)rstate.map_pos.y][(int)rstate.map_pos.x] == CELL_WALL)
+ return ;
+ if (state->map[(int)rstate.map_pos.y][(int)rstate.map_pos.x] == target)
break ;
}
rstate_perp_dist(state, &rstate);
@@ -106,7 +109,7 @@ void render_texture(t_state *state, t_render_state *rstate, int *i)
{
tex_y = (int)tex_pos & (texture->height - 1);
tex_pos += tex_step;
- /* ((t_color*)state->surface->data)[*i * state->surface->width + rstate->x] = */
- /* ((t_color*)texture->data)[texture->height * tex_y + tex_x]; */
+ ((t_color*)state->surface->data)[*i * state->surface->width + rstate->x] =
+ ((t_color*)texture->data)[texture->height * tex_y + tex_x];
}
}
diff --git a/src/render_state.c b/src/render_state.c
index ff777e2..09afe25 100644
--- a/src/render_state.c
+++ b/src/render_state.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/15 14:40:14 by cacharle #+# #+# */
-/* Updated: 2020/02/01 11:39:09 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 09:00:38 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,7 +29,7 @@ void rstate_ray(t_state *state, t_render_state *rstate)
{
double camera_x;
- camera_x = 2.0 * (double)rstate->x / (double)state->window.width - 1.0;
+ camera_x = 2.0 * (double)rstate->x / (double)state->surface->width - 1.0;
rstate->ray = vector_add(state->dir, vector_scale(state->plane, camera_x));
}
@@ -157,5 +157,5 @@ void rstate_perp_dist(t_state *state, t_render_state *rstate)
void rstate_line_height(t_state *state, t_render_state *rstate)
{
- rstate->line_height = (int)((double)state->window.height / rstate->perp_dist);
+ rstate->line_height = (int)((double)state->surface->height / rstate->perp_dist);
}
diff --git a/src/state.c b/src/state.c
index 11e1c65..267c6c9 100644
--- a/src/state.c
+++ b/src/state.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/19 16:39:57 by cacharle #+# #+# */
-/* Updated: 2020/01/30 15:13:42 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 09:13:06 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -42,6 +42,15 @@ t_state *state_new(t_state *state)
&state->window.depth, &state->window.size_line,
&state->window.endian);
printf("init mlx window image\n");
+ state->sprite_window.width = state->window.width;
+ state->sprite_window.height = state->window.height;
+ if ((state->sprite_window.id = mlx_new_image(state->mlx_ptr,
+ state->window.width, state->window.height)) == NULL)
+ return (state_destroy(state));
+ state->sprite_window.data = mlx_get_data_addr(state->sprite_window.id,
+ &state->sprite_window.depth, &state->sprite_window.size_line,
+ &state->sprite_window.endian);
+ printf("init mlx sprite image\n");
state_init_player(state);
printf("init player\n");
return (state);
@@ -75,6 +84,8 @@ t_state *state_new_empty(void)
return (NULL);
state->mlx_ptr = NULL;
state->window_ptr = NULL;
+ state->window.id = NULL;
+ state->sprite_window.id = NULL;
i = -1;
while (++i < TEXTURES_NUM)
{
@@ -105,6 +116,9 @@ void *state_destroy(t_state *state)
printf("free window image\n");
if (state->mlx_ptr != NULL && state->window.id != NULL)
mlx_destroy_image(state->mlx_ptr, state->window.id);
+ printf("free sprite window image\n");
+ if (state->mlx_ptr != NULL && state->sprite_window.id != NULL)
+ mlx_destroy_image(state->mlx_ptr, state->sprite_window.id);
printf("free window\n");
if (state->mlx_ptr && state->window_ptr)
mlx_destroy_window(state->mlx_ptr, state->window_ptr);
diff --git a/src/texture.c b/src/texture.c
index 5f858eb..ba95bd4 100644
--- a/src/texture.c
+++ b/src/texture.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/01 11:38:43 by cacharle #+# #+# */
-/* Updated: 2020/02/01 14:11:07 by cacharle ### ########.fr */
+/* Updated: 2020/02/02 09:25:36 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -14,6 +14,8 @@
t_image *texture_select(t_state *state, t_render_state *rstate)
{
+ if (rstate->target == CELL_ITEM)
+ return (state->textures + TEX_SPRITE);
if (rstate->side == SIDE_NS)
{
if (rstate->map_pos.y < state->pos.y)