blob: e5c9d239a055e347a943ee5b9c66d0f9200e91bf (
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
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
// $NoKeywords: $
//=============================================================================//
#if !defined( IGAMEMOVEMENT_H )
#define IGAMEMOVEMENT_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/vector.h"
#include "interface.h"
#include "imovehelper.h"
#include "const.h"
//-----------------------------------------------------------------------------
// Name of the class implementing the game movement.
//-----------------------------------------------------------------------------
#define INTERFACENAME_GAMEMOVEMENT "GameMovement001"
//-----------------------------------------------------------------------------
// Forward declarations.
//-----------------------------------------------------------------------------
class IMoveHelper;
//-----------------------------------------------------------------------------
// Purpose: Encapsulated input parameters to player movement.
//-----------------------------------------------------------------------------
class CMoveData
{
public:
bool m_bFirstRunOfFunctions : 1;
bool m_bGameCodeMovedPlayer : 1;
EntityHandle_t m_nPlayerHandle; // edict index on server, client entity handle on client
int m_nImpulseCommand; // Impulse command issued.
QAngle m_vecViewAngles; // Command view angles (local space)
QAngle m_vecAbsViewAngles; // Command view angles (world space)
int m_nButtons; // Attack buttons.
int m_nOldButtons; // From host_client->oldbuttons;
float m_flForwardMove;
float m_flOldForwardMove;
float m_flSideMove;
float m_flUpMove;
float m_flMaxSpeed;
float m_flClientMaxSpeed;
// Variables from the player edict (sv_player) or entvars on the client.
// These are copied in here before calling and copied out after calling.
Vector m_vecVelocity; // edict::velocity // Current movement direction.
QAngle m_vecAngles; // edict::angles
QAngle m_vecOldAngles;
// Output only
float m_outStepHeight; // how much you climbed this move
Vector m_outWishVel; // This is where you tried
Vector m_outJumpVel; // This is your jump velocity
// Movement constraints (radius 0 means no constraint)
Vector m_vecConstraintCenter;
float m_flConstraintRadius;
float m_flConstraintWidth;
float m_flConstraintSpeedFactor;
void SetAbsOrigin( const Vector &vec );
const Vector &GetAbsOrigin() const;
private:
Vector m_vecAbsOrigin; // edict::origin
};
inline const Vector &CMoveData::GetAbsOrigin() const
{
return m_vecAbsOrigin;
}
#if !defined( CLIENT_DLL ) && defined( _DEBUG )
// We only ever want this code path on the server side in a debug build
// and you have to uncomment the code below and rebuild to have the test operate.
//#define PLAYER_GETTING_STUCK_TESTING
#endif
#if !defined( PLAYER_GETTING_STUCK_TESTING )
// This is implemented with a more exhaustive test in gamemovement.cpp. We check if the origin being requested is
// inside solid, which it never should be
inline void CMoveData::SetAbsOrigin( const Vector &vec )
{
m_vecAbsOrigin = vec;
}
#endif
//-----------------------------------------------------------------------------
// Purpose: The basic player movement interface
//-----------------------------------------------------------------------------
abstract_class IGameMovement
{
public:
virtual ~IGameMovement( void ) {}
// Process the current movement command
virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMove ) = 0;
virtual void StartTrackPredictionErrors( CBasePlayer *pPlayer ) = 0;
virtual void FinishTrackPredictionErrors( CBasePlayer *pPlayer ) = 0;
virtual void DiffPrint( PRINTF_FORMAT_STRING char const *fmt, ... ) = 0;
// Allows other parts of the engine to find out the normal and ducked player bbox sizes
virtual Vector GetPlayerMins( bool ducked ) const = 0;
virtual Vector GetPlayerMaxs( bool ducked ) const = 0;
virtual Vector GetPlayerViewOffset( bool ducked ) const = 0;
};
#endif // IGAMEMOVEMENT_H
|