diff options
Diffstat (limited to 'src/being.cpp')
-rw-r--r-- | src/being.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/being.cpp b/src/being.cpp index 1c66f673..42fb2d4e 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -327,21 +327,9 @@ void Being::handleAttack(Being *victim, int damage, AttackType type) setAction(Being::ATTACK, 1); if (getType() == PLAYER && victim) { - if (mEquippedWeapon && mEquippedWeapon->getAttackType() == ACTION_ATTACK_BOW) + if (mEquippedWeapon) { - Particle *p = new Particle(NULL); - p->setLifetime(1000); - p->moveBy(Vector(0.0f, 0.0f, 32.0f)); - victim->controlParticle(p); - - Particle *p2 = particleEngine->addEffect("graphics/particles/arrow.particle.xml", - getPixelX(), getPixelY()); - if (p2) - { - p2->setLifetime(900); - p2->setDestination(p, 7, 0); - p2->setDieDistance(8); - } + fireMissile(victim, mEquippedWeapon->getMissileParticle()); } } if (Net::getNetworkType() == ServerInfo::EATHENA) @@ -398,6 +386,26 @@ void Being::controlParticle(Particle *particle) mChildParticleEffects.addLocally(particle); } +void Being::fireMissile(Being *victim, const std::string &particle) +{ + if (!victim || particle.empty()) + return; + + Particle *target = particleEngine->createChild(); + Particle *missile = target->addEffect(particle, getPixelX(), getPixelY()); + + if (missile) + { + target->setLifetime(2000); + target->moveBy(Vector(0.0f, 0.0f, 32.0f)); + victim->controlParticle(target); + + missile->setDestination(target, 7, 0); + missile->setDieDistance(8); + missile->setLifetime(900); + } +} + void Being::setAction(Action action, int attackType) { SpriteAction currentAction = ACTION_INVALID; |