diff options
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/resources/map/map.cpp | 36 | ||||
-rw-r--r-- | src/resources/map/map.h | 30 | ||||
-rw-r--r-- | src/resources/map/tileanimation.cpp | 68 | ||||
-rw-r--r-- | src/resources/map/tileanimation.h | 65 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 2 |
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" |