Minesweeper/source/engine/engine.cpp
2024-05-08 13:50:29 -04:00

85 lines
No EOL
1.8 KiB
C++

// Header
#include <engine/engine.h>
// Variables
double Engine::deltaTime;
SDL_Renderer* Engine::renderer;
Vector2 Engine::mousePos;
int Engine::clicking;
// Constructor
Engine::Engine(){
// Init SDL2
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
// Create a window
window = SDL_CreateWindow("Minesweeper",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
SCR_WIDTH, SCR_HEIGHT,
SDL_WINDOW_SHOWN);
if(window == NULL){
throw("Failed to create an SDL window.\n");
}
// Create a renderer
Engine::renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED);
if(Engine::renderer == NULL){
throw("Failed to create an SDL renderer.\n");
}
// Staring SDL2 subsystems
IMG_Init(IMG_INIT_PNG);
TTF_Init();
// We're running!
running = true;
clicking = false;
}
// Functions
void Engine::Update(){
// Getting events
SDL_Event event;
// Polling
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_QUIT:
running = false;
break;
case SDL_MOUSEMOTION:
Engine::mousePos = Vector2(event.motion.x, event.motion.y);
break;
case SDL_MOUSEBUTTONDOWN:
if(event.button.button == SDL_BUTTON_LEFT){
clicking = 1;
}
else if(event.button.button == SDL_BUTTON_RIGHT){
clicking = 2;
}
break;
case SDL_MOUSEBUTTONUP:
clicking = 0;
break;
}
}
// Calculate deltaTime
Uint32 now = SDL_GetTicks();
Engine::deltaTime = (now - last) / 1000.0f;
last = now;
}
void Engine::Clear(){
SDL_SetRenderDrawColor(Engine::renderer, 0,0,0, 1);
SDL_RenderClear(Engine::renderer);
}
void Engine::Display(){
SDL_RenderPresent(Engine::renderer);
}
void Engine::Delete(){
SDL_DestroyRenderer(Engine::renderer);
SDL_DestroyWindow(window);
SDL_Quit();
}