source-engine/game/shared/dod/dod_player_shared.h
2022-04-16 12:05:19 +03:00

286 lines
6.3 KiB
C++

//========= 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