#include "program.h" #include "tilemap.h" #include "camera.h" #include "sprite.h" #include #include SDL_Window* g_window; double g_delta_time; double g_frame_start; #define INITFLAGS SDL_INIT_EVENTS | SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_GAMECONTROLLER int program_run(const struct ProgramSettings* settings) { SDL_Init(INITFLAGS); g_window = SDL_CreateWindow( settings->title, SDL_WINDOWPOS_CENTERED_DISPLAY(0), SDL_WINDOWPOS_CENTERED_DISPLAY(0), settings->view_resolution.x, settings->view_resolution.y, SDL_WINDOW_FULLSCREEN | SDL_WINDOW_RESIZABLE); render_init(g_window, settings); camera_init(); Spritesheet* sheet = spritesheet_from_texture("resources/player.png", (IVector){64, 64}); Sprite* sprite = sprite_from_spritesheet(sheet); for(;;) { SDL_Delay(1); program_handle_events(); sprite_draw(sprite, IdentityTransform); render_present(); } return 1; } void program_quit() { render_clean(); SDL_DestroyWindow(g_window); SDL_Quit(); exit(0); } void program_handle_events() { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { default: break; case SDL_WINDOWEVENT: if(event.window.windowID == SDL_GetWindowID(g_window)) { program_handle_windowevent(&event.window); } break; case SDL_QUIT: program_quit(); break; } } } void program_handle_windowevent(SDL_WindowEvent* event) { switch(event->type) { default: render_handle_resize(); break; } }