X-Git-Url: https://git.r.bdr.sh/rbdr/super-polarity/blobdiff_plain/7407ac7ff7e7b43ce35771f386e7b259a9c1ba58..ed603039c4a456b37aefe434a3b1a5352362d86b:/src/main.c diff --git a/src/main.c b/src/main.c index 97d1e38..b51a79d 100644 --- a/src/main.c +++ b/src/main.c @@ -8,39 +8,91 @@ #include #include +#include #include "SDL2/SDL.h" +#include "SDL2_image/SDL_image.h" // TODO: Move these guys to a config header file #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define FPS 30 -int main(int argc, const char * argv[]) -{ - - // SDL Initialization. TODO: Should have an initializer. - SDL_Window *window; - SDL_Renderer *renderer; - Uint32 startFrame; - Uint32 endFrame; - Uint32 delay; - int done; - +SDL_Window *window; +SDL_Renderer *renderer; +SDL_Texture *benHead; +SDL_Rect benRect; +double angle = 0; + +void init () { if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("Could not initialize SDL"); exit(1); } - window = SDL_CreateWindow("Super Polarity", 50, 50, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); + // Load the window and renderer + window = SDL_CreateWindow("Super Polarity", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 0, 0, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP); renderer = SDL_CreateRenderer(window, -1, 0); + // Set linear quality for scaling, and the "logical" window size. + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); + SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT); +} + +void close () { + SDL_DestroyTexture(benHead); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} + +void loadAssets() { + // Load the surface. + SDL_Surface *benSurface; + benSurface = IMG_Load("data/img/static/ben.png"); + benHead = SDL_CreateTextureFromSurface(renderer, benSurface); + benRect.x = 230; + benRect.y = 150; + benRect.w = 180; + benRect.h = 180; + SDL_FreeSurface(benSurface); +} + +void render (SDL_Renderer *renderer) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderClear(renderer); + SDL_RenderCopyEx(renderer, benHead, NULL, &benRect, angle, NULL, SDL_FLIP_NONE); + SDL_RenderPresent(renderer); +} + +void update (dt) { + angle = (Uint32)(angle + dt / 5) % 360; +} + +int main(int argc, const char * argv[]) +{ + + // SDL Initialization. TODO: Should have an initializer. + Uint32 startFrame = 0; + Uint32 endFrame = 0; + Uint32 lastTime = 0; + Uint32 dt; + Uint32 delay; + int done; + + init(); + loadAssets(); + + done = 0; // Event Loop. while (!done) { startFrame = SDL_GetTicks(); + dt = startFrame - lastTime; + lastTime = startFrame; + SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { @@ -48,6 +100,9 @@ int main(int argc, const char * argv[]) } } + update(dt); + render(renderer); + endFrame = SDL_GetTicks(); /* see if we have time to sleep */ @@ -58,7 +113,7 @@ int main(int argc, const char * argv[]) SDL_Delay(delay); } - SDL_Quit(); + close(); return 0; }