diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-01-19 23:15:45 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-01-20 19:46:11 +0100 |
commit | 64cec0656a7df985304b45b83c380911af44c726 (patch) | |
tree | 50227c17d6846f9214f1d30c250dc8df9fe4bee5 | |
parent | db8df518c05d38c3d7452fe8f18fdc7c48c3eb4e (diff) | |
download | mana-64cec0656a7df985304b45b83c380911af44c726.tar.gz mana-64cec0656a7df985304b45b83c380911af44c726.tar.bz2 mana-64cec0656a7df985304b45b83c380911af44c726.tar.xz mana-64cec0656a7df985304b45b83c380911af44c726.zip |
Fixed a bug with hurt sounds volume and simplified code
The hurt sound volume was being played based on the distance in tiles,
even though Sound::playSfx was expecting pixels. This would cause
hurt sounds of other players to play too loud.
There were also several conversions between pixel and tile coordinates
that could be simplified.
Reviewed-by: Yohann Ferreira
-rw-r--r-- | src/being.cpp | 2 | ||||
-rw-r--r-- | src/localplayer.cpp | 9 | ||||
-rw-r--r-- | src/sound.cpp | 30 |
3 files changed, 17 insertions, 24 deletions
diff --git a/src/being.cpp b/src/being.cpp index 9483e897..2f904d08 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -376,7 +376,7 @@ void Being::takeDamage(Being *attacker, int amount, if (attacker) { sound.playSfx(mInfo->getSound(SOUND_EVENT_HURT), - attacker->getTileX(), attacker->getTileY()); + attacker->getPixelX(), attacker->getPixelY()); } else { diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 28f26755..a0350ce8 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -599,10 +599,8 @@ void LocalPlayer::pickUp(FloorItem *item) if (!item) return; - int tileWidth = mMap->getTileWidth(); - int tileHeight = mMap->getTileHeight(); - int dx = item->getTileX() - (int) getPosition().x / tileWidth; - int dy = item->getTileY() - ((int) getPosition().y - 1) / tileHeight; + int dx = item->getTileX() - getTileX(); + int dy = item->getTileY() - getTileY(); if (dx * dx + dy * dy < 4) { @@ -612,8 +610,7 @@ void LocalPlayer::pickUp(FloorItem *item) else { pathSetByMouse(); - setDestination(item->getTileX() * tileWidth + tileWidth / 2, - item->getTileY() * tileHeight + tileHeight / 2); + setDestination(item->getPixelX(), item->getPixelY()); mPickUpTarget = item; } } 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); } } |