diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-11-15 17:04:31 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-11-15 17:04:31 +0300 |
commit | 0977134ffdad9ea0e79106fc633ebafd18209765 (patch) | |
tree | c0c21f68e7e40002ff9de01302d19ffb5e6783e7 /src/being/being.cpp | |
parent | 679454f53aa95317f8a1d7a1698c743d98a02fad (diff) | |
download | manaplus-0977134ffdad9ea0e79106fc633ebafd18209765.tar.gz manaplus-0977134ffdad9ea0e79106fc633ebafd18209765.tar.bz2 manaplus-0977134ffdad9ea0e79106fc633ebafd18209765.tar.xz manaplus-0977134ffdad9ea0e79106fc633ebafd18209765.zip |
Add support for different per skill casting animations.
Diffstat (limited to 'src/being/being.cpp')
-rw-r--r-- | src/being/being.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index 5a4da79fc..31b0ddcc9 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -1342,6 +1342,24 @@ std::string Being::getAttackAction(const Attack *const attack1) const return attack1->mAction; } +std::string Being::getCastAction(const SkillInfo *const skill) const +{ + if (!skill) + return getCastAction(); + + if (mHorseId != 0) + return skill->castingRideAction; + if (mMap) + { + const unsigned char mask = mMap->getBlockMask(mX, mY); + if (mask & BlockMask::AIR) + return skill->castingSkyAction; + else if (mask & BlockMask::WATER) + return skill->castingWaterAction; + } + return skill->castingAction; +} + #define getSpriteAction(func, action) \ std::string Being::get##func##Action() const \ { \ @@ -1359,9 +1377,9 @@ std::string Being::getAttackAction(const Attack *const attack1) const } getSpriteAction(Attack, ATTACK) +getSpriteAction(Cast, CAST) getSpriteAction(Dead, DEAD) getSpriteAction(Spawn, SPAWN) -getSpriteAction(Cast, CAST) std::string Being::getStandAction() const { @@ -1447,7 +1465,11 @@ void Being::setAction(const BeingActionT &action, const int attackId) } break; case BeingAction::CAST: - currentAction = getCastAction(); + if (skillDialog) + { + const SkillInfo *const info = skillDialog->getSkill(attackId); + currentAction = getCastAction(info); + } break; case BeingAction::HURT: if (mInfo) |