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:
118
game/client/toggletextureproxy.cpp
Normal file
118
game/client/toggletextureproxy.cpp
Normal file
@ -0,0 +1,118 @@
|
||||
//========= Copyright <20> 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();
|
||||
}
|
Reference in New Issue
Block a user