73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
#include "program.h"
|
|
#include "tilemap.h"
|
|
#include "camera.h"
|
|
#include "sprite.h"
|
|
#include <SDL2/SDL_video.h>
|
|
#include <SDL2/SDL_image.h>
|
|
|
|
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;
|
|
}
|
|
}
|