hl2_src-leak-2017/src/game/client/tf2/paneleffect.h

167 lines
4.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef PANELEFFECT_H
#define PANELEFFECT_H
#ifdef _WIN32
#pragma once
#endif
namespace vgui
{
class Panel;
}
class ITFHintItem;
#include <vgui_controls/PHandle.h>
// Serial under of effect, for safe lookup
typedef unsigned int EFFECT_HANDLE;
#define EFFECT_INVALID_HANDLE (EFFECT_HANDLE)(~0)
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CPanelEffect
{
public:
DECLARE_CLASS_NOBASE( CPanelEffect );
enum
{
UNKNOWN = 0,
FLASHBORDER,
ARROW,
};
enum
{
ENDPOINT_UNKNOWN = 0,
ENDPOINT_PANEL,
ENDPOINT_POINT,
ENDPOINT_RECTANGLE,
ENDPOINT_ENTITY,
};
CPanelEffect( ITFHintItem *owner );
virtual ~CPanelEffect();
virtual void doPaint( vgui::Panel *panel );
virtual void Think( void );
virtual bool ShouldRemove( void );
virtual void SetShouldRemove( bool remove );
virtual EFFECT_HANDLE GetHandle( void );
virtual void SetType( int type );
virtual int GetType( void );
virtual void SetPanel( vgui::Panel *panel );
virtual vgui::Panel *GetPanel( void );
virtual void SetPanelOther( vgui::Panel *panel );
virtual vgui::Panel *GetPanelOther( void );
virtual void SetTargetPoint( int x, int y );
virtual void SetTargetRect( int x, int y, int w, int h );
virtual void SetColor( int r, int g, int b, int a );
virtual void GetColor( int& r, int& g, int& b, int& a );
virtual void SetEndTime( float time );
virtual float GetEndTime( void );
virtual void SetOwner( ITFHintItem *owner );
virtual ITFHintItem *GetOwner( void );
virtual void SetUsingOffset( bool active, int x, int y );
virtual bool GetUsingOffset( void );
virtual void GetOffset( int& x, int& y );
virtual int GetTargetType( void );
virtual void SetTargetType( int type );
virtual bool GetTargetRectangle( vgui::Panel *outpanel, int&x, int&y, int&w, int&h );
virtual void SetVisible( bool visible );
virtual bool GetVisible( void );
private:
static EFFECT_HANDLE m_nHandleCount;
protected:
virtual bool IsVisibleIncludingParent( vgui::Panel *panel );
EFFECT_HANDLE m_Handle;
ITFHintItem *m_pOwner;
// Data
// type of effect
int m_nType;
// effect targets
vgui::PHandle m_hPanel;
vgui::PHandle m_hOtherPanel;
// effect color
int m_r, m_g, m_b, m_a;
float m_flEndTime;// 0.0f for no end time
// true if we should offset endpoint of arrow/lines into m_hOtherPanel by m_nOffset amount
bool m_bEndpointIsCoordinate;
// x, y offset into destination panel
int m_nOffset[ 2 ];
bool m_bShouldRemove;
int m_TargetType;
int m_ptX;
int m_ptY;
int m_rectX;
int m_rectY;
int m_rectW;
int m_rectH;
bool m_bVisible;
};
#define EFFECT_FLASH_TIME 0.7f
#define EFFECT_R 100
#define EFFECT_G 150
#define EFFECT_B 220
#define EFFECT_A 255
#define ARROW_R 130
#define ARROW_G 190
#define ARROW_B 240
#define ARROW_A 255
#define AXIALLINE_R 220
#define AXIALLINE_G 220
#define AXIALLINE_B 255
#define AXIALLINE_A 255
// Panel effect APIs
void DestroyPanelEffects( ITFHintItem *owner );
EFFECT_HANDLE CreateFlashEffect( ITFHintItem *owner, vgui::Panel *target );
EFFECT_HANDLE CreateArrowEffect( ITFHintItem *owner, vgui::Panel *from, vgui::Panel *to );
EFFECT_HANDLE CreateAxialLineEffect( ITFHintItem *owner, vgui::Panel *from, vgui::Panel *to );
EFFECT_HANDLE CreateArrowEffectToPoint( ITFHintItem *owner, vgui::Panel *from, int x, int y );
EFFECT_HANDLE CreateAxialLineEffectToPoint( ITFHintItem *owner, vgui::Panel *from, int x, int y );
EFFECT_HANDLE CreateArrowEffectToRect( ITFHintItem *owner, vgui::Panel *from, int x, int y, int w, int h );
EFFECT_HANDLE CreateAxialLineEffectToRect( ITFHintItem *owner, vgui::Panel *from, int x, int y, int w, int h );
#endif // PANELEFFECT_H