summaryrefslogtreecommitdiff
path: root/game/client/hl1/c_hl1mp_player.h
blob: 1d47850eb21a9ee530a4008ea10ff50b92efb20d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef HL1MP_PLAYER_H
#define HL1MP_PLAYER_H
#pragma once

#include "cbase.h"
#include "hl1_c_player.h"
#include "hl1_player_shared.h"


class C_HL1MP_Player : public C_HL1_Player
{
public:
    DECLARE_CLASS( C_HL1MP_Player, C_HL1_Player );
    DECLARE_CLIENTCLASS();
    DECLARE_PREDICTABLE();
    DECLARE_INTERPOLATION();

    C_HL1MP_Player( void );
	~C_HL1MP_Player();

	virtual const QAngle& GetRenderAngles();
	virtual void UpdateClientSideAnimation();
	virtual void ProcessMuzzleFlashEvent();

	void DoAnimationEvent( PlayerAnimEvent_t event, int nData = 0 );

	virtual bool ShouldPredict( void );
	virtual void CalcView( Vector &eyeOrigin, QAngle &eyeAngles, float &zNear, float &zFar, float &fov );
	IRagdoll* GetRepresentativeRagdoll() const;

    virtual void Spawn( void );
	virtual void AddEntity( void );
	virtual bool ShouldDraw( void );
	virtual void OnDataChanged( DataUpdateType_t type );
	virtual void PostDataUpdate( DataUpdateType_t updateType );
    virtual void ClientThink( void );
	virtual C_BaseAnimating *BecomeRagdollOnClient();    
    //QAngle GetAnimEyeAngles( void ) { return m_angEyeAngles; }
	const QAngle& EyeAngles( void )
	{
		if ( IsLocalPlayer() )
		{
			return BaseClass::EyeAngles();
		}
		else
		{
			return m_angEyeAngles;
		}
	}

	virtual ShadowType_t ShadowCastType()
	{
		if ( !IsVisible() )
			 return SHADOWS_NONE;
	
		return SHADOWS_RENDER_TO_TEXTURE_DYNAMIC;
	}

	void PreThink( void );

	int	m_iRealSequence;

private:
	C_HL1MP_Player( const C_HL1MP_Player & );

    EHANDLE m_hRagdoll;

    QAngle m_angEyeAngles;

	CInterpolatedVar< QAngle >	m_iv_angEyeAngles;

    IHL1MPPlayerAnimState* m_PlayerAnimState;
    
    int m_iSpawnInterpCounter;
    int m_iSpawnInterpCounterCache;

	float m_fLastPredFreeze;
};


class C_HL1MPRagdoll : public C_BaseAnimatingOverlay
{
public:
	DECLARE_CLASS( C_HL1MPRagdoll, C_BaseAnimatingOverlay );
	DECLARE_CLIENTCLASS();
	
	C_HL1MPRagdoll();
	~C_HL1MPRagdoll();

	virtual void OnDataChanged( DataUpdateType_t type );

	int GetPlayerEntIndex() const;
	IRagdoll* GetIRagdoll() const;

	void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName );
	void UpdateOnRemove( void );
	virtual void SetupWeights( const matrix3x4_t *pBoneToWorld, int nFlexWeightCount, float *pFlexWeights, float *pFlexDelayedWeights );
	
private:
	
	C_HL1MPRagdoll( const C_HL1MPRagdoll & ) {}

	void Interp_Copy( C_BaseAnimatingOverlay *pSourceEntity );
	void CreateHL1MPRagdoll( void );

private:

	EHANDLE	m_hPlayer;
	CNetworkVector( m_vecRagdollVelocity );
	CNetworkVector( m_vecRagdollOrigin );
};


inline C_HL1MP_Player *ToHL1MPPlayer( CBaseEntity *pEntity )
{
	if ( !pEntity || !pEntity->IsPlayer() )
		return NULL;

	return dynamic_cast<C_HL1MP_Player*>( pEntity );
}



#endif