summaryrefslogtreecommitdiff
path: root/src/sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sound.cpp')
-rw-r--r--src/sound.cpp30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/sound.cpp b/src/sound.cpp
index 6248d247..468f48c0 100644
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -284,29 +284,25 @@ void Sound::playSfx(const std::string &path, int x, int y)
tmpPath = path;
else
tmpPath = paths.getValue("sfx", "sfx/") + path;
+
ResourceManager *resman = ResourceManager::getInstance();
- SoundEffect *sample = resman->getSoundEffect(tmpPath);
- if (sample)
+
+ if (SoundEffect *sample = resman->getSoundEffect(tmpPath))
{
logger->log("Sound::playSfx() Playing: %s", path.c_str());
int vol = 120;
- if (local_player && x > 0 && y > 0)
+
+ if (local_player && (x > 0 || y > 0))
{
- Vector pos = local_player->getPosition();
- Map *map = Game::instance()->getCurrentMap();
- int dx = ((int)pos.x - x) / map->getTileWidth();
- int dy = ((int)pos.y - y) / map->getTileHeight();
- if (dx < 0)
- dx = -dx;
- if (dy < 0)
- dy = -dy;
- int dist = dx > dy ? dx : dy;
-
- // Check for negative values
- if (dist * 8 > vol)
- return;
- vol -= dist * 8;
+ const Vector &pos = local_player->getPosition();
+ const int dx = std::abs((int) pos.x - x);
+ const int dy = std::abs((int) pos.y - y);
+ const int dist = std::max(dx, dy);
+
+ // Volume goes down one level with each 4 pixels
+ vol -= std::min(120, dist / 4);
}
+
sample->play(0, vol);
}
}