aboutsummaryrefslogtreecommitdiff
path: root/src/engine/draw_screen.c
diff options
context:
space:
mode:
authorNielsCoding <48092678+heavydemon21@users.noreply.github.com>2023-03-30 13:02:36 +0200
committerNielsCoding <48092678+heavydemon21@users.noreply.github.com>2023-03-30 13:02:36 +0200
commit552dcc17db2b98287ba1b480c2e70759cd94d81f (patch)
tree7f7bbd7a8b3964bbebc2878d33be0ed8a9382e3f /src/engine/draw_screen.c
parent7f51cd925883bbf958baa289d4d19231667c9eba (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.c103
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++) {