Viewmodel Blood Splatter Overlay/bloodoverlayproxy.cpp: Difference between revisions
Jump to navigation
Jump to search
GamerDude27 (talk | contribs) (Moved code from main article over to this subpage) |
Thunder4ik (talk | contribs) m (→top: clean up, added uncategorised, deadend tags) |
||
Line 1: | Line 1: | ||
{{Dead end|date=January 2024}} | |||
<source lang=cpp> | <source lang=cpp> | ||
//========= Copyright Bernt Andreas Eide, All rights reserved. ============// | //========= Copyright Bernt Andreas Eide, All rights reserved. ============// | ||
Line 102: | Line 103: | ||
EXPOSE_INTERFACE( C_BloodyTextureProxy, IMaterialProxy, "BloodyTexture" IMATERIAL_PROXY_INTERFACE_VERSION ); | EXPOSE_INTERFACE( C_BloodyTextureProxy, IMaterialProxy, "BloodyTexture" IMATERIAL_PROXY_INTERFACE_VERSION ); | ||
</source> | </source> | ||
{{Uncategorized|date=January 2024}} |
Latest revision as of 10:19, 21 January 2024

This article has no
links to other VDC articles. Please help improve this article by adding links
that are relevant to the context within the existing text.
January 2024


January 2024
//========= Copyright Bernt Andreas Eide, All rights reserved. ============//
//
// Purpose: When you take damage or you damage someone and blood splats on
// you then you'll draw that blood on your hands/weapon. (overlay)
//
//=============================================================================//
#include "cbase.h"
#include "materialsystem/imaterialvar.h"
#include "materialsystem/imaterialproxy.h"
#include "baseviewmodel_shared.h"
#include "c_baseplayer.h"
#include "toolframework_client.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
class C_BloodyTextureProxy : public IMaterialProxy
{
public:
C_BloodyTextureProxy();
virtual ~C_BloodyTextureProxy();
virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
C_BaseEntity *BindArgToEntity( void *pArg );
virtual void OnBind( void *pC_BaseEntity );
virtual void Release() { delete this; }
IMaterial *GetMaterial();
private:
IMaterialVar *m_pBlendFactor;
};
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
C_BloodyTextureProxy::C_BloodyTextureProxy()
{
m_pBlendFactor = NULL;
}
//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
C_BloodyTextureProxy::~C_BloodyTextureProxy()
{
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool C_BloodyTextureProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues )
{
bool found;
m_pBlendFactor = pMaterial->FindVar( "$detailblendfactor", &found, false );
if ( !found )
return false;
return true;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
C_BaseEntity *C_BloodyTextureProxy::BindArgToEntity( void *pArg )
{
IClientRenderable *pRend = (IClientRenderable *)pArg;
return pRend ? pRend->GetIClientUnknown()->GetBaseEntity() : NULL;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_BloodyTextureProxy::OnBind( void *pC_BaseEntity )
{
if ( !pC_BaseEntity )
return;
C_BaseEntity *pEntity = BindArgToEntity( pC_BaseEntity );
C_BaseViewModel *pViewModel = dynamic_cast<C_BaseViewModel *>( pEntity );
if ( pViewModel )
{
C_BasePlayer *pOwner = ToBasePlayer( pViewModel->GetOwner() );
if ( pOwner )
m_pBlendFactor->SetFloatValue( pOwner->m_bShouldDrawBloodOverlay ? 1.0f : 0.0f );
}
if ( ToolsEnabled() )
ToolFramework_RecordMaterialParams( GetMaterial() );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
IMaterial *C_BloodyTextureProxy::GetMaterial()
{
return m_pBlendFactor->GetOwningMaterial();
}
EXPOSE_INTERFACE( C_BloodyTextureProxy, IMaterialProxy, "BloodyTexture" IMATERIAL_PROXY_INTERFACE_VERSION );

This article has not been added to any content
categories. Please help out by
adding categories.
January 2024


January 2024