#include "sdlpp.hpp" #include #include #include #define PLAYER_ID 0x00000001 #define FINALLY_ID 0x00000002 std::shared_ptr player; std::vector> bgtextures; bool quit = false; void addStuff(SDLPP::Scene &scene, std::shared_ptr &r) { auto y = std::make_shared(0.4,0.2,0.25,0.4, r); y->addCollision(SDLPP::Rect(0,0,1,1)); y->setTexture("6.png"); y->setId(FINALLY_ID); scene.addObject(y); auto x = std::make_shared(0,0,0.2,0.2, r); x->addCollision(SDLPP::Rect(0,0,1,1)); x->setTexture("5.png"); x->setId(PLAYER_ID); scene.addObject(x); player = x; } void quitGame() { std::cout << "Quitting!" << std::endl; quit = true; } void handleKeyDown(SDL_Keycode key, SDLPP::Scene &scene) { switch(key) { case SDLK_UP: scene.setBackground(bgtextures[0]); break; case SDLK_DOWN: scene.setBackground(bgtextures[1]); break; case SDLK_RIGHT: scene.setBackground(bgtextures[2]); break; case SDLK_LEFT: scene.setBackground(bgtextures[3]); break; case SDLK_ESCAPE: quitGame(); break; case SDLK_a: player->addMovement(-1,0); break; case SDLK_d: player->addMovement(1,0); break; case SDLK_w: player->addMovement(0,-1); break; case SDLK_s: player->addMovement(0,1); break; default: scene.setBackground(bgtextures[4]); break; } } void handleKeyUp(SDL_Keycode key) { switch(key) { case SDLK_a: player->addMovement(1,0); break; case SDLK_d: player->addMovement(-1,0); break; case SDLK_w: player->addMovement(0,1); break; case SDLK_s: player->addMovement(0,-1); default: break; } } void pollEvents(SDLPP::Scene &scene) { SDL_Event event; while( SDL_PollEvent( &event ) != 0 ) { switch(event.type) { case SDL_QUIT: quitGame(); break; case SDL_KEYDOWN: if( !event.key.repeat ) handleKeyDown(event.key.keysym.sym, scene); break; case SDL_KEYUP: handleKeyUp(event.key.keysym.sym); break; case SDL_WINDOWEVENT: if(event.window.event == SDL_WINDOWEVENT_RESIZED) scene.updateSizeAndPosition(); default: break; } } } void doInput(std::shared_ptr scene) { FPSmanager gFPS; SDL_initFramerate(&gFPS); SDL_setFramerate(&gFPS, 200); int base = SDL_GetTicks(); int frames = 0; while(!quit) { SDL_framerateDelay(&gFPS); pollEvents(*scene); scene->movement(); for( auto &x : scene->getCollisions(*player) ) { if( x->getId() == FINALLY_ID ) { std::cout << "Finally!" << std::endl; } } frames++; if(SDL_GetTicks() - base >= 1000) { base = SDL_GetTicks(); printf("FPS: %d\n", frames); frames = 0; } } } int main() { SDLPP::init(); SDLPP::Window w("Oh yeah, boi!"); auto renderer = std::make_shared(w); auto main_scene = std::make_shared(renderer); bgtextures.push_back(std::make_shared(renderer, "1.bmp")); bgtextures.push_back(std::make_shared(renderer, "2.bmp")); bgtextures.push_back(std::make_shared(renderer, "3.png")); bgtextures.push_back(std::make_shared(renderer, "4.png")); bgtextures.push_back(std::make_shared(renderer, "test.bmp")); main_scene->setBackground(bgtextures[0]); addStuff(*main_scene, renderer); player->setMovementSpeed(0.3); FPSmanager gFPS; SDL_initFramerate(&gFPS); SDL_setFramerate(&gFPS, 60); std::thread inputThread(doInput, main_scene); while( !quit ) { SDL_framerateDelay(&gFPS); main_scene->renderScene(); main_scene->presentScene(); } inputThread.join(); }