diff options
author | Björn Steinbrink <B.Steinbrink@gmx.de> | 2006-10-03 14:46:41 +0000 |
---|---|---|
committer | Björn Steinbrink <B.Steinbrink@gmx.de> | 2006-10-03 14:46:41 +0000 |
commit | 6a02a10434f16c016a162e08d2d8ea089981e172 (patch) | |
tree | 128f8567a1db59a42ce8a3787b4d54fd8681bd95 /src/map.cpp | |
parent | 1c6ad7a34b4a5d3bdc3e57b7b20d46c5db9830a2 (diff) | |
download | mana-6a02a10434f16c016a162e08d2d8ea089981e172.tar.gz mana-6a02a10434f16c016a162e08d2d8ea089981e172.tar.bz2 mana-6a02a10434f16c016a162e08d2d8ea089981e172.tar.xz mana-6a02a10434f16c016a162e08d2d8ea089981e172.zip |
Turned AmbientOverlay into a class. Cleaned up the associated code.
Diffstat (limited to 'src/map.cpp')
-rw-r--r-- | src/map.cpp | 94 |
1 files changed, 21 insertions, 73 deletions
diff --git a/src/map.cpp b/src/map.cpp index 6277b424..23dd4350 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -27,10 +27,12 @@ #include <queue> #include "beingmanager.h" +#include "game.h" #include "graphics.h" #include "sprite.h" #include "tileset.h" +#include "resources/ambientoverlay.h" #include "resources/image.h" #include "utils/dtor.h" @@ -79,11 +81,7 @@ Map::~Map() for_each(mTilesets.begin(), mTilesets.end(), make_dtor(mTilesets)); mTilesets.clear(); // clean up overlays - std::list<AmbientOverlay>::iterator i; - for (i = mOverlays.begin(); i != mOverlays.end(); i++) - { - (*i).image->decRef(); - } + for_each(mOverlays.begin(), mOverlays.end(), make_dtor(mOverlays)); } void @@ -182,14 +180,6 @@ Map::drawOverlay(Graphics *graphics, float scrollX, float scrollY, int detail) // detail 0: no overlays if (detail <= 0) return; - std::list<AmbientOverlay>::iterator i; - - // Avoid freaking out when tick_time overflows - if (tick_time < lastTick) - { - lastTick = tick_time; - } - if (mLastScrollX == 0.0f && mLastScrollY == 0.0f) { // first call - initialisation @@ -198,80 +188,38 @@ Map::drawOverlay(Graphics *graphics, float scrollX, float scrollY, int detail) } //update Overlays - while (lastTick < tick_time) - { - for (i = mOverlays.begin(); i != mOverlays.end(); i++) - { - if ((*i).image != NULL) - { - //apply self scrolling - (*i).scrollX -= (*i).scrollSpeedX; - (*i).scrollY -= (*i).scrollSpeedY; - - //apply parallaxing - (*i).scrollX += (scrollX - mLastScrollX) * (*i).parallax; - (*i).scrollY += (scrollY - mLastScrollY) * (*i).parallax; - - //keep the image pattern on the screen - while ((*i).scrollX > (*i).image->getWidth()) - { - (*i).scrollX -= (*i).image->getWidth(); - } - while ((*i).scrollY > (*i).image->getHeight()) - { - (*i).scrollY -= (*i).image->getHeight(); - } - while ((*i).scrollX < 0) - { - (*i).scrollX += (*i).image->getWidth(); - } - while ((*i).scrollY < 0) - { - (*i).scrollY += (*i).image->getHeight(); - } - } - } - mLastScrollX = scrollX; - mLastScrollY = scrollY; - lastTick++; + int timePassed = get_elapsed_time(lastTick); + float dx = scrollX - mLastScrollX; + float dy = scrollY - mLastScrollY; - // detail 1: only one overlay, higher: all overlays - if (detail == 1) break; + std::list<AmbientOverlay*>::iterator i; + for (i = mOverlays.begin(); i != mOverlays.end(); i++) + { + (*i)->update(timePassed, dx, dy); } + mLastScrollX = scrollX; + mLastScrollY = scrollY; + lastTick = tick_time; //draw overlays for (i = mOverlays.begin(); i != mOverlays.end(); i++) { - if ((*i).image != NULL) - { - graphics->drawImagePattern ( (*i).image, - 0 - (int)(*i).scrollX, - 0 - (int)(*i).scrollY, - graphics->getWidth() + (int)(*i).scrollX, - graphics->getHeight() + (int)(*i).scrollY - ); - }; + (*i)->draw(graphics, graphics->getWidth(), graphics->getHeight()); + // detail 1: only one overlay, higher: all overlays - if (detail == 1) break; + if (detail == 1) + break; }; } void Map::setOverlay(Image *image, float speedX, float speedY, float parallax) { - if (image != NULL) - { - AmbientOverlay newOverlay; + if (!image) + return; - newOverlay.image = image; - newOverlay.parallax = parallax; - newOverlay.scrollSpeedX = speedX; - newOverlay.scrollSpeedY = speedY; - newOverlay.scrollX = 0; - newOverlay.scrollY = 0; - - mOverlays.push_back(newOverlay); - } + mOverlays.push_back( + new AmbientOverlay(image, parallax, 0, 0, speedX, speedX)); } void |