diff options
author | UnavailableDev <69792062+UnavailableDev@users.noreply.github.com> | 2023-03-22 10:45:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-22 10:45:34 +0100 |
commit | d32a4942c7e16af5daf71a769906b17cb44de8e1 (patch) | |
tree | 8da86d27d30d841d786a5beca634e3fbaaf00570 /src/engine/draw_screen.c | |
parent | 6d82f9e3d165e0200bed2f2784a1183f47b37fa3 (diff) | |
parent | 7f51cd925883bbf958baa289d4d19231667c9eba (diff) |
Merge branch 'lonkaars:dev' into dev
Diffstat (limited to 'src/engine/draw_screen.c')
-rw-r--r-- | src/engine/draw_screen.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/engine/draw_screen.c b/src/engine/draw_screen.c new file mode 100644 index 0000000..0c31bf6 --- /dev/null +++ b/src/engine/draw_screen.c @@ -0,0 +1,89 @@ +#include "engine/draw_screen.h" +#include "engine/sprite_controller.h" + +uint8_t hh_world_to_tile(vec2 pos){ + //TODO: remove magic file name here + FILE* level = fopen("static/level1_test.bin", "rb"); /* open binary file */ + if (!level) { /* check if file opened successfully */ + fprintf(stderr, "Error: Failed to open file.\n"); + return 0; + } + int index = ((pos.y/16)*40 + pos.x/16);//TODO: remove magic number(s) + fseek(level, (index * sizeof(int)) + sizeof(int), SEEK_SET); + int tile;// = (int*)malloc(sizeof(int)); + fread(&tile, sizeof(int), 1, level); // read 1 tile from binary + + fclose(level); + // int val = tile; + // free(tile); + return tile; +} + + +// remeber old value to know which part to update. +vec2 previousViewport = { .x = 0, .y = 0 }; +void hh_draw_screen(vec_cor viewport){ + if (viewport.x == previousViewport.x && viewport.y == previousViewport.y) return; + + hh_ppu_update_aux((hh_s_ppu_loc_aux){ + .bg_shift_x = viewport.x, + .bg_shift_y = viewport.y, + .fg_fetch = 0, + .sysreset = 0, + }); + + // update previous viewport values + previousViewport = viewport; +} + +void hh_setup_screen(){ + //(HH_map_size_X*HH_map_size_Y) + int size = 2400; // max X = 40 en max Y = 80 + //TODO: remove magic file name here + FILE* level = fopen("static/level1_test.bin", "rb"); /* open binary file */ + if (!level) { /* check if file opened successfully */ + fprintf(stderr, "Error: Failed to open level file.\n"); + return; + } + fseek(level, (0* sizeof(int)) + sizeof(int), SEEK_SET); + int* tile = (int*)malloc(size*sizeof(int)); + fread(tile, sizeof(int), size, level); // read 1 tile from binary + + fclose(level); + + for(int BAM_index = 0; BAM_index < size; BAM_index++){ + hh_ppu_update_background(BAM_index, (hh_s_ppu_loc_bam_entry){ + .horizontal_flip = false, + .vertical_flip = false, + .palette_index = hh_get_palette(tile[BAM_index]), + .tilemap_index = tile[BAM_index], + }); + } + free(tile); +} +void hh_clear_screen(){ + // (HH_PPU_SCREEN_HEIGHT*HH_PPU_SCREEN_WIDTH)/(HH_PPU_SPRITE_HEIGHT*HH_PPU_SPRITE_WIDTH) + for (int i = 0; i < HH_PPU_BG_CANVAS_TILES_H*HH_PPU_BG_CANVAS_TILES_V; i++) { + hh_s_ppu_loc_bam_entry temp = { + .vertical_flip=false,.horizontal_flip = false, + .palette_index = 3,.tilemap_index = 0 + }; + hh_ppu_update_background(i,temp); + hh_ppu_update_color(3,0,(hh_ppu_rgb_color_t){0x0,0x0,0x0}); + } + hh_ppu_update_aux((hh_s_ppu_loc_aux){ + .bg_shift_x = 0, + .bg_shift_y = 0, + .fg_fetch = 0, + .sysreset = 0, + }); +} + +void hh_clear_sprite(){ + for (int i = 0; i < HH_PPU_FG_SPRITE_COUNT; i++) { + hh_ppu_update_foreground(i,(hh_s_ppu_loc_fam_entry){ + .position_x = -16, + .position_y = -16, + }); + } +} |