diff options
Diffstat (limited to 'src/control/MapContext.hpp')
-rw-r--r-- | src/control/MapContext.hpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/control/MapContext.hpp b/src/control/MapContext.hpp index a98d818..4cbf38a 100644 --- a/src/control/MapContext.hpp +++ b/src/control/MapContext.hpp @@ -27,6 +27,7 @@ #pragma once #include "ImageLoader.hpp" +#include "InputHandler.hpp" #include "../model/Map.hpp" #include "../view/MapView.hpp" @@ -47,9 +48,31 @@ private: std::vector<SDL_Surface *> tiles; std::map<std::string, SDL_Surface *> entities; + uint64_t totalTicks = 0; + public: MapContext(ImageLoader *imageLoader0, const std::shared_ptr<const Model::Map> &map0); + void advance(InputHandler *inputHandler, uint32_t ticks) { + uint64_t totalTicksOld = totalTicks; + totalTicks += ticks; + + uint64_t advanced = totalTicks/100 - totalTicksOld/100; + + if (inputHandler->isKeyPressed(SDL_SCANCODE_UP)) { + map->getPlayerEntity().move(Model::NORTH, advanced); + } + else if (inputHandler->isKeyPressed(SDL_SCANCODE_RIGHT)) { + map->getPlayerEntity().move(Model::EAST, advanced); + } + else if (inputHandler->isKeyPressed(SDL_SCANCODE_DOWN)) { + map->getPlayerEntity().move(Model::SOUTH, advanced); + } + else if (inputHandler->isKeyPressed(SDL_SCANCODE_LEFT)) { + map->getPlayerEntity().move(Model::WEST, advanced); + } + } + std::shared_ptr<View::MapView> initView(const std::shared_ptr<View::Window> &window) { return std::make_shared<View::MapView>(window, map, tiles, entities); } |