mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
147
game/client/c_func_areaportalwindow.cpp
Normal file
147
game/client/c_func_areaportalwindow.cpp
Normal file
@@ -0,0 +1,147 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "view.h"
|
||||
#include "model_types.h"
|
||||
#include "ivrenderview.h"
|
||||
#include "engine/ivmodelinfo.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
#define VIEWER_PADDING 80.0f
|
||||
|
||||
class C_FuncAreaPortalWindow : public C_BaseEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLIENTCLASS();
|
||||
DECLARE_CLASS( C_FuncAreaPortalWindow, C_BaseEntity );
|
||||
|
||||
|
||||
// Overrides.
|
||||
public:
|
||||
|
||||
virtual void ComputeFxBlend();
|
||||
virtual bool IsTransparent();
|
||||
virtual int DrawModel( int flags );
|
||||
virtual bool ShouldReceiveProjectedTextures( int flags );
|
||||
|
||||
private:
|
||||
|
||||
float GetDistanceBlend();
|
||||
|
||||
|
||||
|
||||
public:
|
||||
float m_flFadeStartDist; // Distance at which it starts fading (when <= this, alpha=m_flTranslucencyLimit).
|
||||
float m_flFadeDist; // Distance at which it becomes solid.
|
||||
|
||||
// 0-1 value - minimum translucency it's allowed to get to.
|
||||
float m_flTranslucencyLimit;
|
||||
|
||||
int m_iBackgroundModelIndex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
IMPLEMENT_CLIENTCLASS_DT( C_FuncAreaPortalWindow, DT_FuncAreaPortalWindow, CFuncAreaPortalWindow )
|
||||
RecvPropFloat( RECVINFO( m_flFadeStartDist ) ),
|
||||
RecvPropFloat( RECVINFO( m_flFadeDist ) ),
|
||||
RecvPropFloat( RECVINFO( m_flTranslucencyLimit ) ),
|
||||
RecvPropInt( RECVINFO( m_iBackgroundModelIndex ) )
|
||||
END_RECV_TABLE()
|
||||
|
||||
|
||||
|
||||
void C_FuncAreaPortalWindow::ComputeFxBlend()
|
||||
{
|
||||
// We reset our blend down below so pass anything except 0 to the renderer.
|
||||
m_nRenderFXBlend = 255;
|
||||
|
||||
#ifdef _DEBUG
|
||||
m_nFXComputeFrame = gpGlobals->framecount;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool C_FuncAreaPortalWindow::IsTransparent()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int C_FuncAreaPortalWindow::DrawModel( int flags )
|
||||
{
|
||||
if ( !m_bReadyToDraw )
|
||||
return 0;
|
||||
|
||||
if( !GetModel() )
|
||||
return 0;
|
||||
|
||||
// Make sure we're a brush model.
|
||||
int modelType = modelinfo->GetModelType( GetModel() );
|
||||
if( modelType != mod_brush )
|
||||
return 0;
|
||||
|
||||
// Draw the fading version.
|
||||
render->SetBlend( GetDistanceBlend() );
|
||||
|
||||
DrawBrushModelMode_t mode = DBM_DRAW_ALL;
|
||||
if ( flags & STUDIO_TWOPASS )
|
||||
{
|
||||
mode = ( flags & STUDIO_TRANSPARENCY ) ? DBM_DRAW_TRANSLUCENT_ONLY : DBM_DRAW_OPAQUE_ONLY;
|
||||
}
|
||||
|
||||
render->DrawBrushModelEx(
|
||||
this,
|
||||
(model_t *)GetModel(),
|
||||
GetAbsOrigin(),
|
||||
GetAbsAngles(),
|
||||
mode );
|
||||
|
||||
// Draw the optional foreground model next.
|
||||
// Only use the alpha in the texture from the thing in the front.
|
||||
if (m_iBackgroundModelIndex >= 0)
|
||||
{
|
||||
render->SetBlend( 1 );
|
||||
model_t *pBackground = ( model_t * )modelinfo->GetModel( m_iBackgroundModelIndex );
|
||||
if( pBackground && modelinfo->GetModelType( pBackground ) == mod_brush )
|
||||
{
|
||||
render->DrawBrushModelEx(
|
||||
this,
|
||||
pBackground,
|
||||
GetAbsOrigin(),
|
||||
GetAbsAngles(),
|
||||
mode );
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
float C_FuncAreaPortalWindow::GetDistanceBlend()
|
||||
{
|
||||
// Get the viewer's distance to us.
|
||||
float flDist = CollisionProp()->CalcDistanceFromPoint( CurrentViewOrigin() );
|
||||
C_BasePlayer *local = C_BasePlayer::GetLocalPlayer();
|
||||
if ( local )
|
||||
{
|
||||
flDist *= local->GetFOVDistanceAdjustFactor();
|
||||
}
|
||||
|
||||
return RemapValClamped( flDist, m_flFadeStartDist, m_flFadeDist, m_flTranslucencyLimit, 1 );
|
||||
}
|
||||
|
||||
bool C_FuncAreaPortalWindow::ShouldReceiveProjectedTextures( int flags )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user