This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

173 lines
4.3 KiB
C++

//========= 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