diff options
Diffstat (limited to 'src/being/being.cpp')
-rw-r--r-- | src/being/being.cpp | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp index b7770c037..a44870e13 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -42,6 +42,7 @@ #include "being/playerrelations.h" #ifdef EATHENA_SUPPORT #include "being/homunculusinfo.h" +#include "being/mercenaryinfo.h" #endif // EATHENA_SUPPORT #include "const/utils/timer.h" @@ -3603,6 +3604,18 @@ void Being::drawHomunculus(Graphics *restrict const graphics, drawBeingCursor(graphics, px, py); drawHomunculusSpriteAt(graphics, px, py); } + +void Being::drawMercenary(Graphics *restrict const graphics, + const int offsetX, + const int offsetY) const restrict2 +{ + // getActorX() + offsetX; + const int px = mPixelX - mapTileSize / 2 + offsetX; + // getActorY() + offsetY; + const int py = mPixelY - mapTileSize + offsetY; + drawBeingCursor(graphics, px, py); + drawMercenarySpriteAt(graphics, px, py); +} #endif // EATHENA_SUPPORT void Being::drawPortal(Graphics *restrict const graphics, @@ -3638,8 +3651,12 @@ void Being::draw(Graphics *restrict const graphics, offsetX, offsetY); break; - case ActorType::Pet: case ActorType::Mercenary: + drawMercenary(graphics, + offsetX, + offsetY); + break; + case ActorType::Pet: case ActorType::SkillUnit: case ActorType::Unknown: #endif @@ -3874,6 +3891,61 @@ void Being::drawHomunculusSpriteAt(Graphics *restrict const graphics, } } } + +void Being::drawMercenarySpriteAt(Graphics *restrict const graphics, + const int x, + const int y) const restrict2 +{ + if (mHighlightMonsterAttackRange && + mAction != BeingAction::DEAD) + { + if (!userPalette) + { + CompoundSprite::drawSimple(graphics, x, y); + return; + } + + int attackRange; + if (mAttackRange) + attackRange = mapTileSize * mAttackRange; + else + attackRange = mapTileSize; + + graphics->setColor(userPalette->getColorWithAlpha( + UserColorId::MONSTER_ATTACK_RANGE)); + + graphics->fillRectangle(Rect( + x - attackRange, y - attackRange, + 2 * attackRange + mapTileSize, 2 * attackRange + mapTileSize)); + } + + CompoundSprite::drawSimple(graphics, x, y); + + if (mShowMobHP && + mInfo) + { + const MercenaryInfo *const info = PlayerInfo::getMercenary(); + if (info && + mId == info->id) + { + // show hp bar here + int maxHP = PlayerInfo::getStatBase(Attributes::MERC_MAX_HP); + if (!maxHP) + maxHP = mInfo->getMaxHP(); + + drawHpBar(graphics, + maxHP, + PlayerInfo::getStatBase(Attributes::MERC_HP), + mDamageTaken, + UserColorId::MONSTER_HP, + UserColorId::MONSTER_HP2, + x - 50 + mapTileSize / 2 + mInfo->getHpBarOffsetX(), + y + mapTileSize - 6 + mInfo->getHpBarOffsetY(), + 2 * 50, + 4); + } + } +} #endif void Being::drawPortalSpriteAt(Graphics *restrict const graphics, |