diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-17 14:51:23 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-17 14:51:23 +0100 |
| commit | a05a68ed6d868d17827159e5df16069a649d2263 (patch) | |
| tree | 338058411cea5b514c13390d845f7577bca70199 | |
| parent | 75c7e5548de908c37c0fbdd49df50f3e7447e120 (diff) | |
| download | cub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.gz cub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.bz2 cub3d-a05a68ed6d868d17827159e5df16069a649d2263.zip | |
No more segfault (for now), raycasting is broken
| -rw-r--r-- | cub3d.h | 5 | ||||
| -rw-r--r-- | event.c | 13 | ||||
| m--------- | libft | 0 | ||||
| -rw-r--r-- | main.c | 7 | ||||
| -rw-r--r-- | render.c | 51 | ||||
| -rw-r--r-- | render_state.c | 35 | ||||
| -rw-r--r-- | state.c | 45 |
7 files changed, 102 insertions, 54 deletions
@@ -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 @@ -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 @@ -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); } @@ -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) @@ -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); } |
