#include #include #include #include "sector.h" #include "common.h" int SW = 1200; int SH = 800; char *name = "Thingy"; SDL_Surface *surface = NULL; #define CLEAR_SCREEN(c) for(int i = 0; i < SW-1; i++) vline(i, 0, SH-1, c); void vline(int x, int y1, int y2, uint32_t col) { y1 = clamp(y1, 0, SH-1); y2 = clamp(y2, 0, SH-1); uint32_t *pixels = (uint32_t*)surface->pixels; for(int y = min(y1, y2); y <= max(y1, y2); y++) { pixels[y * SW + x] = SDL_MapRGB(surface->format, color(col)); } } int main(void) { // set logging priority #ifdef DEBUG SDL_LogSetAllPriority(SDL_LOG_PRIORITY_DEBUG); #else SDL_LogSetAllPriority(SDL_LOG_PRIORITY_ERROR); #endif // ----------------- 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()); goto exit; } window = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SW, SH, 0); if(window == NULL) { log_critical(LOG_VIDEO, "SDL_CreateWindow: %s", SDL_GetError()); goto exit; } surface = SDL_GetWindowSurface(window); if(surface == NULL) { log_critical(LOG_VIDEO, "SDL_GetWindowSurface %s", SDL_GetError()); goto exit; } SDL_SetRelativeMouseMode(SDL_TRUE); // --------------------------------------------- // if(map_load(&map, "files/map_clear.txt")) return 1; bool quit = false; bool wasd[4] = {0}; while(!quit) { SDL_Event event; while(SDL_PollEvent(&event)) { // ----------------- EVENTS ----------------- // #define KEY_SWITCH(b) \ switch(event.key.keysym.sym) { \ case 'w': wasd[0] = b; break; \ case 'a': wasd[1] = b; break; \ case 's': wasd[2] = b; break; \ case 'd': wasd[3] = b; break; } switch(event.type) { case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: KEY_SWITCH(true); break; case SDL_KEYUP: KEY_SWITCH(false); break; default: // log_debug(LOG_APPLICATION, "event: %d", event.type); break; } // ------------------------------------------ // } // ----------------- GAME LOOP ----------------- // int x,y; SDL_GetRelativeMouseState(&x,&y); player_input(&map.player, wasd, x, y); map_player_sector(&map); // map_detect_collision(&map); player_update(&map.player); CLEAR_SCREEN(COLOR_LIGHTWHITE); map_draw(&map, SW, SH); // --------------------------------------------- // if(SDL_UpdateWindowSurface(window) != 0) { log_error(LOG_VIDEO, "SDL_UpdateWindowSurface: %s", SDL_GetError()); } } ret = 0; exit: map_unload(&map); if(window != NULL) SDL_DestroyWindow(window); SDL_Quit(); return ret; }