96 lines
2.0 KiB
C
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;
|
|
}
|