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.
nekohook/modules/source2013/sdk/game/client/weapon_selection.h
2020-08-04 13:13:01 -04:00

123 lines
3.9 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Weapon selection handling
//
// $NoKeywords: $
//=============================================================================//
#if !defined(WEAPON_SELECTION_H)
#define WEAPON_SELECTION_H
#ifdef _WIN32
#pragma once
#endif
#include "hudelement.h"
class C_BaseCombatWeapon;
class C_BasePlayer;
extern ConVar hud_fastswitch;
// weapon switch types for Convar hud_fastswitch
#define HUDTYPE_BUCKETS 0 // PC buckets
#define HUDTYPE_FASTSWITCH 1 // PC fastswitch
#define HUDTYPE_PLUS 2 // console buckets
#define HUDTYPE_CAROUSEL 3 // console carousel scroll
//-----------------------------------------------------------------------------
// Purpose: Base class for tf2 & hl2 weapon selection hud elements
//-----------------------------------------------------------------------------
abstract_class CBaseHudWeaponSelection : public CHudElement {
DECLARE_CLASS(CBaseHudWeaponSelection, CHudElement);
public:
CBaseHudWeaponSelection(const char *pElementName);
virtual void Init(void);
virtual void VidInit(void);
virtual void ProcessInput();
virtual void Reset(void);
virtual void OnThink(void);
virtual void OpenSelection(void);
virtual void HideSelection(void);
virtual void CancelWeaponSelection(void);
// Game specific overrides
virtual void CycleToNextWeapon(void) = 0;
virtual void CycleToPrevWeapon(void) = 0;
virtual void SwitchToLastWeapon(void);
virtual C_BaseCombatWeapon *GetWeaponInSlot(int iSlot, int iSlotPos) = 0;
virtual void SelectWeaponSlot(int iSlot) = 0;
virtual C_BaseCombatWeapon *GetFirstPos(int iSlot);
virtual C_BaseCombatWeapon *GetNextActivePos(int iSlot, int iSlotPos);
virtual void SetWeaponSelected(void);
virtual void SelectWeapon(void);
virtual C_BaseCombatWeapon *GetSelectedWeapon(void) = 0;
virtual void OnWeaponPickup(C_BaseCombatWeapon * pWeapon);
virtual bool IsInSelectionMode();
void UserCmd_Slot1(void);
void UserCmd_Slot2(void);
void UserCmd_Slot3(void);
void UserCmd_Slot4(void);
void UserCmd_Slot5(void);
void UserCmd_Slot6(void);
void UserCmd_Slot7(void);
void UserCmd_Slot8(void);
void UserCmd_Slot9(void);
void UserCmd_Slot0(void);
void UserCmd_Slot10(void);
void UserCmd_Close(void);
void UserCmd_NextWeapon(void);
void UserCmd_PrevWeapon(void);
void UserCmd_LastWeapon(void);
void UserCmd_DropPrimary(void);
virtual void SelectSlot(int iSlot);
virtual bool IsHudMenuTakingInput();
virtual bool IsHudMenuPreventingWeaponSelection();
bool HandleHudMenuInput(int iSlot);
static CBaseHudWeaponSelection *GetInstance();
// these functions are exposed as virtual so that the tf_hints system can
// redraw the weapon selection
virtual void DrawWList(C_BasePlayer * pPlayer,
C_BaseCombatWeapon * pSelectedWeapon,
bool drawOutline = false, int ora = 0, int og = 0,
int ob = 0, int oa = 0) {}
virtual bool ComputeRect(C_BasePlayer * pPlayer,
C_BaseCombatWeapon * pSelectedWeapon,
wrect_t * outrect) {
return false;
}
virtual int KeyInput(int down, ButtonCode_t keynum,
const char *pszCurrentBinding);
protected:
// returns true if there is a weapon currently visible to select
virtual bool IsWeaponSelectable() { return IsInSelectionMode(); }
bool CanBeSelectedInHUD(C_BaseCombatWeapon * pWeapon);
void UpdateSelectionTime(void);
float m_flSelectionTime; // most recent time at which weapon selection had
// input
static CBaseHudWeaponSelection *s_pInstance;
bool m_bSelectionVisible;
CHandle<C_BaseCombatWeapon> m_hSelectedWeapon;
};
// accessor
CBaseHudWeaponSelection *GetHudWeaponSelection();
#endif // WEAPON_SELECTION_H