/* $Id: weaponrubgun.cpp,v 1.18.4.1 2006/03/14 14:45:52 chfreund Exp $ */ #include "weaponrubgun.hpp" #include "world.hpp" #include "avatar.hpp" bool WeaponRubGun::reallyShoot( World* world, Avatar* avatar, const StationaryGun* gun ) const { // place bullet particle real power = - world->getRandom().getNormedReal(); power *= 4.0; power += 20.0; Vector vel = avatar->getRandomizedAimingVector( 2 ); vel *= power; vel += avatar->getVel(); world->getParticles()->addParticle( Particles::ParticleData( avatar->placeBesideCollRect(), vel, Particles::BOUNCE_EARTH | Particles::EXPL_OBJECT | Particles::DAMAGE | Particles::SPECIAL_BOUNCE | Particles::EXPL_GEN_SPARKS, 90, avatar->getPlayer()->getPlayerID(), 30, 40, 0xffffff)); // place bullet casing world->getParticles()->addParticle( Particles::ParticleData( Vector( avatar->getPosX() + (avatar->isFacingRight() ? 5 : -5), avatar->getPosY() + avatar->getWeaponPivotDY() ), Vector( 0.5*(0.5 - world->getRandom().getNormedReal() ), -0.7*(1.0 + world->getRandom().getNormedReal() ) ) + avatar->getVel(), Particles::BOUNCE_EARTH | Particles::REDUNDANT, 0, 0, 75, 1, 0xaaaaaa ) ); // apply recoil real factor = power; factor /= world->getDT( avatar->getPos() ); Vector forceAdd = -avatar->getAimingVector(); forceAdd *= factor; avatar->addForce( forceAdd ); return true; }