Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "toggletextureproxy.h"
#include "materialsystem/imaterial.h"
#include "materialsystem/imaterialvar.h"
#include "materialsystem/itexture.h"
#include <keyvalues.h>
#include "functionproxy.h"
#include "imaterialproxydict.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
EXPOSE_MATERIAL_PROXY( CBaseToggleTextureProxy, ToggleTexture );
//-----------------------------------------------------------------------------
// Constructor, destructor:
//-----------------------------------------------------------------------------
CBaseToggleTextureProxy::CBaseToggleTextureProxy() { Cleanup(); }
CBaseToggleTextureProxy::~CBaseToggleTextureProxy() { Cleanup(); }
C_BaseEntity *CBaseToggleTextureProxy::BindArgToEntity( void *pArg ) { IClientRenderable *pRend = (IClientRenderable *)pArg; return pRend->GetIClientUnknown()->GetBaseEntity(); }
//-----------------------------------------------------------------------------
// Initialization, shutdown
//-----------------------------------------------------------------------------
bool CBaseToggleTextureProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues ) { char const* pTextureVarName = pKeyValues->GetString( "toggleTextureVar" ); if( !pTextureVarName ) return false;
bool foundVar; m_TextureVar = pMaterial->FindVar( pTextureVarName, &foundVar, false ); if( !foundVar ) return false;
char const* pTextureFrameNumVarName = pKeyValues->GetString( "toggleTextureFrameNumVar" ); if( !pTextureFrameNumVarName ) return false;
m_TextureFrameNumVar = pMaterial->FindVar( pTextureFrameNumVarName, &foundVar, false ); if( !foundVar ) return false; m_WrapAnimation = !!pKeyValues->GetInt( "toggleShouldWrap", 1 ); return true; }
void CBaseToggleTextureProxy::Cleanup() { m_TextureVar = NULL; m_TextureFrameNumVar = NULL; }
//-----------------------------------------------------------------------------
// Does the dirty deed
//-----------------------------------------------------------------------------
void CBaseToggleTextureProxy::OnBind( void *pC_BaseEntity ) { assert ( m_TextureVar );
if (!pC_BaseEntity) return;
if( m_TextureVar->GetType() != MATERIAL_VAR_TYPE_TEXTURE ) { return; }
ITexture *pTexture = NULL;
pTexture = m_TextureVar->GetTextureValue();
if ( pTexture == NULL ) return;
C_BaseEntity *pEntity = BindArgToEntity( pC_BaseEntity );
if ( pEntity == NULL ) return; int numFrames = pTexture->GetNumAnimationFrames(); int frame = pEntity->GetTextureFrameIndex();
int intFrame = ((int)frame) % numFrames;
if ( m_WrapAnimation == false ) { if ( frame > numFrames ) intFrame = numFrames; } m_TextureFrameNumVar->SetIntValue( intFrame ); }
IMaterial *CBaseToggleTextureProxy::GetMaterial() { return m_TextureFrameNumVar->GetOwningMaterial(); }
|