diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/client/c_ai_basenpc.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/client/c_ai_basenpc.cpp')
| -rw-r--r-- | mp/src/game/client/c_ai_basenpc.cpp | 348 |
1 files changed, 174 insertions, 174 deletions
diff --git a/mp/src/game/client/c_ai_basenpc.cpp b/mp/src/game/client/c_ai_basenpc.cpp index 2b59b9ca..1b1e2e65 100644 --- a/mp/src/game/client/c_ai_basenpc.cpp +++ b/mp/src/game/client/c_ai_basenpc.cpp @@ -1,174 +1,174 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-#include "cbase.h"
-#include "c_ai_basenpc.h"
-#include "engine/ivdebugoverlay.h"
-
-#if defined( HL2_DLL ) || defined( HL2_EPISODIC )
-#include "c_basehlplayer.h"
-#endif
-
-#include "death_pose.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-#define PING_MAX_TIME 2.0
-
-IMPLEMENT_CLIENTCLASS_DT( C_AI_BaseNPC, DT_AI_BaseNPC, CAI_BaseNPC )
- RecvPropInt( RECVINFO( m_lifeState ) ),
- RecvPropBool( RECVINFO( m_bPerformAvoidance ) ),
- RecvPropBool( RECVINFO( m_bIsMoving ) ),
- RecvPropBool( RECVINFO( m_bFadeCorpse ) ),
- RecvPropInt( RECVINFO ( m_iDeathPose) ),
- RecvPropInt( RECVINFO( m_iDeathFrame) ),
- RecvPropInt( RECVINFO( m_iSpeedModRadius ) ),
- RecvPropInt( RECVINFO( m_iSpeedModSpeed ) ),
- RecvPropInt( RECVINFO( m_bSpeedModActive ) ),
- RecvPropBool( RECVINFO( m_bImportanRagdoll ) ),
- RecvPropFloat( RECVINFO( m_flTimePingEffect ) ),
-END_RECV_TABLE()
-
-extern ConVar cl_npc_speedmod_intime;
-
-bool NPC_IsImportantNPC( C_BaseAnimating *pAnimating )
-{
- C_AI_BaseNPC *pBaseNPC = dynamic_cast < C_AI_BaseNPC* > ( pAnimating );
-
- if ( pBaseNPC == NULL )
- return false;
-
- return pBaseNPC->ImportantRagdoll();
-}
-
-C_AI_BaseNPC::C_AI_BaseNPC()
-{
-}
-
-//-----------------------------------------------------------------------------
-// Makes ragdolls ignore npcclip brushes
-//-----------------------------------------------------------------------------
-unsigned int C_AI_BaseNPC::PhysicsSolidMaskForEntity( void ) const
-{
- // This allows ragdolls to move through npcclip brushes
- if ( !IsRagdoll() )
- {
- return MASK_NPCSOLID;
- }
- return MASK_SOLID;
-}
-
-
-void C_AI_BaseNPC::ClientThink( void )
-{
- BaseClass::ClientThink();
-
-#ifdef HL2_DLL
- C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer*>( C_BasePlayer::GetLocalPlayer() );
-
- if ( ShouldModifyPlayerSpeed() == true )
- {
- if ( pPlayer )
- {
- float flDist = (GetAbsOrigin() - pPlayer->GetAbsOrigin()).LengthSqr();
-
- if ( flDist <= GetSpeedModifyRadius() )
- {
- if ( pPlayer->m_hClosestNPC )
- {
- if ( pPlayer->m_hClosestNPC != this )
- {
- float flDistOther = (pPlayer->m_hClosestNPC->GetAbsOrigin() - pPlayer->GetAbsOrigin()).Length();
-
- //If I'm closer than the other NPC then replace it with myself.
- if ( flDist < flDistOther )
- {
- pPlayer->m_hClosestNPC = this;
- pPlayer->m_flSpeedModTime = gpGlobals->curtime + cl_npc_speedmod_intime.GetFloat();
- }
- }
- }
- else
- {
- pPlayer->m_hClosestNPC = this;
- pPlayer->m_flSpeedModTime = gpGlobals->curtime + cl_npc_speedmod_intime.GetFloat();
- }
- }
- }
- }
-#endif // HL2_DLL
-
-#ifdef HL2_EPISODIC
- C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer*>( C_BasePlayer::GetLocalPlayer() );
-
- if ( pPlayer && m_flTimePingEffect > gpGlobals->curtime )
- {
- float fPingEffectTime = m_flTimePingEffect - gpGlobals->curtime;
-
- if ( fPingEffectTime > 0.0f )
- {
- Vector vRight, vUp;
- Vector vMins, vMaxs;
-
- float fFade;
-
- if( fPingEffectTime <= 1.0f )
- {
- fFade = 1.0f - (1.0f - fPingEffectTime);
- }
- else
- {
- fFade = 1.0f;
- }
-
- GetRenderBounds( vMins, vMaxs );
- AngleVectors (pPlayer->GetAbsAngles(), NULL, &vRight, &vUp );
- Vector p1 = GetAbsOrigin() + vRight * vMins.x + vUp * vMins.z;
- Vector p2 = GetAbsOrigin() + vRight * vMaxs.x + vUp * vMins.z;
- Vector p3 = GetAbsOrigin() + vUp * vMaxs.z;
-
- int r = 0 * fFade;
- int g = 255 * fFade;
- int b = 0 * fFade;
-
- debugoverlay->AddLineOverlay( p1, p2, r, g, b, true, 0.05f );
- debugoverlay->AddLineOverlay( p2, p3, r, g, b, true, 0.05f );
- debugoverlay->AddLineOverlay( p3, p1, r, g, b, true, 0.05f );
- }
- }
-#endif
-}
-
-void C_AI_BaseNPC::OnDataChanged( DataUpdateType_t type )
-{
- BaseClass::OnDataChanged( type );
-
- if ( ( ShouldModifyPlayerSpeed() == true ) || ( m_flTimePingEffect > gpGlobals->curtime ) )
- {
- SetNextClientThink( CLIENT_THINK_ALWAYS );
- }
-}
-
-void C_AI_BaseNPC::GetRagdollInitBoneArrays( matrix3x4_t *pDeltaBones0, matrix3x4_t *pDeltaBones1, matrix3x4_t *pCurrentBones, float boneDt )
-{
- ForceSetupBonesAtTime( pDeltaBones0, gpGlobals->curtime - boneDt );
- GetRagdollCurSequenceWithDeathPose( this, pDeltaBones1, gpGlobals->curtime, m_iDeathPose, m_iDeathFrame );
- float ragdollCreateTime = PhysGetSyncCreateTime();
- if ( ragdollCreateTime != gpGlobals->curtime )
- {
- // The next simulation frame begins before the end of this frame
- // so initialize the ragdoll at that time so that it will reach the current
- // position at curtime. Otherwise the ragdoll will simulate forward from curtime
- // and pop into the future a bit at this point of transition
- ForceSetupBonesAtTime( pCurrentBones, ragdollCreateTime );
- }
- else
- {
- SetupBones( pCurrentBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, gpGlobals->curtime );
- }
-}
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "c_ai_basenpc.h" +#include "engine/ivdebugoverlay.h" + +#if defined( HL2_DLL ) || defined( HL2_EPISODIC ) +#include "c_basehlplayer.h" +#endif + +#include "death_pose.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define PING_MAX_TIME 2.0 + +IMPLEMENT_CLIENTCLASS_DT( C_AI_BaseNPC, DT_AI_BaseNPC, CAI_BaseNPC ) + RecvPropInt( RECVINFO( m_lifeState ) ), + RecvPropBool( RECVINFO( m_bPerformAvoidance ) ), + RecvPropBool( RECVINFO( m_bIsMoving ) ), + RecvPropBool( RECVINFO( m_bFadeCorpse ) ), + RecvPropInt( RECVINFO ( m_iDeathPose) ), + RecvPropInt( RECVINFO( m_iDeathFrame) ), + RecvPropInt( RECVINFO( m_iSpeedModRadius ) ), + RecvPropInt( RECVINFO( m_iSpeedModSpeed ) ), + RecvPropInt( RECVINFO( m_bSpeedModActive ) ), + RecvPropBool( RECVINFO( m_bImportanRagdoll ) ), + RecvPropFloat( RECVINFO( m_flTimePingEffect ) ), +END_RECV_TABLE() + +extern ConVar cl_npc_speedmod_intime; + +bool NPC_IsImportantNPC( C_BaseAnimating *pAnimating ) +{ + C_AI_BaseNPC *pBaseNPC = dynamic_cast < C_AI_BaseNPC* > ( pAnimating ); + + if ( pBaseNPC == NULL ) + return false; + + return pBaseNPC->ImportantRagdoll(); +} + +C_AI_BaseNPC::C_AI_BaseNPC() +{ +} + +//----------------------------------------------------------------------------- +// Makes ragdolls ignore npcclip brushes +//----------------------------------------------------------------------------- +unsigned int C_AI_BaseNPC::PhysicsSolidMaskForEntity( void ) const +{ + // This allows ragdolls to move through npcclip brushes + if ( !IsRagdoll() ) + { + return MASK_NPCSOLID; + } + return MASK_SOLID; +} + + +void C_AI_BaseNPC::ClientThink( void ) +{ + BaseClass::ClientThink(); + +#ifdef HL2_DLL + C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer*>( C_BasePlayer::GetLocalPlayer() ); + + if ( ShouldModifyPlayerSpeed() == true ) + { + if ( pPlayer ) + { + float flDist = (GetAbsOrigin() - pPlayer->GetAbsOrigin()).LengthSqr(); + + if ( flDist <= GetSpeedModifyRadius() ) + { + if ( pPlayer->m_hClosestNPC ) + { + if ( pPlayer->m_hClosestNPC != this ) + { + float flDistOther = (pPlayer->m_hClosestNPC->GetAbsOrigin() - pPlayer->GetAbsOrigin()).Length(); + + //If I'm closer than the other NPC then replace it with myself. + if ( flDist < flDistOther ) + { + pPlayer->m_hClosestNPC = this; + pPlayer->m_flSpeedModTime = gpGlobals->curtime + cl_npc_speedmod_intime.GetFloat(); + } + } + } + else + { + pPlayer->m_hClosestNPC = this; + pPlayer->m_flSpeedModTime = gpGlobals->curtime + cl_npc_speedmod_intime.GetFloat(); + } + } + } + } +#endif // HL2_DLL + +#ifdef HL2_EPISODIC + C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer*>( C_BasePlayer::GetLocalPlayer() ); + + if ( pPlayer && m_flTimePingEffect > gpGlobals->curtime ) + { + float fPingEffectTime = m_flTimePingEffect - gpGlobals->curtime; + + if ( fPingEffectTime > 0.0f ) + { + Vector vRight, vUp; + Vector vMins, vMaxs; + + float fFade; + + if( fPingEffectTime <= 1.0f ) + { + fFade = 1.0f - (1.0f - fPingEffectTime); + } + else + { + fFade = 1.0f; + } + + GetRenderBounds( vMins, vMaxs ); + AngleVectors (pPlayer->GetAbsAngles(), NULL, &vRight, &vUp ); + Vector p1 = GetAbsOrigin() + vRight * vMins.x + vUp * vMins.z; + Vector p2 = GetAbsOrigin() + vRight * vMaxs.x + vUp * vMins.z; + Vector p3 = GetAbsOrigin() + vUp * vMaxs.z; + + int r = 0 * fFade; + int g = 255 * fFade; + int b = 0 * fFade; + + debugoverlay->AddLineOverlay( p1, p2, r, g, b, true, 0.05f ); + debugoverlay->AddLineOverlay( p2, p3, r, g, b, true, 0.05f ); + debugoverlay->AddLineOverlay( p3, p1, r, g, b, true, 0.05f ); + } + } +#endif +} + +void C_AI_BaseNPC::OnDataChanged( DataUpdateType_t type ) +{ + BaseClass::OnDataChanged( type ); + + if ( ( ShouldModifyPlayerSpeed() == true ) || ( m_flTimePingEffect > gpGlobals->curtime ) ) + { + SetNextClientThink( CLIENT_THINK_ALWAYS ); + } +} + +void C_AI_BaseNPC::GetRagdollInitBoneArrays( matrix3x4_t *pDeltaBones0, matrix3x4_t *pDeltaBones1, matrix3x4_t *pCurrentBones, float boneDt ) +{ + ForceSetupBonesAtTime( pDeltaBones0, gpGlobals->curtime - boneDt ); + GetRagdollCurSequenceWithDeathPose( this, pDeltaBones1, gpGlobals->curtime, m_iDeathPose, m_iDeathFrame ); + float ragdollCreateTime = PhysGetSyncCreateTime(); + if ( ragdollCreateTime != gpGlobals->curtime ) + { + // The next simulation frame begins before the end of this frame + // so initialize the ragdoll at that time so that it will reach the current + // position at curtime. Otherwise the ragdoll will simulate forward from curtime + // and pop into the future a bit at this point of transition + ForceSetupBonesAtTime( pCurrentBones, ragdollCreateTime ); + } + else + { + SetupBones( pCurrentBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, gpGlobals->curtime ); + } +} + |