diff options
Diffstat (limited to 'src/view/MapView.cpp')
-rw-r--r-- | src/view/MapView.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/view/MapView.cpp b/src/view/MapView.cpp index c8abab5..dbce5e4 100644 --- a/src/view/MapView.cpp +++ b/src/view/MapView.cpp @@ -31,9 +31,8 @@ namespace RPGEdit { namespace View { -MapView::MapView(const std::shared_ptr<Window> &window0, - const std::shared_ptr<const Model::Map> &map0) - : window(window0), map(map0) { +MapView::MapView(const std::shared_ptr<Window> &window0, const std::vector<std::string> &tileset) + : window(window0) { uint32_t rmask, gmask, bmask, amask; #if SDL_BYTEORDER == SDL_BIG_ENDIAN @@ -50,8 +49,6 @@ MapView::MapView(const std::shared_ptr<Window> &window0, SpriteCache *spriteCache = window->getSpriteCache(); - const std::vector<std::string> &tileset = map->getTileset(); - SDL_Surface *surface = SDL_CreateRGBSurface(0, getTileSize()*tileset.size(), getTileSize(), 32, rmask, gmask, bmask, amask); for (size_t i = 0; i < tileset.size(); i++) { @@ -79,11 +76,11 @@ MapView::~MapView() { clearEntities(); } -void MapView::updateEntities(const std::vector<std::unique_ptr<Model::Entity>> &entities) { +void MapView::updateEntities(const std::deque<Model::Entity> &entities) { SpriteCache *spriteCache = window->getSpriteCache(); for (auto &entity : entities) { - const std::string &name = entity->getName(); + const std::string &name = entity.getName(); if (!entitySprites[name]) entitySprites[name] = SDL_CreateTextureFromSurface(window->getRenderer(), spriteCache->get("entity", name)); @@ -91,13 +88,13 @@ void MapView::updateEntities(const std::vector<std::unique_ptr<Model::Entity>> & } void MapView::clearEntities() { - for (const std::pair<std::string, SDL_Texture *> &entity : entitySprites) + for (auto &entity : entitySprites) SDL_DestroyTexture(entity.second); entitySprites.clear(); } -void MapView::render(const std::vector<std::unique_ptr<Model::Entity>> &entities, Model::Position center, uint64_t time) { +void MapView::render(const Model::Map *map, Model::Position center, uint64_t time) { SDL_RenderClear(window->getRenderer()); std::pair<int, int> viewport = window->getViewport(); @@ -139,9 +136,9 @@ void MapView::render(const std::vector<std::unique_ptr<Model::Entity>> &entities } } - for (const std::unique_ptr<Model::Entity> &entity : entities) { - Model::Position pos = entity->getPosition(time); - Model::Direction dir = entity->getDirection(); + for (auto &entity : map->getEntities()) { + Model::Position pos = entity.getPosition(time); + Model::Direction dir = entity.getDirection(); SDL_Rect src = { .x = getTileSize()*dir, @@ -157,7 +154,7 @@ void MapView::render(const std::vector<std::unique_ptr<Model::Entity>> &entities .h = tilePixels, }; - SDL_RenderCopy(window->getRenderer(), entitySprites[entity->getName()], &src, &dst); + SDL_RenderCopy(window->getRenderer(), entitySprites[entity.getName()], &src, &dst); } } |