diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-09-24 02:27:30 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-09-24 02:27:30 +0200 |
commit | b5c7b4a162a780980b3ecacf0edd49541888a0a8 (patch) | |
tree | a401b50e2e8071fc6aec6b5392997b902e1b721d /src/control | |
parent | ea8840291cdf66784c6a2cb465b63ccfb5483c38 (diff) | |
download | rpgedit-b5c7b4a162a780980b3ecacf0edd49541888a0a8.tar rpgedit-b5c7b4a162a780980b3ecacf0edd49541888a0a8.zip |
Move more SDL-specific things to the view
Diffstat (limited to 'src/control')
-rw-r--r-- | src/control/ImageLoader.cpp | 59 | ||||
-rw-r--r-- | src/control/ImageLoader.hpp | 62 | ||||
-rw-r--r-- | src/control/MapContext.cpp | 15 | ||||
-rw-r--r-- | src/control/MapContext.hpp | 9 | ||||
-rw-r--r-- | src/control/RPGEdit.cpp | 2 | ||||
-rw-r--r-- | src/control/RPGEdit.hpp | 1 |
6 files changed, 5 insertions, 143 deletions
diff --git a/src/control/ImageLoader.cpp b/src/control/ImageLoader.cpp deleted file mode 100644 index 2e78087..0000000 --- a/src/control/ImageLoader.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright (c) 2014, Matthias Schiffer <mschiffer@universe-factory.net> - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#include "ImageLoader.hpp" - -#include <SDL_image.h> - - -namespace RPGEdit { - -namespace Control { - -std::unique_ptr<SDL_Surface, ImageLoader::SDL_Surface_deleter> ImageLoader::load(const std::string &name) { - std::string filename = "../resources/" + name + ".png"; - - SDL_Surface *surface = IMG_Load(filename.c_str()); - - return std::unique_ptr<SDL_Surface, SDL_Surface_deleter>(surface, SDL_Surface_deleter()); -} - -SDL_Surface * ImageLoader::get(const std::string &name) { - std::unique_ptr<SDL_Surface, SDL_Surface_deleter> &surface = tiles[name]; - - if (!surface) - surface = load(name); - - if (!surface) - tiles.erase(tiles.find(name)); - - return surface.get(); -} - - -} - -} diff --git a/src/control/ImageLoader.hpp b/src/control/ImageLoader.hpp deleted file mode 100644 index 36ae7cd..0000000 --- a/src/control/ImageLoader.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (c) 2014, Matthias Schiffer <mschiffer@universe-factory.net> - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#pragma once - -#include <memory> -#include <unordered_map> - -#include <SDL.h> - - -namespace RPGEdit { - -namespace Control { - -class ImageLoader { -private: - class SDL_Surface_deleter { - public: - void operator()(SDL_Surface *surface) { - SDL_FreeSurface(surface); - } - }; - - std::unordered_map<std::string, std::unique_ptr<SDL_Surface, SDL_Surface_deleter>> tiles; - - std::unique_ptr<SDL_Surface, SDL_Surface_deleter> load(const std::string &name); - -public: - SDL_Surface * get(const std::string &name); - - void clear() { - tiles.clear(); - } -}; - -} - -} diff --git a/src/control/MapContext.cpp b/src/control/MapContext.cpp index a981e8a..5c715db 100644 --- a/src/control/MapContext.cpp +++ b/src/control/MapContext.cpp @@ -31,19 +31,8 @@ namespace RPGEdit { namespace Control { -MapContext::MapContext(EventBus *eventBus0, InputHandler *inputHandler0, ImageLoader *imageLoader0, const std::shared_ptr<const Model::Map> &map0) - : eventBus(eventBus0), inputHandler(inputHandler0), imageLoader(imageLoader0), map(map0) { - const std::vector<std::string> &tileset = map->getTileset(); - - tiles.resize(tileset.size()); - for (size_t i = 0; i < tileset.size(); i++) - tiles[i] = imageLoader->get("tile/" + tileset[i]); - - std::deque<std::shared_ptr<Model::Entity>> &mapEntities = map->getEntities(); - - for (const std::shared_ptr<Model::Entity> &entity : mapEntities) - entities[entity->getName()] = imageLoader->get("entity/" + entity->getName()); - +MapContext::MapContext(EventBus *eventBus0, InputHandler *inputHandler0, const std::shared_ptr<const Model::Map> &map0) + : eventBus(eventBus0), inputHandler(inputHandler0), map(map0) { inputHandler->registerListener( [this] (uint16_t key, bool pressed, uint64_t time) { if (pressed) diff --git a/src/control/MapContext.hpp b/src/control/MapContext.hpp index 446ca10..0612dd3 100644 --- a/src/control/MapContext.hpp +++ b/src/control/MapContext.hpp @@ -27,7 +27,6 @@ #pragma once #include "EventBus.hpp" -#include "ImageLoader.hpp" #include "InputHandler.hpp" #include "../model/Map.hpp" #include "../view/MapView.hpp" @@ -44,13 +43,9 @@ class MapContext { private: EventBus *const eventBus; InputHandler *const inputHandler; - ImageLoader *const imageLoader; std::shared_ptr<const Model::Map> map; - std::vector<SDL_Surface *> tiles; - std::map<std::string, SDL_Surface *> entities; - uint64_t totalTicks = 0; void movePlayer(Model::Direction dir, uint64_t time); @@ -58,14 +53,14 @@ private: void keyPressed(uint16_t key, uint64_t time); public: - MapContext(EventBus *eventBus0, InputHandler *inputHandler0, ImageLoader *imageLoader0, const std::shared_ptr<const Model::Map> &map0); + MapContext(EventBus *eventBus0, InputHandler *inputHandler0, const std::shared_ptr<const Model::Map> &map0); Model::Position getViewPosition(uint64_t time) { return map->getPlayerEntity()->getPosition(time); } std::shared_ptr<View::MapView> initView(const std::shared_ptr<View::Window> &window) { - return std::make_shared<View::MapView>(window, map, tiles, entities); + return std::make_shared<View::MapView>(window, map); } }; diff --git a/src/control/RPGEdit.cpp b/src/control/RPGEdit.cpp index 0c55a6b..0f31468 100644 --- a/src/control/RPGEdit.cpp +++ b/src/control/RPGEdit.cpp @@ -110,7 +110,7 @@ void RPGEdit::eventLoop() { void RPGEdit::run() { std::shared_ptr<Model::Map> map = Model::Map::load("test"); - ctx = std::make_shared<MapContext>(&eventBus, &inputHandler, &tileLoader, map); + ctx = std::make_shared<MapContext>(&eventBus, &inputHandler, map); window = std::make_shared<View::Window>(); mapView = ctx->initView(window); diff --git a/src/control/RPGEdit.hpp b/src/control/RPGEdit.hpp index 8b5e697..4279f10 100644 --- a/src/control/RPGEdit.hpp +++ b/src/control/RPGEdit.hpp @@ -46,7 +46,6 @@ private: EventBus eventBus; InputHandler inputHandler; - ImageLoader tileLoader; std::shared_ptr<MapContext> ctx; |