From e6d7fca349c28eaf98d643325dc99dd9d3a53568 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 5 Oct 2012 21:33:44 +0300 Subject: first part for adding mobs particle effects. Based on mana commit b35aef2d924f03d85eb44a2465be5a745444eafd by Yohann Ferreira --- src/being.cpp | 71 ++++++++++++++++++++++++++++------------------------------- 1 file changed, 34 insertions(+), 37 deletions(-) (limited to 'src/being.cpp') diff --git a/src/being.cpp b/src/being.cpp index 1f637ef06..0df07870f 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -198,7 +198,6 @@ Being::Being(const int id, const Type type, const uint16_t subtype, mEmotion(0), mEmotionTime(0), mSpeechTime(0), - mAttackType(1), mAttackSpeed(350), mAction(STAND), mSubType(0xFFFF), @@ -645,9 +644,8 @@ void Being::takeDamage(Being *const attacker, const int amount, int hitEffectId = 0; if (type != SKILL) { - const ItemInfo *const attackerWeapon - = attacker->getEquippedWeapon(); - if (attacker->mType == PLAYER && attackerWeapon) + const ItemInfo *attackerWeapon = attacker->getEquippedWeapon(); + if (attackerWeapon && attacker->getType() == PLAYER) { if (type != CRITICAL) hitEffectId = attackerWeapon->getHitEffectId(); @@ -673,18 +671,18 @@ void Being::takeDamage(Being *const attacker, const int amount, } void Being::handleAttack(Being *const victim, const int damage, - const AttackType type A_UNUSED) + const int attackId) { if (!victim || !mInfo) return; if (this != player_node) - setAction(Being::ATTACK, 1); + setAction(Being::ATTACK, attackId); if (mType == PLAYER && mEquippedWeapon) fireMissile(victim, mEquippedWeapon->getMissileParticleFile()); - else if (mInfo->getAttack(mAttackType)) - fireMissile(victim, mInfo->getAttack(mAttackType)->missileParticle); + else if (mInfo->getAttack(attackId)) + fireMissile(victim, mInfo->getAttack(attackId)->mMissileParticle); #ifdef MANASERV_SUPPORT if (Net::getNetworkType() != ServerInfo::MANASERV) @@ -978,7 +976,7 @@ std::string Being::getSitAction() const } } -void Being::setAction(const Action &action, const int attackType A_UNUSED) +void Being::setAction(const Action &action, const int attackId) { std::string currentAction = SpriteAction::INVALID; @@ -1005,6 +1003,7 @@ void Being::setAction(const Action &action, const int attackType A_UNUSED) } break; case ATTACK: +// mAttackId = attackId; if (mEquippedWeapon) { currentAction = mEquippedWeapon->getAttackAction(); @@ -1012,43 +1011,39 @@ void Being::setAction(const Action &action, const int attackType A_UNUSED) } else { - mAttackType = attackType; - if (!mInfo || !mInfo->getAttack(attackType)) + if (!mInfo || !mInfo->getAttack(attackId)) break; - currentAction = mInfo->getAttack(attackType)->action; + currentAction = mInfo->getAttack(attackId)->mAction; reset(); -#ifdef MANASERV_SUPPORT - if (Net::getNetworkType() == ServerInfo::MANASERV - && mInfo->getAttack(attackType)) + //attack particle effect + if (Particle::enabled) { - //attack particle effect - std::string particleEffect = mInfo->getAttack(attackType) - ->particleEffect; - if (!particleEffect.empty() && Particle::enabled) + int effectId = mInfo->getAttack(attackId)->mEffectId; + + int rotation = 0; + switch (mSpriteDirection) { - int rotation = 0; - switch (mSpriteDirection) - { - case DIRECTION_DOWN: rotation = 0; break; - case DIRECTION_LEFT: rotation = 90; break; - case DIRECTION_UP: rotation = 180; break; - case DIRECTION_RIGHT: rotation = 270; break; - default: break; - } - if (particleEngine) - { - Particle *p = particleEngine->addEffect( - particleEffect, 0, 0, rotation); - if (p) - controlParticle(p); - } + case DIRECTION_DOWN: + rotation = 0; + break; + case DIRECTION_LEFT: + rotation = 90; + break; + case DIRECTION_UP: + rotation = 180; + break; + case DIRECTION_RIGHT: + rotation = 270; + break; + default: + break; } + if (effectManager) + effectManager->trigger(effectId, this, rotation); } -#endif } - break; case HURT: if (mInfo) @@ -1327,6 +1322,7 @@ void Being::logic() / mAttackSpeed; } +/* //attack particle effect if (mEquippedWeapon) { @@ -1363,6 +1359,7 @@ void Being::logic() particleEffect, 0, 0, rotation); controlParticle(p); } +*/ if (this == player_node && curFrame >= frameCount) nextTile(); -- cgit v1.2.3-60-g2f50