summaryrefslogtreecommitdiff
path: root/src/resources/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources/map')
-rw-r--r--src/resources/map/map.cpp1
-rw-r--r--src/resources/map/mapitem.cpp169
-rw-r--r--src/resources/map/mapitem.h106
-rw-r--r--src/resources/map/maplayer.cpp138
-rw-r--r--src/resources/map/maplayer.h76
-rw-r--r--src/resources/map/speciallayer.cpp1
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"