diff options
Diffstat (limited to 'src/resources/map')
-rw-r--r-- | src/resources/map/map.cpp | 1 | ||||
-rw-r--r-- | src/resources/map/maplayer.cpp | 51 | ||||
-rw-r--r-- | src/resources/map/maplayer.h | 21 | ||||
-rw-r--r-- | src/resources/map/objectslayer.cpp | 76 | ||||
-rw-r--r-- | src/resources/map/objectslayer.h | 51 |
5 files changed, 128 insertions, 72 deletions
diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp index 9cffaa422..cd94c6ae6 100644 --- a/src/resources/map/map.cpp +++ b/src/resources/map/map.cpp @@ -32,6 +32,7 @@ #include "resources/map/mapheights.h" #include "resources/map/maplayer.h" #include "resources/map/mapitem.h" +#include "resources/map/objectslayer.h" #include "resources/map/speciallayer.h" #include "resources/map/tileset.h" #include "resources/map/walklayer.h" diff --git a/src/resources/map/maplayer.cpp b/src/resources/map/maplayer.cpp index e5036676d..1bcd65681 100644 --- a/src/resources/map/maplayer.cpp +++ b/src/resources/map/maplayer.cpp @@ -582,54 +582,3 @@ int MapLayer::getTileDrawWidth(const Image *img, BLOCK_END("MapLayer::getTileDrawWidth") return c; } - -ObjectsLayer::ObjectsLayer(const unsigned width, const unsigned height) : - mTiles(new MapObjectList*[width * height]), - mWidth(width), - mHeight(height) -{ - std::fill_n(mTiles, width * height, static_cast<MapObjectList*>(nullptr)); -} - -ObjectsLayer::~ObjectsLayer() -{ - const unsigned size = mWidth * mHeight; - for (unsigned f = 0; f < size; f ++) - delete mTiles[f]; - - delete [] mTiles; - mTiles = nullptr; -} - -void ObjectsLayer::addObject(const std::string &name, const int type, - const unsigned x, const unsigned y, - unsigned dx, unsigned dy) -{ - if (!mTiles) - return; - - if (x + dx > mWidth) - dx = mWidth - x; - if (y + dy > mHeight) - dy = mHeight - y; - - for (unsigned y1 = y; y1 < y + dy; y1 ++) - { - const unsigned idx1 = x + y1 * mWidth; - const unsigned idx2 = idx1 + dx; - - for (unsigned i = idx1; i < idx2; i ++) - { - if (!mTiles[i]) - mTiles[i] = new MapObjectList(); - mTiles[i]->objects.push_back(MapObject(type, name)); - } - } -} - -MapObjectList *ObjectsLayer::getAt(const unsigned x, const unsigned y) const -{ - if (x >= mWidth || y >= mHeight) - return nullptr; - return mTiles[x + y * mWidth]; -} diff --git a/src/resources/map/maplayer.h b/src/resources/map/maplayer.h index 59e9db2b5..3656194b6 100644 --- a/src/resources/map/maplayer.h +++ b/src/resources/map/maplayer.h @@ -157,25 +157,4 @@ class MapLayer final: public ConfigListener bool mHighlightAttackRange; }; -class ObjectsLayer final -{ - public: - ObjectsLayer(const unsigned width, const unsigned height); - - A_DELETE_COPY(ObjectsLayer) - - ~ObjectsLayer(); - - void addObject(const std::string &name, const int type, - const unsigned x, const unsigned y, - unsigned dx, unsigned dy); - - MapObjectList *getAt(const unsigned x, - const unsigned y) const A_WARN_UNUSED; - private: - MapObjectList **mTiles; - unsigned mWidth; - unsigned mHeight; -}; - #endif // RESOURCES_MAP_MAPLAYER_H diff --git a/src/resources/map/objectslayer.cpp b/src/resources/map/objectslayer.cpp new file mode 100644 index 000000000..a1edc29f7 --- /dev/null +++ b/src/resources/map/objectslayer.cpp @@ -0,0 +1,76 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "resources/map/objectslayer.h" + +#include "resources/map/mapobjectlist.h" + +#include "debug.h" + +ObjectsLayer::ObjectsLayer(const unsigned width, const unsigned height) : + mTiles(new MapObjectList*[width * height]), + mWidth(width), + mHeight(height) +{ + std::fill_n(mTiles, width * height, static_cast<MapObjectList*>(nullptr)); +} + +ObjectsLayer::~ObjectsLayer() +{ + const unsigned size = mWidth * mHeight; + for (unsigned f = 0; f < size; f ++) + delete mTiles[f]; + + delete [] mTiles; + mTiles = nullptr; +} + +void ObjectsLayer::addObject(const std::string &name, const int type, + const unsigned x, const unsigned y, + unsigned dx, unsigned dy) +{ + if (!mTiles) + return; + + if (x + dx > mWidth) + dx = mWidth - x; + if (y + dy > mHeight) + dy = mHeight - y; + + for (unsigned y1 = y; y1 < y + dy; y1 ++) + { + const unsigned idx1 = x + y1 * mWidth; + const unsigned idx2 = idx1 + dx; + + for (unsigned i = idx1; i < idx2; i ++) + { + if (!mTiles[i]) + mTiles[i] = new MapObjectList(); + mTiles[i]->objects.push_back(MapObject(type, name)); + } + } +} + +MapObjectList *ObjectsLayer::getAt(const unsigned x, const unsigned y) const +{ + if (x >= mWidth || y >= mHeight) + return nullptr; + return mTiles[x + y * mWidth]; +} diff --git a/src/resources/map/objectslayer.h b/src/resources/map/objectslayer.h new file mode 100644 index 000000000..c0ce88b33 --- /dev/null +++ b/src/resources/map/objectslayer.h @@ -0,0 +1,51 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef RESOURCES_MAP_OBJECTSLAYER_H +#define RESOURCES_MAP_OBJECTSLAYER_H + +#include <string> + +#include "localconsts.h" + +class MapObjectList; + +class ObjectsLayer final +{ + public: + ObjectsLayer(const unsigned width, const unsigned height); + + A_DELETE_COPY(ObjectsLayer) + + ~ObjectsLayer(); + + void addObject(const std::string &name, const int type, + const unsigned x, const unsigned y, + unsigned dx, unsigned dy); + + MapObjectList *getAt(const unsigned x, + const unsigned y) const A_WARN_UNUSED; + private: + MapObjectList **mTiles; + unsigned mWidth; + unsigned mHeight; +}; + +#endif // RESOURCES_MAP_OBJECTSLAYER_H |