#include #include #include "renderer.h" #include "game.h" #include "party.h" #include "timer.h" #include "map.h" #include "mixer.h" #include "transform_system.h" #include "camera_system.h" #include "animation_system.h" void loop(Renderer& renderer, Mixer& mixer) { Game game; game.emplaceSystem(); game.emplaceSystem(); game.emplaceSystem(); Input keystate; auto map = std::make_unique("../res/map1.tmx", renderer); game.setMap(std::move(map)); int lucasSprite = game.emplaceSprite(); game.getSystem().initSprite(lucasSprite, {32, 32}); game.getSystem().initSprite(lucasSprite, "../res/lucas_anim.txt", renderer); int kumaSprite = game.emplaceSprite(); game.getSystem().initSprite(kumaSprite, {32, 32}); game.getSystem().initSprite(kumaSprite, "../res/kuma_anim.txt", renderer); int dusterSprite = game.emplaceSprite(); game.getSystem().initSprite(dusterSprite, {32, 32}); game.getSystem().initSprite(dusterSprite, "../res/duster_anim.txt", renderer); int boneySprite = game.emplaceSprite(); game.getSystem().initSprite(boneySprite, {32, 32}); game.getSystem().initSprite(boneySprite, "../res/boney_anim.txt", renderer); Party party; party.addMember(game, lucasSprite); party.addMember(game, kumaSprite); party.addMember(game, dusterSprite); party.addMember(game, boneySprite); game.getSystem().setFollowingSprite(lucasSprite); game.getSystem().unlockCamera(); renderer.render(game); Timer inputTimer(33); size_t lastTime = SDL_GetTicks(); for (;;) { size_t currentTime = SDL_GetTicks(); size_t frameTime = currentTime - lastTime; lastTime = currentTime; SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { return; } else if (e.type == SDL_KEYDOWN && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { party.beginCrouch(game); } else if (e.type == SDL_KEYUP && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { party.endCrouch(game); } } const Uint8* state = SDL_GetKeyboardState(NULL); keystate.left = state[SDL_SCANCODE_LEFT]; keystate.right = state[SDL_SCANCODE_RIGHT]; keystate.up = state[SDL_SCANCODE_UP]; keystate.down = state[SDL_SCANCODE_DOWN]; inputTimer.accumulate(frameTime); while (inputTimer.step()) { party.move(game, mixer, keystate); } for (System& system : game.systems()) { system.tick(frameTime); } renderer.render(game); } } int main(int, char**) { try { Renderer renderer; Mixer mixer; loop(renderer, mixer); } catch (const sdl_error& ex) { std::cout << "SDL error (" << ex.what() << ")" << std::endl; } return 0; }