summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Makefile.am4
-rw-r--r--src/resources/map/map.cpp36
-rw-r--r--src/resources/map/map.h30
-rw-r--r--src/resources/map/tileanimation.cpp68
-rw-r--r--src/resources/map/tileanimation.h65
-rw-r--r--src/resources/mapreader.cpp2
7 files changed, 143 insertions, 66 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 869ac3a98..450823764 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -755,7 +755,9 @@ SET(SRCS
listeners/playerrelationslistener.h
position.cpp
position.h
- properties.h
+ resources/map/properties.h
+ resources/map/tileanimation.cpp
+ resources/map/tileanimation.h
particle/rotationalparticle.cpp
particle/rotationalparticle.h
render/safeopenglgraphics.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index f0c6b30c5..851fef598 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -842,7 +842,9 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
listeners/playerrelationslistener.h \
position.cpp \
position.h \
- properties.h \
+ resources/map/properties.h \
+ resources/map/tileanimation.cpp \
+ resources/map/tileanimation.h \
particle/rotationalparticle.cpp \
particle/rotationalparticle.h \
render/safeopenglgraphics.cpp\
diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp
index 1a95fced8..ee401c2fb 100644
--- a/src/resources/map/map.cpp
+++ b/src/resources/map/map.cpp
@@ -44,6 +44,7 @@
#include "resources/subimage.h"
#include "resources/map/location.h"
+#include "resources/map/tileanimation.h"
#include "utils/delete2.h"
#include "utils/dtor.h"
@@ -69,41 +70,6 @@ class ActorFunctuator final
}
} actorCompare;
-TileAnimation::TileAnimation(Animation *const ani):
- mAffected(),
- mAnimation(new SimpleAnimation(ani)),
- mLastImage(nullptr)
-{
-}
-
-TileAnimation::~TileAnimation()
-{
- delete2(mAnimation);
-}
-
-bool TileAnimation::update(const int ticks)
-{
- if (!mAnimation)
- return false;
-
- // update animation
- if (!mAnimation->update(ticks))
- return false;
-
- // exchange images
- Image *const img = mAnimation->getCurrentImage();
- if (img != mLastImage)
- {
- FOR_EACH (TilePairVectorCIter, i, mAffected)
- {
- if (i->first)
- i->first->setTile(i->second, img);
- }
- mLastImage = img;
- }
- return true;
-}
-
Map::Map(const int width, const int height,
const int tileWidth, const int tileHeight) :
Properties(),
diff --git a/src/resources/map/map.h b/src/resources/map/map.h
index 1c1c41b5c..8c7939149 100644
--- a/src/resources/map/map.h
+++ b/src/resources/map/map.h
@@ -49,15 +49,13 @@ class Resource;
class SimpleAnimation;
class SpecialLayer;
class Tileset;
+class TileAnimation;
class WalkLayer;
typedef std::vector<Tileset*> Tilesets;
typedef std::vector<MapLayer*> Layers;
typedef Layers::const_iterator LayersCIter;
-typedef std::vector<std::pair<MapLayer*, int> > TilePairVector;
-typedef TilePairVector::const_iterator TilePairVectorCIter;
-
typedef std::vector<AmbientLayer*> AmbientLayerVector;
typedef AmbientLayerVector::const_iterator AmbientLayerVectorCIter;
typedef AmbientLayerVector::iterator AmbientLayerVectorIter;
@@ -65,32 +63,6 @@ typedef AmbientLayerVector::iterator AmbientLayerVectorIter;
static const int mapTileSize = 32;
/**
- * Animation cycle of a tile image which changes the map accordingly.
- */
-class TileAnimation final
-{
- public:
- explicit TileAnimation(Animation *const ani);
-
- ~TileAnimation();
-
- A_DELETE_COPY(TileAnimation)
-
- bool update(const int ticks = 1);
-
- void addAffectedTile(MapLayer *const layer, const int index)
- { mAffected.push_back(std::make_pair(layer, index)); }
-
- private:
- TilePairVector mAffected;
- SimpleAnimation *mAnimation;
- Image *mLastImage;
-};
-
-typedef std::map<int, TileAnimation*> TileAnimationMap;
-typedef TileAnimationMap::const_iterator TileAnimationMapCIter;
-
-/**
* A tile map.
*/
class Map final : public Properties, public ConfigListener
diff --git a/src/resources/map/tileanimation.cpp b/src/resources/map/tileanimation.cpp
new file mode 100644
index 000000000..08a2c047c
--- /dev/null
+++ b/src/resources/map/tileanimation.cpp
@@ -0,0 +1,68 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * 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/tileanimation.h"
+
+#include "simpleanimation.h"
+
+#include "resources/image.h"
+
+#include "resources/map/maplayer.h"
+
+#include "utils/delete2.h"
+
+#include "debug.h"
+
+TileAnimation::TileAnimation(Animation *const ani):
+ mAffected(),
+ mAnimation(new SimpleAnimation(ani)),
+ mLastImage(nullptr)
+{
+}
+
+TileAnimation::~TileAnimation()
+{
+ delete2(mAnimation);
+}
+
+bool TileAnimation::update(const int ticks)
+{
+ if (!mAnimation)
+ return false;
+
+ // update animation
+ if (!mAnimation->update(ticks))
+ return false;
+
+ // exchange images
+ Image *const img = mAnimation->getCurrentImage();
+ if (img != mLastImage)
+ {
+ FOR_EACH (TilePairVectorCIter, i, mAffected)
+ {
+ if (i->first)
+ i->first->setTile(i->second, img);
+ }
+ mLastImage = img;
+ }
+ return true;
+}
diff --git a/src/resources/map/tileanimation.h b/src/resources/map/tileanimation.h
new file mode 100644
index 000000000..9ada8b0bd
--- /dev/null
+++ b/src/resources/map/tileanimation.h
@@ -0,0 +1,65 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * 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_TILEANIMATION_H
+#define RESOURCES_MAP_TILEANIMATION_H
+
+#include <map>
+#include <vector>
+
+#include "localconsts.h"
+
+class Animation;
+class Image;
+class MapLayer;
+class SimpleAnimation;
+
+typedef std::vector<std::pair<MapLayer*, int> > TilePairVector;
+typedef TilePairVector::const_iterator TilePairVectorCIter;
+
+/**
+ * Animation cycle of a tile image which changes the map accordingly.
+ */
+class TileAnimation final
+{
+ public:
+ explicit TileAnimation(Animation *const ani);
+
+ ~TileAnimation();
+
+ A_DELETE_COPY(TileAnimation)
+
+ bool update(const int ticks = 1);
+
+ void addAffectedTile(MapLayer *const layer, const int index)
+ { mAffected.push_back(std::make_pair(layer, index)); }
+
+ private:
+ TilePairVector mAffected;
+ SimpleAnimation *mAnimation;
+ Image *mLastImage;
+};
+
+typedef std::map<int, TileAnimation*> TileAnimationMap;
+typedef TileAnimationMap::const_iterator TileAnimationMapCIter;
+
+#endif // RESOURCES_MAP_TILEANIMATION_H
diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp
index cf443ab16..89740db65 100644
--- a/src/resources/mapreader.cpp
+++ b/src/resources/mapreader.cpp
@@ -37,6 +37,8 @@
#include "resources/db/mapdb.h"
+#include "resources/map/tileanimation.h"
+
#include "utils/base64.h"
#include "utils/delete2.h"