diff options
author | NielsCoding <48092678+heavydemon21@users.noreply.github.com> | 2023-03-30 13:02:36 +0200 |
---|---|---|
committer | NielsCoding <48092678+heavydemon21@users.noreply.github.com> | 2023-03-30 13:02:36 +0200 |
commit | 552dcc17db2b98287ba1b480c2e70759cd94d81f (patch) | |
tree | 7f7bbd7a8b3964bbebc2878d33be0ed8a9382e3f /src/engine/draw_screen.c | |
parent | 7f51cd925883bbf958baa289d4d19231667c9eba (diff) |
gameloop/bullet/levels
gameloop moet nog wat gefixt worden. shop moet nog wat art en functie krijgen zefde voor gameover/highscore
bullet moet meerdere entityten kunnen doen nu nog alleen gemaakt voor 1.
levels moet alleen nog backwords kunnen
Diffstat (limited to 'src/engine/draw_screen.c')
-rw-r--r-- | src/engine/draw_screen.c | 103 |
1 files changed, 57 insertions, 46 deletions
diff --git a/src/engine/draw_screen.c b/src/engine/draw_screen.c index 0c31bf6..4a5ca68 100644 --- a/src/engine/draw_screen.c +++ b/src/engine/draw_screen.c @@ -1,66 +1,77 @@ #include "engine/draw_screen.h" -#include "engine/sprite_controller.h" +//#include "engine/sprite_controller.h" +hh_level_entity level; +uint64_t offset=0; 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); + + int index = (((pos.y/16)*hh_max_x_size) + (pos.x/16));//TODO: remove magic number(s) + int tile= level.place[index]; return tile; } +void hh_update_screen(vec2 view, vec2 player){ + int currentTileY = view.y / 16; + int offset_px = view.y-(offset / 40 * 16); -// 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; -} + // || (offset_px == 0 && lastUpdated != 0 && player.y/16 == currentTileY-5) + if( (offset_px > 230) ){ + int size = (hh_max_x_size) * hh_max_y_size; + offset = currentTileY * level.x; -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; + // Update the background screen + 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(level.place[offset+BAM_index]), + .tilemap_index = level.place[offset+BAM_index], + }); + } } - 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); - +} +void hh_setup_screen(hh_level_entity currentlevel){ + hh_clear_screen(); + hh_clear_sprite(); + level = currentlevel; + int size = hh_max_x_size* hh_max_y_size; + printf("hier\n"); 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], + .palette_index = hh_get_palette(currentlevel.place[BAM_index]), + .tilemap_index = currentlevel.place[BAM_index], }); } - free(tile); } +vec_cor hh_draw_screen(vec2 player) { + static vec_cor previousViewport = {0, 0}; + int offset_px = offset/40*16; + //printf("%d\n",offset_px%2); + vec_cor viewport = hh_update_camera(player,(vec2){.x=0,.y=offset_px},(vec2){.x=20*16,.y=30*16+offset_px/4});//TODO: remove magic number(s) + + hh_update_screen((vec2){.y=viewport.y,.x=0},player); + if (viewport.x == previousViewport.x && viewport.y == previousViewport.y){} + else{ + // update previous viewport values + + //printf("viewport y %d\n",viewport.y-(offset/40*16)); + //printf("offset %d\n",offset); + hh_ppu_update_aux((hh_s_ppu_loc_aux){ + .bg_shift_x = viewport.x - 0, + .bg_shift_y = viewport.y-(offset/40*16), + .fg_fetch = 0, + .sysreset = 0, + }); + previousViewport = viewport; + + } + + return viewport; +} + 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++) { |