source-engine/game/server/buttons.h

173 lines
4.0 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright 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 );
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 );
};
#endif // BUTTONS_H