diff options
Diffstat (limited to 'src/resources/map')
-rw-r--r-- | src/resources/map/map.cpp | 1 | ||||
-rw-r--r-- | src/resources/map/mapitem.cpp | 169 | ||||
-rw-r--r-- | src/resources/map/mapitem.h | 106 | ||||
-rw-r--r-- | src/resources/map/maplayer.cpp | 138 | ||||
-rw-r--r-- | src/resources/map/maplayer.h | 76 | ||||
-rw-r--r-- | src/resources/map/speciallayer.cpp | 1 |
6 files changed, 278 insertions, 213 deletions
diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp index d1b1bdb47..9cffaa422 100644 --- a/src/resources/map/map.cpp +++ b/src/resources/map/map.cpp @@ -31,6 +31,7 @@ #include "resources/map/mapheights.h" #include "resources/map/maplayer.h" +#include "resources/map/mapitem.h" #include "resources/map/speciallayer.h" #include "resources/map/tileset.h" #include "resources/map/walklayer.h" diff --git a/src/resources/map/mapitem.cpp b/src/resources/map/mapitem.cpp new file mode 100644 index 000000000..eee82d253 --- /dev/null +++ b/src/resources/map/mapitem.cpp @@ -0,0 +1,169 @@ +/* + * 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/mapitem.h" + +#include "gui/font.h" +#include "gui/gui.h" +#include "gui/userpalette.h" + +#include "resources/image.h" +#include "resources/resourcemanager.h" + +#include "render/graphics.h" + +#include "debug.h" + +MapItem::MapItem(): + mImage(nullptr), + mComment(), + mName(), + mType(EMPTY), + mX(-1), + mY(-1) +{ + setType(EMPTY); +} + +MapItem::MapItem(const int type): + mImage(nullptr), + mComment(), + mName(), + mType(type), + mX(-1), + mY(-1) +{ + setType(type); +} + +MapItem::MapItem(const int type, std::string comment): + mImage(nullptr), + mComment(comment), + mName(), + mType(type), + mX(-1), + mY(-1) +{ + setType(type); +} + +MapItem::MapItem(const int type, std::string comment, + const int x, const int y): + mImage(nullptr), + mComment(comment), + mName(), + mType(type), + mX(x), + mY(y) +{ + setType(type); +} + +MapItem::~MapItem() +{ + if (mImage) + { + mImage->decRef(); + mImage = nullptr; + } +} + +void MapItem::setType(const int type) +{ + std::string name; + mType = type; + if (mImage) + mImage->decRef(); + + switch (type) + { + case ARROW_UP: + name = "graphics/sprites/arrow_up.png"; + break; + case ARROW_DOWN: + name = "graphics/sprites/arrow_down.png"; + break; + case ARROW_LEFT: + name = "graphics/sprites/arrow_left.png"; + break; + case ARROW_RIGHT: + name = "graphics/sprites/arrow_right.png"; + break; + default: + break; + } + + if (!name.empty()) + { + ResourceManager *const resman = ResourceManager::getInstance(); + mImage = resman->getImage(name); + } + else + { + mImage = nullptr; + } +} + +void MapItem::setPos(const int x, const int y) +{ + mX = x; + mY = y; +} + +void MapItem::draw(Graphics *const graphics, const int x, const int y, + const int dx, const int dy) const +{ + BLOCK_START("MapItem::draw") + if (mImage) + graphics->drawImage(mImage, x, y); + + switch (mType) + { + case ROAD: + case CROSS: + graphics->setColor(userPalette->getColorWithAlpha( + UserPalette::ROAD_POINT)); + graphics->fillRectangle(Rect(x + dx / 3, y + dy / 3, + dx / 3, dy / 3)); + break; + case HOME: + { + graphics->setColor(userPalette->getColorWithAlpha( + UserPalette::HOME_PLACE)); + graphics->fillRectangle(Rect(x, y, dx, dy)); + graphics->setColor(userPalette->getColorWithAlpha( + UserPalette::HOME_PLACE_BORDER)); + graphics->drawRectangle(Rect(x, y, dx, dy)); + break; + } + default: + break; + } + if (!mName.empty() && mType != PORTAL && mType != EMPTY) + { + Font *const font = gui->getFont(); + if (font) + { + graphics->setColor(userPalette->getColor(UserPalette::BEING)); + font->drawString(graphics, mName, x, y); + } + } + BLOCK_END("MapItem::draw") +} diff --git a/src/resources/map/mapitem.h b/src/resources/map/mapitem.h new file mode 100644 index 000000000..3e92c536e --- /dev/null +++ b/src/resources/map/mapitem.h @@ -0,0 +1,106 @@ +/* + * 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_MAPITEM_H +#define RESOURCES_MAP_MAPITEM_H + +#include <string> + +#include "localconsts.h" + +class Graphics; +class Image; + +class MapItem final +{ + public: + friend class Map; + friend class MapLayer; + + enum ItemType + { + EMPTY = 0, + HOME = 1, + ROAD = 2, + CROSS = 3, + ARROW_UP = 4, + ARROW_DOWN = 5, + ARROW_LEFT = 6, + ARROW_RIGHT = 7, + PORTAL = 8, + MUSIC = 9, + ATTACK = 10, + PRIORITY = 11, + IGNORE_ = 12, + PICKUP = 13, + NOPICKUP = 14, + SEPARATOR = 15 + }; + + MapItem(); + + explicit MapItem(const int type); + + MapItem(const int type, std::string comment); + + MapItem(const int type, std::string comment, const int x, const int y); + + A_DELETE_COPY(MapItem) + + ~MapItem(); + + int getType() const A_WARN_UNUSED + { return mType; } + + void setType(const int type); + + void setPos(const int x, const int y); + + int getX() const A_WARN_UNUSED + { return mX; } + + int getY() const A_WARN_UNUSED + { return mY; } + + const std::string &getComment() const A_WARN_UNUSED + { return mComment; } + + void setComment(const std::string &comment) + { mComment = comment; } + + const std::string &getName() const A_WARN_UNUSED + { return mName; } + + void setName(const std::string &name) + { mName = name; } + + void draw(Graphics *const graphics, const int x, const int y, + const int dx, const int dy) const; + + private: + Image *mImage; + std::string mComment; + std::string mName; + int mType; + int mX; + int mY; +}; + +#endif // RESOURCES_MAP_MAPITEM_H diff --git a/src/resources/map/maplayer.cpp b/src/resources/map/maplayer.cpp index 05013bf71..e5036676d 100644 --- a/src/resources/map/maplayer.cpp +++ b/src/resources/map/maplayer.cpp @@ -36,6 +36,7 @@ #include "resources/image.h" #include "resources/resourcemanager.h" +#include "resources/map/mapitem.h" #include "resources/map/mapobjectlist.h" #include "resources/map/maprowvertexes.h" #include "resources/map/speciallayer.h" @@ -582,143 +583,6 @@ int MapLayer::getTileDrawWidth(const Image *img, return c; } -MapItem::MapItem(): - mImage(nullptr), - mComment(), - mName(), - mType(EMPTY), - mX(-1), - mY(-1) -{ - setType(EMPTY); -} - -MapItem::MapItem(const int type): - mImage(nullptr), - mComment(), - mName(), - mType(type), - mX(-1), - mY(-1) -{ - setType(type); -} - -MapItem::MapItem(const int type, std::string comment): - mImage(nullptr), - mComment(comment), - mName(), - mType(type), - mX(-1), - mY(-1) -{ - setType(type); -} - -MapItem::MapItem(const int type, std::string comment, - const int x, const int y): - mImage(nullptr), - mComment(comment), - mName(), - mType(type), - mX(x), - mY(y) -{ - setType(type); -} - -MapItem::~MapItem() -{ - if (mImage) - { - mImage->decRef(); - mImage = nullptr; - } -} - -void MapItem::setType(const int type) -{ - std::string name; - mType = type; - if (mImage) - mImage->decRef(); - - switch (type) - { - case ARROW_UP: - name = "graphics/sprites/arrow_up.png"; - break; - case ARROW_DOWN: - name = "graphics/sprites/arrow_down.png"; - break; - case ARROW_LEFT: - name = "graphics/sprites/arrow_left.png"; - break; - case ARROW_RIGHT: - name = "graphics/sprites/arrow_right.png"; - break; - default: - break; - } - - if (!name.empty()) - { - ResourceManager *const resman = ResourceManager::getInstance(); - mImage = resman->getImage(name); - } - else - { - mImage = nullptr; - } -} - -void MapItem::setPos(const int x, const int y) -{ - mX = x; - mY = y; -} - -void MapItem::draw(Graphics *const graphics, const int x, const int y, - const int dx, const int dy) const -{ - BLOCK_START("MapItem::draw") - if (mImage) - graphics->drawImage(mImage, x, y); - - switch (mType) - { - case ROAD: - case CROSS: - graphics->setColor(userPalette->getColorWithAlpha( - UserPalette::ROAD_POINT)); - graphics->fillRectangle(Rect(x + dx / 3, y + dy / 3, - dx / 3, dy / 3)); - break; - case HOME: - { - graphics->setColor(userPalette->getColorWithAlpha( - UserPalette::HOME_PLACE)); - graphics->fillRectangle(Rect(x, y, dx, dy)); - graphics->setColor(userPalette->getColorWithAlpha( - UserPalette::HOME_PLACE_BORDER)); - graphics->drawRectangle(Rect(x, y, dx, dy)); - break; - } - default: - break; - } - if (!mName.empty() && mType != PORTAL && mType != EMPTY) - { - Font *const font = gui->getFont(); - if (font) - { - graphics->setColor(userPalette->getColor(UserPalette::BEING)); - font->drawString(graphics, mName, x, y); - } - } - BLOCK_END("MapItem::draw") -} - ObjectsLayer::ObjectsLayer(const unsigned width, const unsigned height) : mTiles(new MapObjectList*[width * height]), mWidth(width), diff --git a/src/resources/map/maplayer.h b/src/resources/map/maplayer.h index 653009b40..59e9db2b5 100644 --- a/src/resources/map/maplayer.h +++ b/src/resources/map/maplayer.h @@ -37,7 +37,6 @@ class Image; class ImageVertexes; -class MapItem; class MapObjectList; class MapRowVertexes; class SpecialLayer; @@ -158,81 +157,6 @@ class MapLayer final: public ConfigListener bool mHighlightAttackRange; }; -class MapItem final -{ - public: - friend class Map; - friend class MapLayer; - - enum ItemType - { - EMPTY = 0, - HOME = 1, - ROAD = 2, - CROSS = 3, - ARROW_UP = 4, - ARROW_DOWN = 5, - ARROW_LEFT = 6, - ARROW_RIGHT = 7, - PORTAL = 8, - MUSIC = 9, - ATTACK = 10, - PRIORITY = 11, - IGNORE_ = 12, - PICKUP = 13, - NOPICKUP = 14, - SEPARATOR = 15 - }; - - MapItem(); - - explicit MapItem(const int type); - - MapItem(const int type, std::string comment); - - MapItem(const int type, std::string comment, const int x, const int y); - - A_DELETE_COPY(MapItem) - - ~MapItem(); - - int getType() const A_WARN_UNUSED - { return mType; } - - void setType(const int type); - - void setPos(const int x, const int y); - - int getX() const A_WARN_UNUSED - { return mX; } - - int getY() const A_WARN_UNUSED - { return mY; } - - const std::string &getComment() const A_WARN_UNUSED - { return mComment; } - - void setComment(const std::string &comment) - { mComment = comment; } - - const std::string &getName() const A_WARN_UNUSED - { return mName; } - - void setName(const std::string &name) - { mName = name; } - - void draw(Graphics *const graphics, const int x, const int y, - const int dx, const int dy) const; - - private: - Image *mImage; - std::string mComment; - std::string mName; - int mType; - int mX; - int mY; -}; - class ObjectsLayer final { public: diff --git a/src/resources/map/speciallayer.cpp b/src/resources/map/speciallayer.cpp index d87a078de..2ebb6ef51 100644 --- a/src/resources/map/speciallayer.cpp +++ b/src/resources/map/speciallayer.cpp @@ -21,6 +21,7 @@ #include "resources/map/speciallayer.h" #include "resources/map/map.h" +#include "resources/map/mapitem.h" #include "resources/map/maplayer.h" #include "utils/delete2.h" |