|
|
//====== Copyright � 1996-2004, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#include "cbase.h"
#include "baseentity.h"
#include "entityoutput.h"
//#include "convar.h"
#include "env_dof_controller.h"
#include "ai_utils.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
LINK_ENTITY_TO_CLASS( env_dof_controller, CEnvDOFController );
BEGIN_DATADESC( CEnvDOFController ) DEFINE_KEYFIELD( m_bDOFEnabled, FIELD_BOOLEAN, "enabled" ), DEFINE_KEYFIELD( m_flNearBlurDepth, FIELD_FLOAT, "near_blur" ), DEFINE_KEYFIELD( m_flNearFocusDepth, FIELD_FLOAT, "near_focus" ), DEFINE_KEYFIELD( m_flFarFocusDepth, FIELD_FLOAT, "far_focus" ), DEFINE_KEYFIELD( m_flFarBlurDepth, FIELD_FLOAT, "far_blur" ), DEFINE_KEYFIELD( m_flNearBlurRadius, FIELD_FLOAT, "near_radius" ), DEFINE_KEYFIELD( m_flFarBlurRadius, FIELD_FLOAT, "far_radius" ), DEFINE_KEYFIELD( m_strFocusTargetName, FIELD_STRING, "focus_target" ), DEFINE_KEYFIELD( m_flFocusTargetRange, FIELD_FLOAT, "focus_range" ), DEFINE_FIELD( m_hFocusTarget, FIELD_EHANDLE ),
DEFINE_THINKFUNC( UpdateParamBlend ),
// Inputs
DEFINE_INPUTFUNC( FIELD_FLOAT, "SetNearBlurDepth", InputSetNearBlurDepth ), DEFINE_INPUTFUNC( FIELD_FLOAT, "SetNearFocusDepth", InputSetNearFocusDepth ), DEFINE_INPUTFUNC( FIELD_FLOAT, "SetFarFocusDepth", InputSetFarFocusDepth ), DEFINE_INPUTFUNC( FIELD_FLOAT, "SetFarBlurDepth", InputSetFarBlurDepth ), DEFINE_INPUTFUNC( FIELD_FLOAT, "SetNearBlurRadius", InputSetNearBlurRadius ), DEFINE_INPUTFUNC( FIELD_FLOAT, "SetFarBlurRadius", InputSetFarBlurRadius ), DEFINE_INPUTFUNC( FIELD_STRING, "SetFocusTarget", InputSetFocusTarget ), DEFINE_INPUTFUNC( FIELD_STRING, "SetFocusTargetRange", InputSetFocusTargetRange ),
END_DATADESC()
IMPLEMENT_SERVERCLASS_ST( CEnvDOFController, DT_EnvDOFController ) SendPropInt( SENDINFO(m_bDOFEnabled), 1, SPROP_UNSIGNED ), SendPropFloat( SENDINFO(m_flNearBlurDepth), 0, SPROP_NOSCALE), SendPropFloat( SENDINFO(m_flNearFocusDepth), 0, SPROP_NOSCALE), SendPropFloat( SENDINFO(m_flFarFocusDepth), 0, SPROP_NOSCALE), SendPropFloat( SENDINFO(m_flFarBlurDepth), 0, SPROP_NOSCALE), SendPropFloat( SENDINFO(m_flNearBlurRadius), 0, SPROP_NOSCALE), SendPropFloat( SENDINFO(m_flFarBlurRadius), 0, SPROP_NOSCALE), END_SEND_TABLE()
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::Spawn( void ) { SetSolid( SOLID_NONE ); SetMoveType( MOVETYPE_NONE ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::Activate( void ) { BaseClass::Activate();
// Find our target entity and hold on to it
m_hFocusTarget = gEntList.FindEntityByName( NULL, m_strFocusTargetName );
// Update if we have a focal target
if ( m_hFocusTarget ) { SetThink( &CEnvDOFController::UpdateParamBlend ); SetNextThink( gpGlobals->curtime + 0.1f ); } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CEnvDOFController::UpdateTransmitState() { return SetTransmitState( FL_EDICT_ALWAYS ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetNearBlurDepth( inputdata_t &inputdata ) { m_flNearBlurDepth = inputdata.value.Float(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetNearFocusDepth( inputdata_t &inputdata ) { m_flNearFocusDepth = inputdata.value.Float(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetFarFocusDepth( inputdata_t &inputdata ) { m_flFarFocusDepth = inputdata.value.Float(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetFarBlurDepth( inputdata_t &inputdata ) { m_flFarBlurDepth = inputdata.value.Float(); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetNearBlurRadius( inputdata_t &inputdata ) { m_flNearBlurRadius = inputdata.value.Float(); m_bDOFEnabled = ( m_flNearBlurRadius > 0.0f ) || ( m_flFarBlurRadius > 0.0f ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetFarBlurRadius( inputdata_t &inputdata ) { m_flFarBlurRadius = inputdata.value.Float(); m_bDOFEnabled = ( m_flNearBlurRadius > 0.0f ) || ( m_flFarBlurRadius > 0.0f ); }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CEnvDOFController::SetControllerState( DOFControlSettings_t setting ) { m_flNearBlurDepth = setting.flNearBlurDepth; m_flNearBlurRadius = setting.flNearBlurRadius; m_flNearFocusDepth = setting.flNearFocusDistance; m_flFarBlurDepth = setting.flFarBlurDepth; m_flFarBlurRadius = setting.flFarBlurRadius; m_flFarFocusDepth = setting.flFarFocusDistance;
m_bDOFEnabled = ( m_flNearBlurRadius > 0.0f ) || ( m_flFarBlurRadius > 0.0f ); }
const float BLUR_DEPTH = 500.0f;
//-----------------------------------------------------------------------------
// Purpose: Blend the parameters to the specified value
//-----------------------------------------------------------------------------
void CEnvDOFController::UpdateParamBlend( void ) { // Update our focal target if we have one
if ( m_hFocusTarget ) { CBasePlayer *pPlayer = AI_GetSinglePlayer(); float flDistToFocus = ( m_hFocusTarget->GetAbsOrigin() - pPlayer->GetAbsOrigin() ).Length(); m_flFarFocusDepth.GetForModify() = flDistToFocus + m_flFocusTargetRange; m_flFarBlurDepth.GetForModify() = m_flFarFocusDepth + BLUR_DEPTH; }
SetThink( &CEnvDOFController::UpdateParamBlend ); SetNextThink( gpGlobals->curtime + 0.1f ); }
//-----------------------------------------------------------------------------
// Purpose: Set the "focus" target entity
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetFocusTarget( inputdata_t &inputdata ) { m_hFocusTarget = gEntList.FindEntityByName( NULL, inputdata.value.String() ); // Update if we have a focal target
if ( m_hFocusTarget ) { SetThink( &CEnvDOFController::UpdateParamBlend ); SetNextThink( gpGlobals->curtime + 0.1f ); } }
//-----------------------------------------------------------------------------
// Purpose: Set the range behind the focus entity that we'll blur (in units)
//-----------------------------------------------------------------------------
void CEnvDOFController::InputSetFocusTargetRange( inputdata_t &inputdata ) { m_flFocusTargetRange = inputdata.value.Float(); }
|