diff options
author | kartofen <mladenovnasko0@gmail.com> | 2023-04-09 23:36:55 +0300 |
---|---|---|
committer | kartofen <mladenovnasko0@gmail.com> | 2023-04-09 23:36:55 +0300 |
commit | 80ead50951c8b0d2c60c9fd57b8a4c943634b084 (patch) | |
tree | 635d8479b7e862d3cd7b3bc69b0cb64e31c38c2e /src/main.c | |
parent | fc027f7d214028086178a7328926c9b14ead464d (diff) |
things...
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 65 |
1 files changed, 50 insertions, 15 deletions
@@ -30,17 +30,10 @@ int main(void) SDL_LogSetAllPriority(SDL_LOG_PRIORITY_ERROR); #endif - map_t m; - if(map_load(&m, "files/map_clear.txt")) - return 1; - map_print(&m); - map_unload(&m); - - return 0; - // ----------------- START SDL ----------------- // int ret = 1; SDL_Window *window = NULL; + map_t map = {0}; if(SDL_Init(SDL_INIT_VIDEO) != 0) { log_critical(LOG_VIDEO, "SDL_Init: %s", SDL_GetError()); @@ -62,14 +55,13 @@ int main(void) } // --------------------------------------------- // + if(map_load(&map, "files/map_clear.txt")) + return 1; bool quit = false; - while(!quit) { - // ----------------- GAME LOOP ----------------- // - for(int i = 0; i < SW; i++) - vline(i, 0, SH-1, COLOR_LIGHTWHITE); - // --------------------------------------------- // - + int wasd[4] = {0}; + while(!quit) + { SDL_Event event; while(SDL_PollEvent(&event)) { // ----------------- EVENTS ----------------- // @@ -77,13 +69,55 @@ int main(void) case SDL_QUIT: quit = true; break; + case SDL_KEYDOWN: + switch(event.key.keysym.sym) + { + case 'w': wasd[0] = 1; break; + case 'a': wasd[1] = 1; break; + case 's': wasd[2] = 1; break; + case 'd': wasd[3] = 1; break; + } + break; + case SDL_KEYUP: + switch(event.key.keysym.sym) + { + case 'w': wasd[0] = 0; break; + case 'a': wasd[1] = 0; break; + case 's': wasd[2] = 0; break; + case 'd': wasd[3] = 0; break; + } + break; default: - log_debug(LOG_APPLICATION, "event: %d", event.type); + // log_debug(LOG_APPLICATION, "event: %d", event.type); break; } // ------------------------------------------ // } + // ----------------- GAME LOOP ----------------- // + + int x,y; + SDL_GetRelativeMouseState(&x,&y); + map.player.angle += x * 0.03f; + + float move_vec[2] = {0.f, 0.f}; + if(wasd[0]) { move_vec[0] += map.player.anglecos*0.2f; move_vec[1] += map.player.anglesin*0.2f; } + if(wasd[2]) { move_vec[0] -= map.player.anglecos*0.2f; move_vec[1] -= map.player.anglesin*0.2f; } + if(wasd[1]) { move_vec[0] += map.player.anglesin*0.2f; move_vec[1] -= map.player.anglecos*0.2f; } + if(wasd[3]) { move_vec[0] -= map.player.anglesin*0.2f; move_vec[1] += map.player.anglecos*0.2f; } + int pushing = wasd[0] || wasd[1] || wasd[2] || wasd[3]; + float acceleration = pushing ? 0.4 : 0.2; + + map.player.pos.x += move_vec[0] * acceleration; + map.player.pos.y += move_vec[1] * acceleration; + + player_update(&map.player); + + for(int i = 0; i < SW-1; i++) + vline(i, 0, SH-1, COLOR_LIGHTWHITE); + map_draw(&map, SW, SH); + // --------------------------------------------- // + if(SDL_UpdateWindowSurface(window) != 0) { log_error(LOG_VIDEO, "SDL_UpdateWindowSurface: %s", SDL_GetError()); } @@ -91,6 +125,7 @@ int main(void) ret = 0; exit: + map_unload(&map); if(window != NULL) SDL_DestroyWindow(window); SDL_Quit(); return ret; |