/* * file bsp_weapon.h * A weapon that shoots both at player and environment (pnode and bsp). */ #ifndef _BSP_WEAPON_H #define _BSP_WEAPON_H #include "world_entity.h" #include "aiming_system.h" #include "effects/explosion.h" #include #include "particles/box_emitter.h" #include "particles/sprite_particles.h" class MuzzleFlash : public WorldEntity { ObjectListDeclaration(MuzzleFlash); public: void explode (float lifetime); MuzzleFlash (); virtual ~MuzzleFlash (); virtual void activate(); virtual void deactivate(); virtual void tick (float time); virtual void draw() const; void setLifeTime( float lifeTime ){ this->lifeTime = lifeTime; } void drawParticles(){ if (explosionParticles) explosionParticles->draw(); } protected: //static FastFactory* fastFactory; float lifeTime; float lifeCycle; SpriteParticles* explosionParticles; BoxEmitter* emitter; }; class BspWeapon : public WorldEntity { ObjectListDeclaration(BspWeapon); public: BspWeapon ( OM_LIST list ); BspWeapon (const TiXmlElement* root); virtual ~BspWeapon(); void init( OM_LIST list ); void loadParams(const TiXmlElement* root); void fire(bool fire){ this->bFire = fire; } virtual void tick(float dt); virtual void draw() const; void setAlwaysHits( bool r ){ this->alwaysHits = r; } void setDamage( float d ){ this->damage = d; } private: void shoot(); float range; void setRange( float r ){ this->range = r; } float damage; float fireRate; void setFireRate( float r ){ this->fireRate = r; } bool alwaysHits; void addPoint(float x, float y, float z); OrxSound::SoundSource soundSource_shoot; OrxSound::SoundBuffer soundBuffer_shoot;; std::list gunFire; float bRate; bool bFire; #ifdef DEBUG_AIMING float debugDist; #endif AimingSystem* aimingSystem; }; #endif