|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ====
//
// Purpose:
//
//=============================================================================
#ifndef BUTTONS_H
#define BUTTONS_H
#ifdef _WIN32
#pragma once
#endif
class CBaseButton : public CBaseToggle { public:
DECLARE_CLASS( CBaseButton, CBaseToggle ); DECLARE_SERVERCLASS();
void Spawn( void ); virtual void Precache( void ); bool CreateVPhysics(); void RotSpawn( void ); bool KeyValue( const char *szKeyName, const char *szValue ); int DrawDebugTextOverlays();
protected:
void ButtonActivate( ); void SparkSoundCache( void );
void ButtonTouch( ::CBaseEntity *pOther ); void ButtonSpark ( void ); void TriggerAndWait( void ); void ButtonReturn( void ); void ButtonBackHome( void ); void ButtonUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
bool OnUseLocked( CBaseEntity *pActivator );
virtual void Lock(); virtual void Unlock();
// Input handlers
void InputLock( inputdata_t &inputdata ); void InputUnlock( inputdata_t &inputdata ); void InputPress( inputdata_t &inputdata ); void InputPressIn( inputdata_t &inputdata ); void InputPressOut( inputdata_t &inputdata );
virtual int OnTakeDamage( const CTakeDamageInfo &info ); enum BUTTON_CODE { BUTTON_NOTHING, BUTTON_ACTIVATE, BUTTON_RETURN, BUTTON_PRESS };
BUTTON_CODE ButtonResponseToTouch( void ); void Press( CBaseEntity *pActivator, BUTTON_CODE eCode ); DECLARE_DATADESC();
virtual int ObjectCaps(void);
Vector m_vecMoveDir;
bool m_fStayPushed; // button stays pushed in until touched again?
bool m_fRotating; // a rotating button? default is a sliding button.
locksound_t m_ls; // door lock sounds
byte m_bLockedSound; // ordinals from entity selection
byte m_bLockedSentence; byte m_bUnlockedSound; byte m_bUnlockedSentence; bool m_bLocked; int m_sounds; float m_flUseLockedTime; // Controls how often we fire the OnUseLocked output.
bool m_bSolidBsp;
string_t m_sNoise; // The actual WAV file name of the sound.
COutputEvent m_OnDamaged; COutputEvent m_OnPressed; COutputEvent m_OnUseLocked; COutputEvent m_OnIn; COutputEvent m_OnOut;
int m_nState; };
//
// Rotating button (aka "lever")
//
class CRotButton : public CBaseButton { public: DECLARE_CLASS( CRotButton, CBaseButton );
void Spawn( void ); bool CreateVPhysics( void );
};
class CMomentaryRotButton : public CRotButton { DECLARE_CLASS( CMomentaryRotButton, CRotButton );
public: void Spawn ( void ); bool CreateVPhysics( void ); virtual int ObjectCaps( void ); void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); void UseMoveDone( void ); void ReturnMoveDone( void ); void OutputMovementComplete(void); void SetPositionMoveDone(void); void UpdateSelf( float value, bool bPlaySound );
void PlaySound( void ); void UpdateTarget( float value, CBaseEntity *pActivator );
int DrawDebugTextOverlays(void);
static CMomentaryRotButton *Instance( edict_t *pent ) { return (CMomentaryRotButton *)GetContainingEntity(pent); }
float GetPos(const QAngle &vecAngles);
DECLARE_DATADESC();
virtual void Lock(); virtual void Unlock();
// Input handlers
void InputSetPosition( inputdata_t &inputdata ); void InputSetPositionImmediately( inputdata_t &inputdata ); void InputDisableUpdateTarget( inputdata_t &inputdata ); void InputEnableUpdateTarget( inputdata_t &inputdata );
void InputEnable( inputdata_t &inputdata ); void InputDisable( inputdata_t &inputdata );
virtual void Enable( void ); virtual void Disable( void );
bool m_bDisabled;
COutputFloat m_Position; COutputEvent m_OnUnpressed; COutputEvent m_OnFullyOpen; COutputEvent m_OnFullyClosed; COutputEvent m_OnReachedPosition;
int m_lastUsed; QAngle m_start; QAngle m_end; float m_IdealYaw; string_t m_sNoise;
bool m_bUpdateTarget; // Used when jiggling so that we don't jiggle the target (door, etc)
int m_direction; float m_returnSpeed; float m_flStartPosition;
protected:
void UpdateThink( void ); };
//--------------------------------------------------------------------------------------------------------
//
// CButtonTimed - func_button_timed
//
//--------------------------------------------------------------------------------------------------------
class CButtonTimed : public CBaseButton { public: DECLARE_CLASS( CButtonTimed, CBaseButton ); DECLARE_DATADESC(); DECLARE_SERVERCLASS();
CButtonTimed();
void UseTimed( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); void UseThink( void );
virtual void Spawn( void ); virtual int ObjectCaps( void ) { const int base_flags = BaseClass::ObjectCaps(); return (base_flags | FCAP_CONTINUOUS_USE | FCAP_USE_IN_RADIUS); }
void StopUse( void );
void InputEnable( inputdata_t &inputdata ); void InputDisable( inputdata_t &inputdata ); void Enable( void ); void Disable( void );
private: CNetworkVar( string_t, m_sUseString); CNetworkVar( string_t, m_sUseSubString);
int m_nUseTime; bool m_bAutoDisable;
bool m_bInUse; float m_flUseStartTime; float m_flLastUseTime;
COutputEvent m_OnUnpressed; COutputEvent m_OnTimeUp; };
#endif // BUTTONS_H
|