121 lines
1.8 KiB
C++
121 lines
1.8 KiB
C++
#include "game.hpp"
|
|
#include "Actor.hpp"
|
|
|
|
|
|
game::game()
|
|
{
|
|
ptr_MainWindow = nullptr;
|
|
ptr_MainRenderer = nullptr;
|
|
GameTick = 0;
|
|
GameIsRunning = true;
|
|
}
|
|
|
|
game::~game()
|
|
{
|
|
}
|
|
|
|
|
|
void game::input()
|
|
{
|
|
SDL_Event event;
|
|
|
|
while (SDL_PollEvent (&event))
|
|
{
|
|
switch (event.type)
|
|
{
|
|
case SDL_QUIT:
|
|
GameIsRunning = false;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
const Uint8* state = SDL_GetKeyboardState(NULL);
|
|
if (state[SDL_SCANCODE_ESCAPE])
|
|
{
|
|
GameIsRunning = false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void game::update()
|
|
{
|
|
while (!SDL_TICKS_PASSED(SDL_GetTicks(), GameTick + 16)); //Wait 16ms since last frame
|
|
|
|
float dt = (SDL_GetTicks() - GameTick)/ 1000.0f; //Zeitdifferent in Sekunden
|
|
if(dt > 0.05f) dt = 0.05f;
|
|
|
|
GameTick = SDL_GetTicks();
|
|
|
|
//Update all Actores
|
|
|
|
UpdateActors = true;
|
|
for (auto a : ActorList)
|
|
{
|
|
a->Update(dt);
|
|
}
|
|
|
|
UpdateActors = false;
|
|
|
|
}
|
|
|
|
void game::output()
|
|
{
|
|
for (auto a : ActorList)
|
|
{
|
|
a->Draw(ptr_MainRenderer);
|
|
}
|
|
}
|
|
|
|
bool game::Init(int x, int y, int w, int h)
|
|
{
|
|
ptr_MainWindow = SDL_CreateWindow("ComponentBasedProgramm", x,y,w,h,0);
|
|
|
|
if (!ptr_MainWindow)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
ptr_MainRenderer = SDL_CreateRenderer(ptr_MainWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
|
|
|
if (!ptr_MainRenderer)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
GameTick = SDL_GetTicks();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
void game::RunLoop()
|
|
{
|
|
while(GameIsRunning){
|
|
input();
|
|
update();
|
|
output();
|
|
}
|
|
|
|
}
|
|
|
|
void game::Shutdown()
|
|
{
|
|
|
|
}
|
|
|
|
void game::AddActor(class Actor *ptr_actor)
|
|
{
|
|
SDL_DestroyRenderer(ptr_MainRenderer);
|
|
SDL_DestroyWindow(ptr_MainWindow);
|
|
SDL_Quit();
|
|
|
|
}
|
|
|
|
void RemActor(class Actor *ptr_actor)
|
|
{
|
|
|
|
} |