diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-02-01 14:16:20 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-02-01 14:16:20 +0100 |
| commit | 44e93a191badd8c23d0bb971665f335bbb38f177 (patch) | |
| tree | ece8f3c9eb6df80748611c1ac5eb1a0d67701a98 /src | |
| parent | a0f26d0407a2e514e9dcfd2baeef5ccd98f7b3dd (diff) | |
| download | cub3d-44e93a191badd8c23d0bb971665f335bbb38f177.tar.gz cub3d-44e93a191badd8c23d0bb971665f335bbb38f177.tar.bz2 cub3d-44e93a191badd8c23d0bb971665f335bbb38f177.zip | |
sprite stuff
Diffstat (limited to 'src')
| -rw-r--r-- | src/capture.c | 54 | ||||
| -rw-r--r-- | src/event.c | 6 | ||||
| -rw-r--r-- | src/main.c | 5 | ||||
| -rw-r--r-- | src/render.c | 41 | ||||
| -rw-r--r-- | src/texture.c | 2 |
5 files changed, 78 insertions, 30 deletions
diff --git a/src/capture.c b/src/capture.c index 521774a..042eb14 100644 --- a/src/capture.c +++ b/src/capture.c @@ -6,20 +6,64 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/11 13:15:11 by cacharle #+# #+# */ -/* Updated: 2020/01/16 07:49:17 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 13:49:43 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" +#define BM_FILE_TYPE 19778 +#define DATA_OFFSET 1078 +#define BITMAP_INFO_HEADER_SIZE 40 +#define CAPTURE_FILENAME "capture.bmp" + int capture(t_state *state) { - printf("capture\n"); - /* render_update_window(state); */ - /* write_bmp(&state->window); */ + t_bmp_header header; + + render_update_window(state); + bmp_fill_header(&state->window, &header); + if (!bmp_write(&state->window, &header)) + { + state_destroy(state); + return (1); + } return (0); } -void write_bmp(t_image *image) +t_bool bmp_write(t_image *image, t_bmp_header *header) +{ + int fd; + + if ((fd = open(CAPTURE_FILENAME, O_WRONLY | O_CREAT)) < 0) + return (FALSE); + printf("%d\n", fd); + write(fd, &header, sizeof(t_bmp_header)); + write(fd, image->data, image->width * image->height * 4); + close(fd); + return (TRUE); +} + +void bmp_fill_header(t_image *image, t_bmp_header *header) { + header->file_header.file_type = BM_FILE_TYPE; + header->file_header.file_size = sizeof(t_bmp_header) + image->width * image->height * 4; + header->file_header.reserved1 = 0; + header->file_header.reserved1 = 0; + header->file_header.offset = DATA_OFFSET; + header->info_header.size = sizeof(t_bmp_header) + image->width * image->height * 4; + header->info_header.width = image->width; + header->info_header.height = image->height; + header->info_header.planes = 0; + header->info_header.depth = 8 * 4; + header->info_header.compression = 0; + header->info_header.size_image = 0; + header->info_header.w_pix_per_meter = 0; + header->info_header.h_pix_per_meter = 0; + header->info_header.color_used = 0; + header->info_header.color_important = 0; + header->color_table.blue = 0xff; + header->color_table.green = 0xff; + header->color_table.red = 0xff; + header->color_table.reserved = 0; } diff --git a/src/event.c b/src/event.c index cff9e5d..b1d465f 100644 --- a/src/event.c +++ b/src/event.c @@ -6,14 +6,14 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/11/15 06:39:37 by cacharle #+# #+# */ -/* Updated: 2020/02/01 12:30:49 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 14:00:48 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" -#define ROTATE_STEP (M_PI / 40.0) -#define MOVE_SPEED 0.25 +#define ROTATE_STEP (M_PI / 20.0) +#define MOVE_SPEED 0.24 int event_keydown(int key, t_state *state) { @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/11/15 06:39:39 by cacharle #+# #+# */ -/* Updated: 2020/01/30 14:02:58 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 14:00:48 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,13 +22,10 @@ int main(int argc, char **argv) return (1); if (argc == 3) return (capture(state)); - /* 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/src/render.c b/src/render.c index 820036d..fec701c 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 12:06:58 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 14:15:44 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,22 +23,25 @@ int render_update(void *param) exit(EXIT_SUCCESS); return (0); } - render_update_window(state); + 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); return (0); } -void render_update_window(t_state *state) +void render_update_window(t_state *state, t_cell target) { int x; x = -1; while (++x < state->window.width) - render_column(state, x); + render_column(state, x, target); } -void render_column(t_state *state, int x) +void render_column(t_state *state, int x, t_cell target) { t_render_state rstate; @@ -50,6 +53,10 @@ void render_column(t_state *state, int x) 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) @@ -57,12 +64,12 @@ void render_column(t_state *state, int x) } rstate_perp_dist(state, &rstate); rstate_line_height(state, &rstate); - rstate.draw_start = state->window.height / 2 - rstate.line_height / 2; - rstate.draw_end = state->window.height / 2 + rstate.line_height / 2; + rstate.draw_start = state->surface->height / 2 - rstate.line_height / 2; + rstate.draw_end = state->surface->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; + if (rstate.draw_end > state->surface->height - 1) + rstate.draw_end = state->surface->height - 1; render_window_column(state, &rstate); } @@ -74,13 +81,13 @@ void render_window_column(t_state *state, t_render_state *rstate) white.hexcode = 0x00ffffff; i = 0; while (i < rstate->draw_start) - ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = + ((t_color*)state->surface->data)[i++ * state->surface->width + rstate->x] = state->ceilling_color; + i--; render_texture(state, rstate, &i); - while (i < state->window.height) - ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = + while (i < state->surface->height) + ((t_color*)state->surface->data)[i++ * state->surface->width + rstate->x] = state->floor_color; - } void render_texture(t_state *state, t_render_state *rstate, int *i) @@ -94,12 +101,12 @@ void render_texture(t_state *state, t_render_state *rstate, int *i) texture = texture_select(state, rstate); tex_x = texture_x(state, rstate, texture); tex_step = (double)texture->height / (double)rstate->line_height; - tex_pos = (rstate->draw_start - state->window.height / 2 + rstate->line_height / 2) * tex_step; - while (++(*i) < rstate->draw_end) + tex_pos = (rstate->draw_start - state->surface->height / 2 + rstate->line_height / 2) * tex_step; + while ((*i)++ < rstate->draw_end) { tex_y = (int)tex_pos & (texture->height - 1); tex_pos += tex_step; - ((t_color*)state->window.data)[*i * state->window.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/texture.c b/src/texture.c index 725e0aa..5f858eb 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 12:24:40 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 14:11:07 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ |
