summaryrefslogtreecommitdiff
path: root/src/map.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-11-09 17:59:14 +0300
committerAndrei Karas <akaras@inbox.ru>2013-11-09 17:59:14 +0300
commitdb1e60556c72b1b87ff2a384c556ccca724c46d6 (patch)
tree22a5f4e9c4f436ef8e746e0a2d688de80c1597a6 /src/map.cpp
parentc2bb49be52a92deccec7428b6859242688fc8987 (diff)
parent1716861f0ee2f7a3714c5b44bb0f017c3d8d3b2c (diff)
downloadplus-db1e60556c72b1b87ff2a384c556ccca724c46d6.tar.gz
plus-db1e60556c72b1b87ff2a384c556ccca724c46d6.tar.bz2
plus-db1e60556c72b1b87ff2a384c556ccca724c46d6.tar.xz
plus-db1e60556c72b1b87ff2a384c556ccca724c46d6.zip
Merge branch 'master' into stable
Diffstat (limited to 'src/map.cpp')
-rw-r--r--src/map.cpp54
1 files changed, 46 insertions, 8 deletions
diff --git a/src/map.cpp b/src/map.cpp
index 564f673da..dac9fc71f 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -45,6 +45,7 @@
#include "utils/dtor.h"
#include "utils/mkdir.h"
#include "utils/physfstools.h"
+#include "utils/timer.h"
#include <climits>
#include <queue>
@@ -172,6 +173,7 @@ Map::Map(const int width, const int height,
mDrawY(-1),
mDrawScrollX(-1),
mDrawScrollY(-1),
+ mMask(1),
mAtlas(nullptr),
mHeights(nullptr),
mRedrawMap(true),
@@ -198,6 +200,7 @@ Map::Map(const int width, const int height,
Map::~Map()
{
config.removeListeners(this);
+ CHECKLISTENERS
// delete metadata, layers, tilesets and overlays
delete [] mMetaTiles;
@@ -280,11 +283,15 @@ void Map::initializeAmbientLayers()
Image *const img = resman->getImage(getProperty(name + "image"));
if (img)
{
+ int mask = atoi(getProperty(name + "mask").c_str());
+ if (!mask)
+ mask = 1;
mForegrounds.push_back(new AmbientLayer(img,
getFloatProperty(name + "parallax"),
getFloatProperty(name + "scrollX"),
getFloatProperty(name + "scrollY"),
- getBoolProperty(name + "keepratio")));
+ getBoolProperty(name + "keepratio"),
+ mask));
// The AmbientLayer takes control over the image.
img->decRef();
@@ -300,11 +307,15 @@ void Map::initializeAmbientLayers()
if (img)
{
+ int mask = atoi(getProperty(name + "mask").c_str());
+ if (!mask)
+ mask = 1;
mBackgrounds.push_back(new AmbientLayer(img,
getFloatProperty(name + "parallax"),
getFloatProperty(name + "scrollX"),
getFloatProperty(name + "scrollY"),
- getBoolProperty(name + "keepratio")));
+ getBoolProperty(name + "keepratio"),
+ mask));
// The AmbientLayer takes control over the image.
img->decRef();
@@ -430,6 +441,9 @@ void Map::draw(Graphics *const graphics, int scrollX, int scrollY)
layeri != layeri_end && !overFringe; ++ layeri)
{
MapLayer *const layer = *layeri;
+ if (!(layer->mMask & mMask))
+ continue;
+
if (layer->isFringeLayer())
{
layer->setSpecialLayer(mSpecialLayer);
@@ -597,11 +611,21 @@ void Map::updateAmbientLayers(const float scrollX, const float scrollY)
const float dy = scrollY - mLastAScrollY;
const int timePassed = get_elapsed_time(lastTick);
- FOR_EACH (AmbientLayerVectorCIter, i, mBackgrounds)
- (*i)->update(timePassed, dx, dy);
+ // need check mask to update or not to update
- FOR_EACH (AmbientLayerVectorCIter, i, mForegrounds)
- (*i)->update(timePassed, dx, dy);
+ FOR_EACH (AmbientLayerVectorIter, i, mBackgrounds)
+ {
+ AmbientLayer *const layer = *i;
+ if (layer && (layer->mMask & mMask))
+ layer->update(timePassed, dx, dy);
+ }
+
+ FOR_EACH (AmbientLayerVectorIter, i, mForegrounds)
+ {
+ AmbientLayer *const layer = *i;
+ if (layer && (layer->mMask & mMask))
+ layer->update(timePassed, dx, dy);
+ }
mLastAScrollX = scrollX;
mLastAScrollY = scrollY;
@@ -637,8 +661,10 @@ void Map::drawAmbientLayers(Graphics *const graphics, const LayerType type,
// Draw overlays
FOR_EACHP (AmbientLayerVectorCIter, i, layers)
{
- if (*i)
- (*i)->draw(graphics, graphics->mWidth, graphics->mHeight);
+ const AmbientLayer *const layer = *i;
+ // need check mask to draw or not to draw
+ if (layer && (layer->mMask & mMask))
+ (layer)->draw(graphics, graphics->mWidth, graphics->mHeight);
// Detail 1: only one overlay, higher: all overlays
if (detail == 1)
@@ -1600,3 +1626,15 @@ uint8_t Map::getHeightOffset(const int x, const int y) const
return 0;
return mHeights->getHeight(x, y);
}
+
+void Map::setMask(const int mask)
+{
+ if (mask != mMask)
+ mRedrawMap = true;
+ mMask = mask;
+}
+
+void Map::setMusicFile(const std::string &file)
+{
+ setProperty("music", file);
+}