//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Weapon that throws things from the hand // // $Workfile: $ // $Date: $ // $NoKeywords: $ //=============================================================================// #ifndef WEAPON_BRICKBAT_H #define WEAPON_BRICKBAT_H #ifdef _WIN32 #pragma once #endif #include "basehlcombatweapon.h" enum BrickbatAmmo_t { BRICKBAT_ROCK = 0, BRICKBAT_BOTTLE, NUM_BRICKBAT_AMMO_TYPES }; class CGrenade_Brickbat; class CWeaponBrickbat : public CBaseHLCombatWeapon { public: DECLARE_CLASS(CWeaponBrickbat, CBaseHLCombatWeapon); DECLARE_SERVERCLASS(); public: int m_iCurrentAmmoType; void Precache(void); void Spawn(void); bool Deploy(void); virtual const char *GetViewModel(int viewmodelindex = 0); virtual const char *GetWorldModel(void); void DrawAmmo(void); virtual int WeaponRangeAttack1Condition(float flDot, float flDist); virtual bool WeaponLOSCondition(const Vector &ownerPos, const Vector &targetPos, bool bSetConditions); void SetPickupTouch(void); void BrickbatTouch(CBaseEntity *pOther); // default weapon touch void TraceAttack(const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr); int CapabilitiesGet(void) { return bits_CAP_WEAPON_RANGE_ATTACK1; } bool ObjectInWay(void); void ThrowBrickbat(Vector vecSrc, Vector vecVelocity, float damage); void ItemPostFrame(void); void PrimaryAttack(void); void SecondaryAttack(void); void Throw(void); void Operator_HandleAnimEvent(animevent_t *pEvent, CBaseCombatCharacter *pOperator); DECLARE_DATADESC(); DECLARE_ACTTABLE(); CWeaponBrickbat(void); private: bool m_bNeedDraw; bool m_bNeedThrow; int m_iThrowBits; // Save the current throw bits state float m_fNextThrowCheck; // When to check throw ability next Vector m_vecTossVelocity; int m_nAmmoCount[NUM_BRICKBAT_AMMO_TYPES]; // How much ammo of each type do // I own? }; #endif // WEAPON_BRICKBAT_H