Viewmodel Blood Splatter Overlay/bloodoverlayproxy.cpp: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Moved code from main article over to this subpage)
 
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

Dead End - Icon.png
This article has no Wikipedia icon links to other VDC articles. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
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 );
Wikipedia - Letter.png
This article has not been added to any content Wikipedia icon categories. Please help out by Wikipedia icon adding categories.
January 2024