/* * Weapon.h * * Created on: 12.08.2012 * Author: Felix */ #ifndef DG_WEAPON_H_ #define DG_WEAPON_H_ #include #include #include #include #include "../util/Yaml.h" class Character; class World; class Particle; class Yaml; class Weapon { public: explicit Weapon(World& world, Character& holder, const Yaml& config); void pullTrigger(); void releaseTrigger(); void onThink(int elapsed); int getMagazineAmmo() const; int getTotalAmmo() const; std::string getName() const; void reload(); void cancelReload(); private: void fire(); void insertProjectile(float angle); private: World& mWorld; Character& mHolder; thor::Timer mTimer; const std::string mName; const Yaml mProjectile; const int mDamage; const float mProjectileSpeed; const int mFireInterval; const int mReloadTime; bool mFiring; const bool mAutomatic; const int mMagazineSize; int mMagazineAmmo; const int mMaxTotalAmmo; int mTotalAmmo; bool mIsReloading = false; const int mPellets; const float mPelletSpread; const bool mReloadSingle; const float mSpread; const float mSpreadMoving; const float mMaxRange; const float mRequiresAmmo; std::default_random_engine mGenerator; }; #endif /* DG_WEAPON_H_ */