mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 04:26:03 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
116
game/shared/hintsystem.h
Normal file
116
game/shared/hintsystem.h
Normal file
@ -0,0 +1,116 @@
|
||||
//====== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. =======
|
||||
//
|
||||
// Purpose: A class embedded in players to provide hints to that player
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef HINTSYSTEM_H
|
||||
#define HINTSYSTEM_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#include "c_baseplayer.h"
|
||||
#else
|
||||
#include "player.h"
|
||||
#endif
|
||||
|
||||
#include "bitvec.h"
|
||||
|
||||
class CHintMessageQueue;
|
||||
class CHintMessageTimers;
|
||||
|
||||
typedef bool (*HintTimerCallback)( CBasePlayer *pOnPlayer );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: A class embedded in players to provide hints to that player
|
||||
//-----------------------------------------------------------------------------
|
||||
class CHintSystem
|
||||
{
|
||||
DECLARE_CLASS_NOBASE( CHintSystem );
|
||||
|
||||
public:
|
||||
CHintSystem();
|
||||
~CHintSystem();
|
||||
|
||||
//-----------------------------------------------------
|
||||
// Call this from your player constructor
|
||||
void Init( CBasePlayer *pPlayer, int iMaxHintTypes, const char **pszHintStrings );
|
||||
|
||||
//-----------------------------------------------------
|
||||
// CBasePlayer calls these for you, if you fall back to its
|
||||
// versions of Spawn(), Event_Killed(), and PreThink().
|
||||
// Call this when your player respawns
|
||||
void ResetHints( void );
|
||||
|
||||
// Call this when your player dies
|
||||
void ResetHintTimers( void );
|
||||
|
||||
// Call this when in your player PreThink()
|
||||
void Update( void );
|
||||
|
||||
//-----------------------------------------------------
|
||||
// Hint addition
|
||||
// Call these to add a hint directly onscreen
|
||||
bool HintMessage( int hint, bool bForce = false, bool bOnlyIfClear = false );
|
||||
void HintMessage( const char *pMessage );
|
||||
|
||||
// Call this to add a hint timer. It'll be reset for you automatically
|
||||
// everytime ResetHintTimers() is called.
|
||||
void RegisterHintTimer( int iHintID, float flTimerDuration, bool bOnlyIfClear = false, HintTimerCallback pfnCallback = NULL );
|
||||
|
||||
// Call these to start & stop registered hint timers
|
||||
void StartHintTimer( int iHintID );
|
||||
void StopHintTimer( int iHintID );
|
||||
void RemoveHintTimer( int iHintID );
|
||||
bool TimerShouldFire( int iHintID );
|
||||
|
||||
// Set whether a player should see any hints at all
|
||||
void SetShowHints( bool bShowHints ) { m_bShowHints = bShowHints; }
|
||||
void SetHintPlayed( int iHintID );
|
||||
bool ShouldShowHints( void );
|
||||
|
||||
// Returns true if the hint has been played already
|
||||
bool HasPlayedHint( int iHintID );
|
||||
void PlayedAHint( void );
|
||||
void ClearHintHistory( void ) { m_HintHistory.ClearAll(); }
|
||||
|
||||
// Not really an optimal solution, but saves us querying the hud element,
|
||||
// which wouldn't be easy with derived versions in different mods.
|
||||
bool HintIsCurrentlyVisible( void ) { return (gpGlobals->curtime - m_flLastHintPlayedAt < 11 ); }
|
||||
|
||||
private:
|
||||
void ReAddHintTimerIfNotDisplayed( int iHintID, float flTimerDuration );
|
||||
|
||||
private:
|
||||
CBasePlayer *m_pPlayer;
|
||||
|
||||
float m_flLastHintPlayedAt;
|
||||
bool m_bShowHints;
|
||||
CVarBitVec m_HintHistory;
|
||||
const char **m_pszHintMessages;
|
||||
CHintMessageQueue *m_pHintMessageQueue;
|
||||
CHintMessageTimers *m_pHintMessageTimers;
|
||||
|
||||
struct onresethints_t
|
||||
{
|
||||
int iHintID;
|
||||
float flTimer;
|
||||
bool bOnlyIfClear;
|
||||
HintTimerCallback pfnCallback;
|
||||
};
|
||||
CUtlVector<onresethints_t> m_RegisteredResetHints;
|
||||
};
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
// Derive from this if you have an entity that wants to display a hint
|
||||
// when the player waves his target ID over it on the client.
|
||||
abstract_class ITargetIDProvidesHint
|
||||
{
|
||||
public:
|
||||
virtual void DisplayHintTo( C_BasePlayer *pPlayer ) = 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // HINTSYSTEM_H
|
Reference in New Issue
Block a user