Files
GameJam-polytech/src/renderer.c
T

96 lines
2.0 KiB
C

#include "renderer.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_blendmode.h>
#include <SDL2/SDL_error.h>
#include <SDL2/SDL_rect.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_timer.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include "input.h"
#include "scene.h"
bool running;
MonitorSize_t monitorSize;
SDL_Window* win;
SDL_Renderer * renderer;
const Scene_t * scene;
int scenesCount = 0;
//int (*compar)(const void [.size], const void [.size], void *)
void renderer_main(void(*game_setup)(void), void(*game_loop)(void)) {
// returns zero on success else non-zero
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf("error initializing SDL: %s\n", SDL_GetError());
}
win = SDL_CreateWindow("The legend of ADAM", // creates a window
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1280, 720, 0);
Uint32 render_flags = SDL_RENDERER_ACCELERATED;
// creates a renderer to render our images
renderer = SDL_CreateRenderer(win, -1, render_flags);
if(renderer == NULL) {
fprintf(stderr, "Could not create renderer\n");
}
SDL_GetRendererOutputSize(renderer, &monitorSize.width, &monitorSize.height);
input_init();
running = true;
game_setup();
while(running) {
SDL_RenderClear(renderer);
game_loop();
SDL_Event event;
// Events management
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
// handling of close button
running = false;
printf("Quitting my job!\n");
break;
case SDL_KEYDOWN:
// keyboard API for key pressed
input_poll(event.key.keysym.scancode);
break;
}
}
//no need to make an extra render pass
if(!running) break;
if(scene != NULL)
scene_render(scene);
SDL_RenderPresent(renderer);
SDL_Delay(1000 / 400); //400fps or u a pussy
}
}
void renderer_setScene(const Scene_t * newScene) {
scene = newScene;
}
MonitorSize_t renderer_getMonitorSize() {
return monitorSize;
}
const Scene_t * renderer_getScene(void){
return scene;
}