//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef HUD_NUMERIC_H #define HUD_NUMERIC_H #ifdef _WIN32 #pragma once #endif #include "hudelement.h" #include class CHudNumeric : public CHudElement, public vgui::Panel { DECLARE_CLASS_SIMPLE( CHudNumeric, vgui::Panel ); public: CHudNumeric( const char *pElementName, const char *panelName ); void SetDrawLabel( bool draw ) { m_bDrawLabel = draw; } void SetDoPulses( bool dopulses ) { m_bSendPulses = dopulses; } void ForcePulse( void ); void SetRotaryEffect( int rotary ) { m_nRotaryEffect = rotary; } void SetRotaryTimeMax( float maxTime ) { m_flRotaryTimeMax = maxTime; } void SetRotaryCharsPerSecond( float cps ) { m_flDesiredCharactersPerSecond = cps; } // vgui::Panel overrides. virtual void Paint( void ); virtual void PaintBackground( void ); virtual void ApplySchemeSettings(vgui::IScheme *pScheme); virtual const char *GetLabelText() = 0; virtual const char *GetPulseEvent( bool increment ) = 0; virtual bool GetValue( char *val, int maxlen ) = 0; virtual Color GetColor(); virtual Color GetBoxColor(); static void BuildPrintablesList( void ); static int FindPrintableIndex( int ch ); protected: enum { ROTARY_EFFECT_NONE = 0, ROTARY_EFFECT_VERTICAL_ALARM, ROTARY_EFFECT_HORIZONTAL_ALARM, ROTARY_EFFECT_SPEEDOMETER }; enum { MAX_VALUE_LENGTH = 128, }; void PaintValue( const char *value, int textlen, int wide, int tall, Color& clr ); void PaintString( const char *text, int textlen, vgui::HFont& font, int x, int y ); void PaintStringNormal( const char *text, int textlen, vgui::HFont& font, int x, int y ); void PaintStringRotary( float t, const char *text, int textlen, vgui::HFont& font, int x, int y ); void GetRotatedChar( float frac, char startchar, char endchar, char& prevchar, char& nextchar, float& subfrac ); void PaintRotatedCharacter( int x, int y, vgui::HFont& font, int prevchar, int nextchar, float frac ); void PaintRotatedCharacterHoriz( int x, int y, vgui::HFont& font, int prevchar, int nextchar, float frac ); void PaintRotatedCharacterSpeedomter( int x, int y, vgui::HFont& font, int prevchar, int nextchar, float frac ); bool IsRotating( void ) const; float MaxCharacterDiff( const char *prev, const char *next ); void DrawCharacterBackground( const char *text, int textlen, vgui::HFont& font, int x, int y ); void DrawCharacterForeground( const char *text, int textlen, vgui::HFont& font, int x, int y ); int ComputePixelsRequired( vgui::HFont& font, const char *text, int textlen ); int m_nTextLen; char m_szPreviousValue[ MAX_VALUE_LENGTH ]; char m_szLatchedValue[ MAX_VALUE_LENGTH ]; bool m_bDrawLabel; bool m_bSendPulses; bool m_bPulseForced; float m_flRotaryTime; float m_flRotaryStartTime; float m_flActualCharactersPerSecond; static CUtlRBTree< int, int > m_Printables; static bool s_bPrintablesBuilt; CPanelAnimationVar( int, m_nRotaryEffect, "Rotary", "0" ); CPanelAnimationVar( int, m_nRotaryMaxDelta, "RotaryMaxDelta", "0" ); CPanelAnimationVar( float, m_flRotaryTimeMax, "RotaryMaxTime", "2.0" ); CPanelAnimationVar( float, m_flDesiredCharactersPerSecond, "RotarySpeed", "7.0" ); CPanelAnimationVar( bool, m_bDrawCharacterBackground, "DrawCharacterBackground", "false" ); CPanelAnimationVar( bool, m_bDrawCharacterForeground, "DrawCharacterForeground", "false" ); CPanelAnimationVar( bool, m_bDrawCharacterBackgroundBorder, "DrawCharacterBackgroundBorder", "false" ); CPanelAnimationVar( float, m_flBlur, "Blur", "0" ); CPanelAnimationVar( float, m_flAlphaOverride, "Alpha", "255" ); CPanelAnimationVar( Color, m_TextColor, "TextColor", "NumericText" ); CPanelAnimationVar( Color, m_TextColorWarning, "TextColorWarning", "NumericTextWarning" ); CPanelAnimationVar( Color, m_TextColorCritical, "TextColorCritical", "NumericTextCritical" ); CPanelAnimationVar( Color, m_BoxColor, "BoxColor", "NumericBox" ); CPanelAnimationVar( Color, m_BoxColorWarning, "BoxColorWarning", "NumericBoxWarning" ); CPanelAnimationVar( Color, m_BoxColorCritical, "BoxColorCritical", "NumericBoxCritical" ); CPanelAnimationVar( Color, m_CharBg, "CharBackground", "NumericCharBg" ); CPanelAnimationVar( Color, m_CharBgBorder, "CharBackgroundBorder", "NumericCharBgBorder" ); CPanelAnimationVar( Color, m_CharFg, "CharForeground", "NumericCharFg" ); CPanelAnimationVar( vgui::HFont, m_hLabelFont, "LabelFont", "HudNumbersLabelFont" ); CPanelAnimationVar( vgui::HFont, m_hTextFont, "TextFont", "HudNumbersSmall" ); CPanelAnimationVar( vgui::HFont, m_hTextFontPulsing, "TextFontPulsing", "HudNumbersSmallGlow" ); CPanelAnimationVarAliasType( float, label_ypos, "label_ypos", "2", "proportional_float" ); CPanelAnimationVarAliasType( float, label_xpos_right, "label_xpos_right", "5", "proportional_float" ); CPanelAnimationVarAliasType( float, value_ypos, "value_ypos", "12", "proportional_float" ); CPanelAnimationVarAliasType( float, value_xpos_right, "value_xpos_right", "5", "proportional_float" ); CPanelAnimationVar( bool, m_bUseIcon, "UseIcon", "false" ); CPanelAnimationVarAliasType( float, m_flIconWidth, "IconWidth", "60", "proportional_float" ); CPanelAnimationVarAliasType( float, m_flIconHeight, "IconHeight", "30", "proportional_float" ); CPanelAnimationVarAliasType( float, m_flIconXPos, "IconXPos", "10", "proportional_float" ); CPanelAnimationVarAliasType( float, m_flIconYPos, "IconYPos", "4", "proportional_float" ); CPanelAnimationVar( CHudTextureHandle, m_hIcon, "IconTexture", "" ); CPanelAnimationVar( Color, m_IconColor, "IconColor", "NumericText" ); }; #endif // HUD_NUMERIC_H