aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-17 14:51:23 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-17 14:51:23 +0100
commita05a68ed6d868d17827159e5df16069a649d2263 (patch)
tree338058411cea5b514c13390d845f7577bca70199
parent75c7e5548de908c37c0fbdd49df50f3e7447e120 (diff)
downloadcub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.gz
cub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.bz2
cub3d-a05a68ed6d868d17827159e5df16069a649d2263.zip
No more segfault (for now), raycasting is broken
-rw-r--r--cub3d.h5
-rw-r--r--event.c13
m---------libft0
-rw-r--r--main.c7
-rw-r--r--render.c51
-rw-r--r--render_state.c35
-rw-r--r--state.c45
7 files changed, 102 insertions, 54 deletions
diff --git a/cub3d.h b/cub3d.h
index 3151574..e57fea3 100644
--- a/cub3d.h
+++ b/cub3d.h
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:40:37 by cacharle #+# #+# */
-/* Updated: 2020/01/16 08:08:16 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 14:00:00 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdio.h>
@@ -186,7 +186,8 @@ t_bool parse_ceilling_color(t_state *state, char *line);
** event.c
*/
-int event_keydown(int key, void *param);
+int event_keydown(int key, t_state *state);
+int event_quit(t_state *state);
/*
** state.c
diff --git a/event.c b/event.c
index a052efd..318e9e6 100644
--- a/event.c
+++ b/event.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:39:37 by cacharle #+# #+# */
-/* Updated: 2020/01/16 07:52:01 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 13:59:48 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -15,12 +15,8 @@
#define ROTATE_STEP (M_PI / 20.0)
#define MOVE_SPEED 0.25
-int event_keydown(int key, void *param)
+int event_keydown(int key, t_state *state)
{
- t_state *state;
-
- printf("event: %d\n", key);
- state = (t_state*)param;
if (key == MLXK_ESC)
state->running = FALSE;
else if (key == MLXK_A)
@@ -41,3 +37,8 @@ int event_keydown(int key, void *param)
helper_rotate_player(state, ROTATE_STEP);
return (0);
}
+
+int event_quit(t_state *state)
+{
+ state->running = FALSE;
+}
diff --git a/libft b/libft
-Subproject 6fc0bdd2c983126b1b332677898f31def237e3e
+Subproject d22609e03717283e85a23587203af1b8b7d2fde
diff --git a/main.c b/main.c
index 94e67d1..5ddfa17 100644
--- a/main.c
+++ b/main.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:39:39 by cacharle #+# #+# */
-/* Updated: 2020/01/16 09:19:14 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 14:30:21 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -22,10 +22,13 @@ int main(int argc, char **argv)
return (1);
if (argc == 3)
return (capture(state));
- printf("yo\n");
+ /* printf("%d\n", state->window.size_line); */
mlx_hook(state->window_ptr, 2, (1L << 1), event_keydown, (void*)state);
+ mlx_hook(state->window_ptr, 17L, 0, event_quit, (void*)state);
mlx_loop_hook(state->mlx_ptr, render_update, (void*)state);
mlx_loop(state->mlx_ptr);
+ /* while (1) */
+ /* render_update(state); */
return (0);
}
diff --git a/render.c b/render.c
index 170d4e5..73f36d1 100644
--- a/render.c
+++ b/render.c
@@ -5,15 +5,25 @@
/* +:+ +:+ +:+ */
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/01/17 14:25:49 by cacharle #+# #+# */
+/* Updated: 2020/01/17 14:50:20 by cacharle ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* render.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 13:37:17 by cacharle #+# #+# */
-/* Updated: 2020/01/16 10:06:04 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 14:25:04 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include "cub3d.h"
-#define WINDOW_MID_HEIGHT(state) (state->window.height / 2)
-
int render_update(void *param)
{
t_state *state;
@@ -24,6 +34,7 @@ int render_update(void *param)
state_destroy(state);
exit(EXIT_SUCCESS);
}
+ /* ft_bzero(state->window.data, state->window.width * state->window.height * 4); */
render_update_window(state);
mlx_put_image_to_window(state->mlx_ptr, state->window_ptr, state->window.id, 0, 0);
return (0);
@@ -60,7 +71,7 @@ void render_column(t_state *state, int x)
/* printf("map_step [%f %f]\n", rstate.map_step.x, rstate.map_step.y); */
while (TRUE)
{
- rstate.side = rstate.probe.x < rstate.probe.y ? SIDE_WE : SIDE_WE;
+ rstate.side = rstate.probe.x < rstate.probe.y ? SIDE_WE : SIDE_NS;
/* printf("side %s\n", rstate.side == SIDE_WE ? "side we" : "side ns"); */
rstate_next_probe(&rstate);
/* printf("2\n"); */
@@ -72,10 +83,18 @@ void render_column(t_state *state, int x)
/* printf("[%d %d]\n", (int)rstate.map_pos.x, (int)rstate.map_pos.y); */
rstate_line_height(state, &rstate);
/* printf("perp dist %f\n", rstate_perp_dist(state, &rstate)); */
- printf("line height %d\n", rstate.line_height);
- rstate.draw_start = WINDOW_MID_HEIGHT(state) - rstate.line_height / 2;
- rstate.draw_end = WINDOW_MID_HEIGHT(state) + rstate.line_height / 2;
- printf("%d -> %d\n", rstate.draw_start, rstate.draw_end);
+ /* printf("line height %d\n", rstate.line_height); */
+
+
+ rstate.draw_start = state->window.height / 2 - rstate.line_height / 2;
+ rstate.draw_end = state->window.height / 2 + rstate.line_height / 2;
+ if (rstate.draw_start < 0)
+ rstate.draw_start = 0;
+ if (rstate.draw_end > state->window.height - 1)
+ rstate.draw_end = state->window.height - 1;
+ /* printf("%d -> %d\n", rstate.draw_start, rstate.draw_end); */
+ /* rstate.draw_start = 10; */
+ /* rstate.draw_end = 20; */
render_window_column(state, &rstate);
}
@@ -87,13 +106,15 @@ void render_window_column(t_state *state, t_render_state *rstate)
white.hexcode = 0x00ffffff;
black.hexcode = 0x00000000;
- i = -1;
- while (++i < rstate->draw_start)
- ((t_color*)state->window.data)[i * state->window.width + rstate->x] = black;
- while (++i < rstate->draw_end)
- ((t_color*)state->window.data)[i * state->window.width + rstate->x] = white;
- while (++i < state->window_height)
- ((t_color*)state->window.data)[i * state->window.width + rstate->x] = black;
+ i = 0;
+ /* printf("%p\n", state->window.data); */
+ while (i < rstate->draw_start)
+ ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = black;
+ /* i = rstate->draw_start - 1; */
+ while (i < rstate->draw_end)
+ ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = white;
+ while (i < state->window_height)
+ ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = black;
/* printf("%d -> %d\n", rstate->draw_start, rstate->draw_end); */
/* while (++i < rstate->draw_start) */
diff --git a/render_state.c b/render_state.c
index 82ee588..e9c803a 100644
--- a/render_state.c
+++ b/render_state.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/15 14:40:14 by cacharle #+# #+# */
-/* Updated: 2020/01/16 10:03:01 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 14:48:15 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,7 +29,7 @@ void rstate_ray(t_state *state, t_render_state *rstate)
{
double camera_x;
- camera_x = 2 * rstate->x / (double)state->window.width - 1;
+ camera_x = 2.0 * (double)rstate->x / (double)state->window.width - 1.0;
rstate->ray = vector_add(state->dir, vector_scale(state->plane, camera_x));
}
@@ -136,13 +136,29 @@ void rstate_next_probe(t_render_state *rstate)
double rstate_perp_dist(t_state *state, t_render_state *rstate)
{
+ double dist;
+
+ /* printf("ray [%f %f]\n", rstate->ray.x, rstate->ray.y); */
+ dist = 1.0;
if (rstate->side == SIDE_NS)
- return ((rstate->map_pos.x - state->pos.x + (1.0 - rstate->map_step.x) / 2.0) / rstate->ray.x); // fait des trucs bizzare
- /* return (rstate->map_pos.y - state->pos.y + state->dir.y); */
+ {
+ dist = rstate->map_pos.y - state->pos.y;
+ dist += rstate->map_step.y == 1 ? 1 : 0;
+ dist /= rstate->ray.y;
+ }
else if (rstate->side == SIDE_WE)
- return ((rstate->map_pos.y - state->pos.y + (1.0 - rstate->map_step.y) / 2.0) / rstate->ray.y);
- /* return (rstate->map_pos.x - state->pos.x + state->dir.x); */
- return (1.0);
+ {
+ dist = rstate->map_pos.x - state->pos.x;
+ dist += rstate->map_step.x == 1 ? 1 : 0;
+ dist /= rstate->ray.x;
+ }
+ return dist;
+
+ /* if (rstate->side == SIDE_NS) */
+ /* return fabs(rstate->map_pos.y - state->pos.y + state->dir.y); */
+ /* else if (rstate->side == SIDE_WE) */
+ /* return fabs(rstate->map_pos.x - state->pos.x + state->dir.x); */
+ /* return (1.0); */
}
/*
@@ -152,8 +168,9 @@ double 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(state, rstate));
+ /* double perp = rstate_perp_dist(state, rstate); */
+ /* printf("perp %f\n", perp); */
+ rstate->line_height = (int)((double)state->window.height / rstate_perp_dist(state, rstate));
}
t_image *get_tex(t_state *state, t_render_state *rstate)
diff --git a/state.c b/state.c
index de7c968..5a10888 100644
--- a/state.c
+++ b/state.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/19 16:39:57 by cacharle #+# #+# */
-/* Updated: 2020/01/15 15:13:06 by cacharle ### ########.fr */
+/* Updated: 2020/01/17 14:05:08 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -26,25 +26,24 @@ t_state *state_new(t_state *state)
if ((state->window_ptr = mlx_new_window(state->mlx_ptr,
state->window.width, state->window.height, WINDOW_TITLE)) == NULL)
return (state_destroy(state));
- i = -1;
- while (++i < TEXTURES_NUM)
- {
- load_texture(state->mlx_ptr, &state->textures[i],
- state->textures_path[i]);
- if (state->textures[i].id == NULL)
- return (error_put_return_state_destroy("load texture", state));
- }
+ printf("init mlx and mlx window\n");
+ /* i = -1; */
+ /* while (++i < TEXTURES_NUM) */
+ /* { */
+ /* load_texture(state->mlx_ptr, &state->textures[i], */
+ /* state->textures_path[i]); */
+ /* if (state->textures[i].id == NULL) */
+ /* return (error_put_return_state_destroy("load texture", state)); */
+ /* } */
if ((state->window.id = mlx_new_image(state->mlx_ptr,
state->window.width, state->window.height)) == NULL)
return (state_destroy(state));
state->window.data = mlx_get_data_addr(state->window.id,
&state->window.depth, &state->window.size_line,
&state->window.endian);
+ printf("init mlx window image\n");
state_init_player(state);
- /* printf("%x\n", state->floor_color.rgb.r); */
- /* printf("%x\n", state->floor_color.rgb.g); */
- /* printf("%x\n", state->floor_color.rgb.b); */
- /* printf("endian %d", state->window.endian); */
+ printf("init player\n");
return (state);
}
@@ -96,19 +95,25 @@ void *state_destroy(t_state *state)
if (state == NULL)
return (NULL);
- i = -1;
- while (++i < TEXTURES_NUM)
- {
- free(state->textures_path[i]);
- if (state->mlx_ptr != NULL && state->textures[i].id != NULL)
- mlx_destroy_image(state->mlx_ptr, state->textures[i].id);
- }
+ /* i = -1; */
+ /* while (++i < TEXTURES_NUM) */
+ /* { */
+ /* free(state->textures_path[i]); */
+ /* if (state->mlx_ptr != NULL && state->textures[i].id != NULL) */
+ /* mlx_destroy_image(state->mlx_ptr, state->textures[i].id); */
+ /* } */
+ 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 window\n");
if (state->mlx_ptr && state->window_ptr)
mlx_destroy_window(state->mlx_ptr, state->window_ptr);
+ printf("free map\n");
if (state->map != NULL)
while (state->map_height-- > 0 && state->map[state->map_height] != NULL)
free(state->map[state->map_height]);
free(state->map);
+ printf("free state\n");
free(state);
return (NULL);
}