CHudFadingObject

From Valve Developer Community
Jump to: navigation, search

CHudFadingObject is a baseclass for fading numeric elements.(fade in hud element when called or value changed for a certain amount of time then fade out). I used it to clear up the non essential elements such as ammo/game mode/etc.

hud_basefadingobject.h

//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------

#ifndef HUD_FADINGOBJECT_H
#define HUD_FADINGOBJECT_H
#ifdef _WIN32
#pragma once
#endif

#include "hud_numericdisplay.h"

class CHudFadingObject : public CHudNumericDisplay
{
	DECLARE_CLASS_SIMPLE( CHudFadingObject, CHudNumericDisplay );

public:
	CHudFadingObject(vgui::Panel *parent, const char *name);

private:
	//OVERRIDE THESE
	virtual void FadeIn();
	virtual void FadeOut();

	virtual int  GetValue();

	virtual float Visible_Duration() 
	{ return 6.0f; }
	//OVERRIDE THESE

	virtual void OnThink( void );
	virtual void Reset( void );

protected:
	void Activate();

	float	m_flExpireTime;
	bool	m_bShow;
	int		m_iLastValue;
};

#endif

hud_basefadingobject.cpp

#include "cbase.h"
#include "hud.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "iclientmode.h"
#include "hl2mp_gamerules.h"

#include "vgui_controls/AnimationController.h"
#include "vgui/ILocalize.h"

#include "hud_basefadingobject.h"
using namespace vgui;

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"


//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CHudFadingObject::CHudFadingObject(vgui::Panel *parent, const char *name) : BaseClass(parent, name)
{
	m_bShow = false;
	m_flExpireTime = 0.0f;
	m_iLastValue = 0;
}

void CHudFadingObject::Reset( void )
{Activate();}

void CHudFadingObject::FadeIn()
{/*play corresponding animation*/}

void CHudFadingObject::FadeOut()
{/*play corresponding animation*/}

void CHudFadingObject::Activate()
{
	m_iLastValue = GetValue(); 
	FadeIn();
	m_flExpireTime = gpGlobals->curtime + Visible_Duration() ;
	m_bShow = true;
}

int CHudFadingObject::GetValue()
{
	return 0;
}

//-----------------------------------------------------------------------------
void CHudFadingObject::OnThink( void )
{
	if(!IsVisible())
	return;

	if ( m_bShow && (m_flExpireTime <= gpGlobals->curtime) )
	{
		m_bShow = false;
		FadeOut();
	}

	if (GetValue() != m_iLastValue)
		Activate();
	
	SetDisplayValue(GetValue());
}

Example

//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#include "cbase.h"
#include "hud.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "hud_numericdisplay.h"
#include "iclientmode.h"
#include "hl2mp_gamerules.h"

#include "vgui_controls/AnimationController.h"
#include "vgui/ILocalize.h"

#include "hud_basefadingobject.h"


// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

//-----------------------------------------------------------------------------
// Purpose: Displays the amount of tickets
//-----------------------------------------------------------------------------
class CHudGameplayInfo : public CHudElement, public CHudFadingObject
{
	DECLARE_CLASS_SIMPLE( CHudGameplayInfo, CHudFadingObject );

public:
	CHudGameplayInfo( const char *pElementName );

private:

	void FadeIn();
	void FadeOut();
	int  GetValue();
	float Visible_Duration() 
	{ return 3.0f; }
};

DECLARE_HUDELEMENT( CHudGameplayInfo );

//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CHudGameplayInfo::CHudGameplayInfo( const char *pElementName ) : CHudElement( pElementName ), CHudFadingObject(NULL, "HudGameplayInfo")
{
	SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
}

void CHudGameplayInfo::FadeIn()
{g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "FadeInGameInfo" );}

void CHudGameplayInfo::FadeOut()
{g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "FadeOutGameInfo" );}

int CHudGameplayInfo::GetValue()
{
	int temp = 0;

	C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
	if(!pPlayer)return temp;

	if (pPlayer->GetTeamNumber() == TEAM_COMBINE)
	temp = HL2MPRules()->m_iCTTickets;
	else if (pPlayer->GetTeamNumber() == TEAM_REBELS)
	temp = HL2MPRules()->m_iTTickets;

	return temp;
}

HUD animation script

event FadeOutGameInfo
{
	Animate HudGameplayInfo Alpha		"0" 		Linear 0.0 1.5
}

event FadeInGameInfo
{
	Animate HudGameplayInfo Alpha		"255" 		Linear 0.0 1.5
}