From 4edbdf124303f0e7c229f43a5054755e112ff6b4 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 14 Nov 2015 18:02:03 +0300 Subject: Fix attack sprite actions. Add ride attack action. --- src/being/being.cpp | 7 +++++-- src/being/being.h | 8 ++++++-- src/resources/attack.h | 15 +++++++++++---- src/resources/beingcommon.cpp | 15 ++++++++++++--- src/resources/beinginfo.cpp | 19 +++++++++++++++---- src/resources/beinginfo.h | 1 + 6 files changed, 50 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/being/being.cpp b/src/being/being.cpp index dd06c918d..5a4da79fc 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -1309,7 +1309,7 @@ std::string Being::getMoveAction() const std::string Being::getWeaponAttackAction(const ItemInfo *const weapon) const { if (!weapon) - return SpriteAction::ATTACK; + return getAttackAction(); if (mHorseId != 0) return weapon->getRideAttackAction(); @@ -1327,8 +1327,10 @@ std::string Being::getWeaponAttackAction(const ItemInfo *const weapon) const std::string Being::getAttackAction(const Attack *const attack1) const { if (!attack1) - return SpriteAction::ATTACK; + return getAttackAction(); + if (mHorseId != 0) + return attack1->mRideAction; if (mMap) { const unsigned char mask = mMap->getBlockMask(mX, mY); @@ -1356,6 +1358,7 @@ std::string Being::getAttackAction(const Attack *const attack1) const return SpriteAction::action; \ } +getSpriteAction(Attack, ATTACK) getSpriteAction(Dead, DEAD) getSpriteAction(Spawn, SPAWN) getSpriteAction(Cast, CAST) diff --git a/src/being/being.h b/src/being/being.h index 9c9fd6ade..a31f39be5 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -607,9 +607,13 @@ class Being notfinal : public ActorSprite, std::string getSpawnAction() const A_WARN_UNUSED; - std::string getWeaponAttackAction(const ItemInfo *const weapon) const; + std::string getWeaponAttackAction(const ItemInfo *const weapon) const + A_WARN_UNUSED; - std::string getAttackAction(const Attack *const attack) const; + std::string getAttackAction() const A_WARN_UNUSED; + + std::string getAttackAction(const Attack *const attack) const + A_WARN_UNUSED; /** * Whether or not this player is a GM. diff --git a/src/resources/attack.h b/src/resources/attack.h index d904b40b5..578818db6 100644 --- a/src/resources/attack.h +++ b/src/resources/attack.h @@ -32,19 +32,26 @@ struct Attack final std::string mAction; std::string mSkyAction; std::string mWaterAction; + std::string mRideAction; int mEffectId; int mHitEffectId; int mCriticalHitEffectId; int mMissEffectId; std::string mMissileParticle; - Attack(const std::string &action, const std::string &skyAction, - const std::string &waterAction, const int effectId, - const int hitEffectId, const int criticalHitEffectId, - const int missEffectId, const std::string &missileParticle) : + Attack(const std::string &action, + const std::string &skyAction, + const std::string &waterAction, + const std::string &rideAction, + const int effectId, + const int hitEffectId, + const int criticalHitEffectId, + const int missEffectId, + const std::string &missileParticle) : mAction(action), mSkyAction(skyAction), mWaterAction(waterAction), + mRideAction(rideAction), mEffectId(effectId), mHitEffectId(hitEffectId), mCriticalHitEffectId(criticalHitEffectId), diff --git a/src/resources/beingcommon.cpp b/src/resources/beingcommon.cpp index 6c64a162d..3025e658c 100644 --- a/src/resources/beingcommon.cpp +++ b/src/resources/beingcommon.cpp @@ -188,13 +188,22 @@ bool BeingCommon::readObjectNodes(XmlNodePtrConst &spriteNode, "skyaction", "skyattack"); const std::string waterSpriteAction = XML::getProperty(spriteNode, "wateraction", "waterattack"); + const std::string rideSpriteAction = XML::getProperty(spriteNode, + "rideaction", "rideattack"); const std::string missileParticle = XML::getProperty(spriteNode, "missile-particle", ""); - currentInfo->addAttack(attackId, spriteAction, skySpriteAction, - waterSpriteAction, effectId, hitEffectId, - criticalHitEffectId, missEffectId, missileParticle); + currentInfo->addAttack(attackId, + spriteAction, + skySpriteAction, + waterSpriteAction, + rideSpriteAction, + effectId, + hitEffectId, + criticalHitEffectId, + missEffectId, + missileParticle); return true; } else if (xmlNameEqual(spriteNode, "particlefx")) diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp index 79969e71e..b857335ba 100644 --- a/src/resources/beinginfo.cpp +++ b/src/resources/beinginfo.cpp @@ -41,8 +41,11 @@ BeingInfo *BeingInfo::unknown = nullptr; Attack *BeingInfo::empty = new Attack(SpriteAction::ATTACK, - SpriteAction::ATTACKSKY, SpriteAction::ATTACKWATER, - -1, -1, -1, -1, std::string()); + SpriteAction::ATTACKSKY, + SpriteAction::ATTACKWATER, + SpriteAction::ATTACKRIDE, + -1, -1, -1, -1, + std::string()); BeingInfo::BeingInfo() : mDisplay(), @@ -169,6 +172,7 @@ void BeingInfo::addAttack(const int id, const std::string &action, const std::string &skyAction, const std::string &waterAction, + const std::string &rideAction, const int effectId, const int hitEffectId, const int criticalHitEffectId, @@ -176,8 +180,15 @@ void BeingInfo::addAttack(const int id, const std::string &missileParticle) { delete mAttacks[id]; - mAttacks[id] = new Attack(action, skyAction, waterAction, effectId, - hitEffectId, criticalHitEffectId, missEffectId, missileParticle); + mAttacks[id] = new Attack(action, + skyAction, + waterAction, + rideAction, + effectId, + hitEffectId, + criticalHitEffectId, + missEffectId, + missileParticle); } void BeingInfo::clear() diff --git a/src/resources/beinginfo.h b/src/resources/beinginfo.h index a4ee2a750..6a84723a3 100644 --- a/src/resources/beinginfo.h +++ b/src/resources/beinginfo.h @@ -102,6 +102,7 @@ class BeingInfo final const std::string &action, const std::string &skyAttack, const std::string &waterAttack, + const std::string &rideAttack, const int effectId, const int hitEffectId, const int criticalHitEffectId, -- cgit v1.2.3-60-g2f50