//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef TF_POWERUP_BOTTLE_H #define TF_POWERUP_BOTTLE_H #ifdef _WIN32 #pragma once #endif #include "tf_shareddefs.h" #include "tf_item_wearable.h" #if defined( CLIENT_DLL ) #define CTFPowerupBottle C_TFPowerupBottle #include "econ_notifications.h" #endif class CTFPowerupBottle : public CTFWearable { DECLARE_CLASS( CTFPowerupBottle, CTFWearable ); public: DECLARE_NETWORKCLASS(); DECLARE_DATADESC(); CTFPowerupBottle(); virtual ~CTFPowerupBottle() { } PowerupBottleType_t GetPowerupType( void ) const; virtual void Precache( void ); // reset the bottle to its initial state void Reset( void ); // Unequips the item as usual, but also removes any effect it may have been granting virtual void UnEquip( CBasePlayer* pOwner ); // Overridden so that this item can apply the effect only when it is active virtual void ReapplyProvision(); // @return true if the effect was applied and a charge was consumed, false otherwise bool Use(); // Remove the effect applied by the item void RemoveEffect(); // set the number of charges availabe on this item // @param usNumCharges void SetNumCharges( uint8 usNumCharges ); // @return the number of charges the item has uint8 GetNumCharges() const; // @return the maximum number of charges this item can hold uint8 GetMaxNumCharges() const; bool AllowedToUse(); const char* GetEffectLabelText( void ); const char* GetEffectIconName( void ); float GetProgress( void ) { return 0.0f; } virtual int GetSkin(); bool IsBasePowerUpBottle( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return (iMode == 1); }; protected: // Used internally to remove the effect after a tunable amount of time void StatusThink(); CNetworkVar( bool, m_bActive ); CNetworkVar( uint8, m_usNumCharges ); private: #ifdef TF_CLIENT_DLL virtual void FireGameEvent( IGameEvent *event ); virtual int GetWorldModelIndex( void ); #endif float m_flLastSpawnTime; }; #ifdef CLIENT_DLL // ****************************************************************************************** // CEquipMvMCanteenNotification - Client notification to equip a canteen // ****************************************************************************************** class CEquipMvMCanteenNotification : public CEconNotification { public: CEquipMvMCanteenNotification() : CEconNotification() { m_bHasTriggered = false; } ~CEquipMvMCanteenNotification() { if ( !m_bHasTriggered ) { m_bHasTriggered = true; } } virtual void MarkForDeletion() { m_bHasTriggered = true; CEconNotification::MarkForDeletion(); } virtual EType NotificationType() { return eType_AcceptDecline; } virtual bool BShowInGameElements() const { return true; } virtual void Accept(); virtual void Trigger() { Accept(); } virtual void Decline() { MarkForDeletion(); } virtual void UpdateTick(); static bool IsNotificationType( CEconNotification *pNotification ) { return dynamic_cast( pNotification ) != NULL; } private: bool m_bHasTriggered; }; #endif // client #endif // TF_POWERUP_BOTTLE_H