From e304b0a4acc3f0870f55e6b584c464096333dfdc Mon Sep 17 00:00:00 2001 From: zlago Date: Fri, 27 Sep 2024 18:34:24 +0200 Subject: tilemap collision the 'middle ground' layer is the only layer which is solid, and the boundary between the background and the foreground additionally, the maps now can have a custom sky color --- src/main.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 6da4d9a..eccd351 100644 --- a/src/main.c +++ b/src/main.c @@ -46,6 +46,7 @@ int main(int argc, char **argv) { goto end; } SDL_RenderSetLogicalSize(renderer, WINDOW_WIDTH, WINDOW_HEIGHT); + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); { res_init(); @@ -57,7 +58,7 @@ int main(int argc, char **argv) { } free(a); struct blob map = res_get_map("untitled"); - tilemap = load_tilemap(map.data, map.size); + tilemap = tilemap_load(map.data, map.size); printf("load_tilemap %p\n", (void *) tilemap); SDL_SetRenderTarget(renderer, NULL); } @@ -125,6 +126,8 @@ int main(int argc, char **argv) { case SDL_MOUSEWHEEL: // the scroll wheel gets rolled //fprintf(stderr, "scrolled by %2i %2i %4.1f %4.1f\n", evt.wheel.x, evt.wheel.y, evt.wheel.preciseX, evt.wheel.preciseY); break; + case SDL_CLIPBOARDUPDATE: // annoying + break; case SDL_WINDOWEVENT: // window related events switch (evt.window.event) { case SDL_WINDOWEVENT_SHOWN: @@ -179,9 +182,6 @@ int main(int argc, char **argv) { SDL_SetRenderTarget(renderer, NULL); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_RenderClear(renderer); - SDL_SetRenderDrawColor(renderer, 0, 128, 255, 0); - SDL_RenderFillRect(renderer, &(SDL_Rect) {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}); - SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); x += input_right(input_now) - input_left(input_now); y += input_down(input_now) - input_up(input_now); @@ -189,16 +189,15 @@ int main(int argc, char **argv) { if (y < 0) {y = 0;} else if (y + WINDOW_HEIGHT > tilemap->height * 8) {y = tilemap->height * 8 - WINDOW_HEIGHT;} //SDL_RenderCopy(renderer, tilemap->wang_tileset, &(SDL_Rect) {0, 0, 128, 90}, &(SDL_Rect) {0, 0, 128, 90}); - for (int i = 0; i < tilemap->layers; i++) { - SDL_RenderCopy(renderer, tilemap->tilemaps[i], &(SDL_Rect) {x * tilemap->parallax[i].x, y * tilemap->parallax[i].y, WINDOW_WIDTH, WINDOW_HEIGHT}, &(SDL_Rect) {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}); - } + tilemap_background(tilemap, x, y, WINDOW_WIDTH, WINDOW_HEIGHT); + tilemap_foreground(tilemap, x, y, WINDOW_WIDTH, WINDOW_HEIGHT); //SDL_RenderCopy(renderer, res_get_texture("meow").data, &(SDL_Rect) {0, 0, 128, 90}, &(SDL_Rect) {0, 0, 128, 90}); // then we wait for the next video frame SDL_RenderPresent(renderer); } end: - free_tilemap(tilemap), tilemap = NULL; + tilemap_free(tilemap), tilemap = NULL; SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); //SDL_QuitSubSystem(INIT_SUBSYSTEMS); -- cgit 1.4.1-2-gfad0