summaryrefslogtreecommitdiff
path: root/game/shared/dod/dod_player_shared.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/dod/dod_player_shared.h')
-rw-r--r--game/shared/dod/dod_player_shared.h285
1 files changed, 285 insertions, 0 deletions
diff --git a/game/shared/dod/dod_player_shared.h b/game/shared/dod/dod_player_shared.h
new file mode 100644
index 0000000..9d982d3
--- /dev/null
+++ b/game/shared/dod/dod_player_shared.h
@@ -0,0 +1,285 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef DOD_PLAYER_SHARED_H
+#define DOD_PLAYER_SHARED_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "networkvar.h"
+#include "weapon_dodbase.h"
+
+
+#ifdef CLIENT_DLL
+ class C_DODPlayer;
+#else
+ class CDODPlayer;
+#endif
+
+// Entity Messages
+#define DOD_PLAYER_POP_HELMET 1
+#define DOD_PLAYER_REMOVE_DECALS 2
+
+class CViewOffsetAnimation
+{
+public:
+ CViewOffsetAnimation( CBasePlayer *pPlayer )
+ {
+ m_pPlayer = pPlayer;
+ m_vecStart = vec3_origin;
+ m_vecDest = vec3_origin;
+ m_flLength = 0.0;
+ m_flEndTime = 0.0;
+ m_eViewAnimType = VIEW_ANIM_LINEAR_Z_ONLY;
+ m_bActive = false;
+ }
+
+ static CViewOffsetAnimation *CreateViewOffsetAnim( CBasePlayer *pPlayer )
+ {
+ CViewOffsetAnimation *p = new CViewOffsetAnimation( pPlayer );
+
+ Assert( p );
+
+ return p;
+ }
+
+ void StartAnimation( Vector vecStart, Vector vecDest, float flTime, ViewAnimationType type )
+ {
+ m_vecStart = vecStart;
+ m_vecDest = vecDest;
+ m_flLength = flTime;
+ m_flEndTime = gpGlobals->curtime + flTime;
+ m_eViewAnimType = type;
+ m_bActive = true;
+ }
+
+ void Reset( void )
+ {
+ m_bActive = false;
+ }
+
+ void Think( void )
+ {
+ if ( !m_bActive )
+ return;
+
+ if ( IsFinished() )
+ {
+ m_bActive = false;
+ return;
+ }
+
+ float flFraction = ( m_flEndTime - gpGlobals->curtime ) / m_flLength;
+
+ Assert( m_pPlayer );
+
+ if ( m_pPlayer )
+ {
+ Vector vecCurrentView = m_pPlayer->GetViewOffset();
+
+ switch ( m_eViewAnimType )
+ {
+ case VIEW_ANIM_LINEAR_Z_ONLY:
+ vecCurrentView.z = flFraction * m_vecStart.z + ( 1.0 - flFraction ) * m_vecDest.z;
+ break;
+
+ case VIEW_ANIM_SPLINE_Z_ONLY:
+ vecCurrentView.z = SimpleSplineRemapVal( flFraction, 1.0, 0.0, m_vecStart.z, m_vecDest.z );
+ break;
+
+ case VIEW_ANIM_EXPONENTIAL_Z_ONLY:
+ {
+ float flBias = Bias( flFraction, 0.2 );
+ vecCurrentView.z = flBias * m_vecStart.z + ( 1.0 - flBias ) * m_vecDest.z;
+ }
+ break;
+ }
+
+ m_pPlayer->SetViewOffset( vecCurrentView );
+ }
+ }
+
+ bool IsFinished( void )
+ {
+ return ( gpGlobals->curtime > m_flEndTime || m_pPlayer == NULL );
+ }
+
+private:
+ CBasePlayer *m_pPlayer;
+ Vector m_vecStart;
+ Vector m_vecDest;
+ float m_flEndTime;
+ float m_flLength;
+ ViewAnimationType m_eViewAnimType;
+ bool m_bActive;
+};
+
+
+// Data in the DoD player that is accessed by shared code.
+// This data isn't necessarily transmitted between client and server.
+class CDODPlayerShared
+{
+public:
+
+#ifdef CLIENT_DLL
+ friend class C_DODPlayer;
+ typedef C_DODPlayer OuterClass;
+ DECLARE_PREDICTABLE();
+#else
+ friend class CDODPlayer;
+ typedef CDODPlayer OuterClass;
+#endif
+
+ DECLARE_EMBEDDED_NETWORKVAR()
+ DECLARE_CLASS_NOBASE( CDODPlayerShared );
+
+
+ CDODPlayerShared();
+ ~CDODPlayerShared();
+
+ void SetStamina( float stamina );
+ float GetStamina( void ) { return m_flStamina; }
+
+ void Init( OuterClass *pOuter );
+
+ bool IsProne() const;
+ bool IsGettingUpFromProne() const;
+ bool IsGoingProne() const;
+ void SetProne( bool bProne, bool bNoAnimation = false );
+
+ bool IsBazookaDeployed( void ) const;
+ bool IsBazookaOnlyDeployed( void ) const;
+ bool IsSniperZoomed( void ) const;
+ bool IsInMGDeploy( void ) const;
+ bool IsProneDeployed( void ) const;
+ bool IsSandbagDeployed( void ) const;
+ bool IsDucking( void ) const;
+
+ void SetDesiredPlayerClass( int playerclass );
+ int DesiredPlayerClass( void );
+
+ void SetPlayerClass( int playerclass );
+ int PlayerClass( void );
+
+ CWeaponDODBase* GetActiveDODWeapon() const;
+
+ void SetDeployed( bool bDeployed, float flHeight = -1 );
+
+ QAngle GetDeployedAngles( void ) const;
+ float GetDeployedHeight( void ) const;
+
+ void SetDeployedYawLimits( float flLeftYaw, float flRightYaw );
+ void ClampDeployedAngles( QAngle *vecTestAngles );
+
+ void SetSlowedTime( float t );
+ float GetSlowedTime( void ) const;
+
+ void StartGoingProne( void );
+ void StandUpFromProne( void );
+
+ bool CanChangePosition( void );
+
+ bool IsJumping( void ) { return m_bJumping; }
+ void SetJumping( bool bJumping );
+
+ bool IsSprinting( void ) { return m_bIsSprinting; }
+
+ void ForceUnzoom( void );
+
+ void SetSprinting( bool bSprinting );
+ void StartSprinting( void );
+ void StopSprinting( void );
+
+ void SetCPIndex( int index );
+ int GetCPIndex( void ) { return m_iCPIndex; }
+
+ void SetLastViewAnimTime( float flTime );
+ float GetLastViewAnimTime( void );
+
+ void ViewAnimThink( void );
+
+ void ResetViewOffsetAnimation( void );
+ void ViewOffsetAnimation( Vector vecDest, float flTime, ViewAnimationType type );
+
+ void ResetSprintPenalty( void );
+
+ void SetPlanting( bool bPlanting )
+ {
+ m_bPlanting = bPlanting;
+ }
+
+ bool IsPlanting( void ) { return m_bPlanting; }
+
+ void SetDefusing( bool bDefusing )
+ {
+ m_bDefusing = bDefusing;
+ }
+
+ bool IsDefusing( void ) { return m_bDefusing; }
+
+ void ComputeWorldSpaceSurroundingBox( Vector *pVecWorldMins, Vector *pVecWorldMaxs );
+
+ void SetPlayerDominated( CDODPlayer *pPlayer, bool bDominated );
+ bool IsPlayerDominated( int iPlayerIndex );
+ bool IsPlayerDominatingMe( int iPlayerIndex );
+ void SetPlayerDominatingMe( CDODPlayer *pPlayer, bool bDominated );
+
+private:
+
+ CNetworkVar( bool, m_bProne );
+
+ CNetworkVar( int, m_iPlayerClass );
+ CNetworkVar( int, m_iDesiredPlayerClass );
+
+ CNetworkVar( float, m_flStamina );
+
+ CNetworkVar( float, m_flSlowedUntilTime );
+
+ CNetworkVar( bool, m_bIsSprinting );
+
+ CNetworkVar( float, m_flDeployedYawLimitLeft );
+ CNetworkVar( float, m_flDeployedYawLimitRight );
+
+ CNetworkVar( bool, m_bPlanting );
+ CNetworkVar( bool, m_bDefusing );
+
+ bool m_bGaveSprintPenalty;
+
+public:
+ float m_flNextProneCheck; // Prevent it switching their prone state constantly.
+
+ QAngle m_vecDeployedAngles;
+ //float m_flDeployedHeight;
+ CNetworkVar( float, m_flDeployedHeight );
+
+ CNetworkVar( float, m_flUnProneTime );
+ CNetworkVar( float, m_flGoProneTime );
+
+ CNetworkVar( float, m_flDeployChangeTime );
+
+ CNetworkVar( bool, m_bForceProneChange );
+
+ CNetworkVar( int, m_iCPIndex );
+
+ bool m_bJumping;
+
+ float m_flLastViewAnimationTime;
+
+ CViewOffsetAnimation *m_pViewOffsetAnim;
+
+ CNetworkArray( bool, m_bPlayerDominated, MAX_PLAYERS+1 ); // array of state per other player whether player is dominating other players
+ CNetworkArray( bool, m_bPlayerDominatingMe, MAX_PLAYERS+1 ); // array of state per other player whether other players are dominating this player
+
+private:
+
+ OuterClass *m_pOuter;
+};
+
+
+
+#endif // DOD_PLAYER_SHARED_H