Expand CInput class and add VerifyUserCmd to CUserCmd.
Signed-off-by: aixxe <me@aixxe.net>
This commit is contained in:
parent
3b12e00ad1
commit
13f8d44aa7
|
@ -1,10 +1,111 @@
|
|||
#pragma once
|
||||
|
||||
#define MAX_SPLITSCREEN_PLAYERS 1
|
||||
|
||||
enum MouseParams: int {
|
||||
MOUSE_ACCEL_THRESHHOLD1 = 0,
|
||||
MOUSE_ACCEL_THRESHHOLD2,
|
||||
MOUSE_SPEED_FACTOR,
|
||||
NUM_MOUSE_PARAMS
|
||||
};
|
||||
|
||||
enum JoystickAxis_t {
|
||||
JOY_AXIS_X = 0,
|
||||
JOY_AXIS_Y,
|
||||
JOY_AXIS_Z,
|
||||
JOY_AXIS_R,
|
||||
JOY_AXIS_U,
|
||||
JOY_AXIS_V,
|
||||
MAX_JOYSTICK_AXES,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
unsigned int AxisFlags;
|
||||
unsigned int AxisMap;
|
||||
unsigned int ControlMap;
|
||||
} joy_axis_t;
|
||||
|
||||
struct Split_t {
|
||||
int m_nDown[2];
|
||||
int m_nState;
|
||||
};
|
||||
|
||||
struct kbutton_t {
|
||||
Split_t m_PerUser[MAX_SPLITSCREEN_PLAYERS];
|
||||
};
|
||||
|
||||
class CKeyboardKey {
|
||||
public:
|
||||
char m_szName[32];
|
||||
kbutton_t* m_pKey;
|
||||
CKeyboardKey* m_pNext;
|
||||
};
|
||||
|
||||
class CUserCmd;
|
||||
class CVerifiedUserCmd;
|
||||
|
||||
class CInput {
|
||||
private:
|
||||
virtual ~CInput(void) {};
|
||||
public:
|
||||
CUserCmd* GetUserCmd(int index) {
|
||||
return GetVirtualFunction<CUserCmd*(*)(CInput*, int)>(this, 8)(this, index);
|
||||
bool m_fMouseInitialized;
|
||||
bool m_fMouseActive;
|
||||
bool m_fJoystickAdvancedInit;
|
||||
bool m_fHadJoysticks;
|
||||
|
||||
float m_flAccumulatedMouseXMovement;
|
||||
float m_flAccumulatedMouseYMovement;
|
||||
float m_flPreviousMouseXPosition;
|
||||
float m_flPreviousMouseYPosition;
|
||||
float m_flRemainingJoystickSampleTime;
|
||||
float m_flKeyboardSampleTime;
|
||||
|
||||
bool m_fRestoreSPI;
|
||||
int m_rgOrigMouseParms[NUM_MOUSE_PARAMS];
|
||||
int m_rgNewMouseParms[NUM_MOUSE_PARAMS];
|
||||
bool m_rgCheckMouseParam[NUM_MOUSE_PARAMS];
|
||||
bool m_fMouseParmsValid;
|
||||
|
||||
joy_axis_t m_rgAxes[MAX_JOYSTICK_AXES];
|
||||
CKeyboardKey* m_pKeys;
|
||||
|
||||
bool m_fCameraInterceptingMouse;
|
||||
bool m_fCameraInThirdPerson;
|
||||
bool m_fCameraMovingWithMouse;
|
||||
|
||||
bool m_fCameraDistanceMove;
|
||||
|
||||
int m_nCameraOldX;
|
||||
int m_nCameraOldY;
|
||||
int m_nCameraX;
|
||||
int m_nCameraY;
|
||||
|
||||
bool m_CameraIsOrthographic;
|
||||
|
||||
QAngle m_angPreviousViewAngles;
|
||||
|
||||
float m_flLastForwardMove;
|
||||
|
||||
float m_flPreviousJoystickForward;
|
||||
float m_flPreviousJoystickSide;
|
||||
float m_flPreviousJoystickPitch;
|
||||
float m_flPreviousJoystickYaw;
|
||||
|
||||
CUserCmd* m_pCommands;
|
||||
CVerifiedUserCmd* m_pVerifiedCommands;
|
||||
|
||||
inline CUserCmd* GetUserCmd(int sequence) {
|
||||
return &this->m_pCommands[sequence % MULTIPLAYER_BACKUP];
|
||||
}
|
||||
|
||||
inline CVerifiedUserCmd* GetVerifiedUserCmd(int sequence) {
|
||||
return &this->m_pVerifiedCommands[sequence % MULTIPLAYER_BACKUP];
|
||||
}
|
||||
|
||||
inline void VerifyUserCmd(CUserCmd* cmd, int sequence) {
|
||||
CVerifiedUserCmd* cmd_verified = this->GetVerifiedUserCmd(sequence);
|
||||
|
||||
cmd_verified->m_cmd = *cmd;
|
||||
cmd_verified->m_crc = cmd->GetChecksum();
|
||||
}
|
||||
};
|
|
@ -18,6 +18,30 @@ class CUserCmd {
|
|||
short mousedx;
|
||||
short mousedy;
|
||||
bool hasbeenpredicted;
|
||||
|
||||
inline CRC32_t GetChecksum() {
|
||||
CRC32_t crc;
|
||||
|
||||
CRC32_Init(&crc);
|
||||
|
||||
CRC32_ProcessBuffer(&crc, &this->command_number, sizeof(this->command_number));
|
||||
CRC32_ProcessBuffer(&crc, &this->tick_count, sizeof(this->tick_count));
|
||||
CRC32_ProcessBuffer(&crc, &this->viewangles, sizeof(this->viewangles));
|
||||
CRC32_ProcessBuffer(&crc, &this->forwardmove, sizeof(this->forwardmove));
|
||||
CRC32_ProcessBuffer(&crc, &this->sidemove, sizeof(this->sidemove));
|
||||
CRC32_ProcessBuffer(&crc, &this->upmove, sizeof(this->upmove));
|
||||
CRC32_ProcessBuffer(&crc, &this->buttons, sizeof(this->buttons));
|
||||
CRC32_ProcessBuffer(&crc, &this->impulse, sizeof(this->impulse));
|
||||
CRC32_ProcessBuffer(&crc, &this->weaponselect, sizeof(this->weaponselect));
|
||||
CRC32_ProcessBuffer(&crc, &this->weaponsubtype, sizeof(this->weaponsubtype));
|
||||
CRC32_ProcessBuffer(&crc, &this->random_seed, sizeof(this->random_seed));
|
||||
CRC32_ProcessBuffer(&crc, &this->mousedx, sizeof(this->mousedx));
|
||||
CRC32_ProcessBuffer(&crc, &this->mousedy, sizeof(this->mousedy));
|
||||
|
||||
CRC32_Final(&crc);
|
||||
|
||||
return crc;
|
||||
}
|
||||
};
|
||||
|
||||
class CVerifiedUserCmd {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#define MULTIPLAYER_BACKUP 90
|
||||
|
||||
#define SIGNED_GUID_LEN 32
|
||||
|
||||
#define MAX_PLAYER_NAME_LENGTH 32
|
||||
|
|
Loading…
Reference in New Issue