/* $Id: weaponshotgun.cpp,v 1.23.4.1 2006/03/14 14:45:52 chfreund Exp $ */ #include "weaponshotgun.hpp" #include "world.hpp" #include "avatar.hpp" bool WeaponShotgun::reallyShoot( World* world, Avatar* avatar, const StationaryGun* gun ) const { const int N_BULLETS = 50; real power; // place bullet particles Vector startPos = avatar->placeBesideCollRect(); for( int s = 0; s < N_BULLETS; s++ ) { power = - world->getRandom().getNormedReal(); power *= 6.0; power += 30.0; Vector vel = avatar->getRandomizedAimingVector( 20 ); vel *= power; vel += avatar->getVel(); power = 30.0 - 6.0 * world->getRandom().getNormedReal(); world->getParticles()->addParticle( Particles::ParticleData( startPos, vel, Particles::EXPL_EARTH | Particles::EXPL_OBJECT | Particles::DAMAGE | Particles::EXPL_GEN_SPARKS, 0, avatar->getPlayer()->getPlayerID(), 100, 10, 0xffffff)); } // apply recoil real factor = power; factor *= N_BULLETS; factor /= world->getDT( avatar->getPos() ); Vector forceAdd = -avatar->getAimingVector(); forceAdd *= factor; avatar->addForce( forceAdd ); return true; }