summaryrefslogtreecommitdiffstats
path: root/src/control
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-09-24 02:27:30 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-09-24 02:27:30 +0200
commitb5c7b4a162a780980b3ecacf0edd49541888a0a8 (patch)
treea401b50e2e8071fc6aec6b5392997b902e1b721d /src/control
parentea8840291cdf66784c6a2cb465b63ccfb5483c38 (diff)
downloadrpgedit-b5c7b4a162a780980b3ecacf0edd49541888a0a8.tar
rpgedit-b5c7b4a162a780980b3ecacf0edd49541888a0a8.zip
Move more SDL-specific things to the view
Diffstat (limited to 'src/control')
-rw-r--r--src/control/ImageLoader.cpp59
-rw-r--r--src/control/ImageLoader.hpp62
-rw-r--r--src/control/MapContext.cpp15
-rw-r--r--src/control/MapContext.hpp9
-rw-r--r--src/control/RPGEdit.cpp2
-rw-r--r--src/control/RPGEdit.hpp1
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;