273 lines
6.2 KiB
C++
273 lines
6.2 KiB
C++
#ifndef _CL_DATA_H_
|
|
#define _CL_DATA_H_
|
|
|
|
//#include "../cgame/cg_local.h"
|
|
//#include "../game/g_shared.h"
|
|
//#include "../game/g_local.h"
|
|
#include "client.h"
|
|
#include "cl_input_hotswap.h"
|
|
|
|
#include "../win32/win_input.h"
|
|
|
|
#include <vector>
|
|
#define MAX_CMD_BUFFER 4096
|
|
#define MAX_LOOPBACK 16
|
|
|
|
#define MAX_QUED_EVENTS 256
|
|
#define MASK_QUED_EVENTS ( MAX_QUED_EVENTS - 1 )
|
|
#define STRING_SIZE 64
|
|
|
|
|
|
typedef struct {
|
|
byte data[1359];
|
|
int datalen;
|
|
} loopmsg_t;
|
|
|
|
typedef struct {
|
|
loopmsg_t msgs[MAX_LOOPBACK];
|
|
int get, send;
|
|
} loopback_t;
|
|
|
|
#define CM_START_LOOP() ClientManager::StartIt(); do {
|
|
#define CM_END_LOOP() } while (ClientManager::NextIt());
|
|
|
|
|
|
#define IN_MAX_JOYSTICKS 2
|
|
|
|
class ClientData
|
|
{
|
|
public:
|
|
ClientData();
|
|
~ClientData();
|
|
|
|
public:
|
|
connstate_t state; // connection status
|
|
|
|
// clientActive_t mv_cl;
|
|
clientActive_t* m_cl;
|
|
|
|
clientConnection_t mv_clc;
|
|
clientConnection_t *m_clc;
|
|
|
|
cg_t mv_cg;
|
|
cg_t *m_cg;
|
|
|
|
// Button Data
|
|
kbutton_t in_left, in_right, in_forward, in_back;
|
|
kbutton_t in_lookup, in_lookdown, in_moveleft, in_moveright;
|
|
kbutton_t in_strafe, in_speed;
|
|
kbutton_t in_up, in_down;
|
|
kbutton_t in_buttons[16];
|
|
qboolean in_mlooking;
|
|
|
|
// Hot-swap button data
|
|
HotSwapManager swapMan1;
|
|
HotSwapManager swapMan2;
|
|
|
|
// Command Text Data
|
|
int cmd_wait;
|
|
msg_t cmd_text;
|
|
byte cmd_text_buf[MAX_CMD_BUFFER];
|
|
char cmd_defer_text_buf[MAX_CMD_BUFFER];
|
|
|
|
// NET stuff
|
|
loopback_t *loopbacks;
|
|
|
|
// event stuff
|
|
sysEvent_t eventQue[MAX_QUED_EVENTS];
|
|
int eventHead, eventTail;
|
|
|
|
// key stuff
|
|
qboolean key_overstrikeMode;
|
|
qboolean anykeydown;
|
|
qkey_t keys[MAX_KEYS];
|
|
|
|
// Used for autolevel
|
|
unsigned long lastFireTime;
|
|
// Used for taunting
|
|
unsigned long voiceTogglePressTime;
|
|
|
|
// controller stuff
|
|
int controller;
|
|
|
|
JoystickInfo joyInfo[IN_MAX_JOYSTICKS];
|
|
|
|
int serverCommandSequence;
|
|
|
|
int cg_thirdPersonSpecialCam;
|
|
|
|
int cg_thirdPerson;
|
|
int cg_thirdPersonRange;
|
|
int cg_thirdPersonAngle;
|
|
int cg_thirdPersonPitchOffset;
|
|
int cg_thirdPersonVertOffset;
|
|
float cg_thirdPersonCameraDamp;
|
|
float cg_thirdPersonTargetDamp;
|
|
|
|
float cg_thirdPersonAlpha;
|
|
int cg_thirdPersonHorzOffset;
|
|
|
|
vec3_t cameraFocusAngles, cameraFocusLoc;
|
|
vec3_t cameraIdealTarget, cameraIdealLoc;
|
|
vec3_t cameraCurTarget, cameraCurLoc;
|
|
int cameraLastFrame;
|
|
|
|
float cameraLastYaw;
|
|
float cameraStiffFactor;
|
|
|
|
int cg_crossHairStatus;
|
|
|
|
short cg_autolevel;
|
|
float cg_pitch;
|
|
float cg_sensitivity;
|
|
#ifdef _XBOX
|
|
float cg_sensitivityY;
|
|
#endif
|
|
short cg_autoswitch;
|
|
|
|
int cvar_modifiedFlags;
|
|
|
|
char autoName[STRING_SIZE];
|
|
|
|
//character Model and saber info
|
|
char model[STRING_SIZE];
|
|
int modelIndex;
|
|
//colors
|
|
char char_color_red[STRING_SIZE];
|
|
char char_color_green[STRING_SIZE];
|
|
char char_color_blue[STRING_SIZE];
|
|
|
|
char saber1[STRING_SIZE];
|
|
char saber2[STRING_SIZE];
|
|
char color1[STRING_SIZE];
|
|
char color2[STRING_SIZE];
|
|
char saber_color1[STRING_SIZE];
|
|
char saber_color2[STRING_SIZE];
|
|
char forcePowers[STRING_SIZE];
|
|
// char forcePowersCustom[STRING_SIZE];
|
|
int forceSide;
|
|
int forceConfig;
|
|
int myTeam;
|
|
qboolean isSpectating;
|
|
|
|
|
|
// char profileName[STRING_SIZE];
|
|
|
|
|
|
|
|
// Camera shake stuff
|
|
float shake_intensity;
|
|
int shake_duration;
|
|
int shake_start;
|
|
|
|
int cgRageTime;
|
|
int cgRageFadeTime;
|
|
float cgRageFadeVal;
|
|
|
|
int cgRageRecTime;
|
|
int cgRageRecFadeTime;
|
|
float cgRageRecFadeVal;
|
|
|
|
int cgAbsorbTime;
|
|
int cgAbsorbFadeTime;
|
|
float cgAbsorbFadeVal;
|
|
|
|
int cgProtectTime;
|
|
int cgProtectFadeTime;
|
|
float cgProtectFadeVal;
|
|
|
|
int cgYsalTime;
|
|
int cgYsalFadeTime;
|
|
float cgYsalFadeVal;
|
|
};
|
|
|
|
|
|
class ClientManager
|
|
{
|
|
public:
|
|
|
|
__inline static void StartIt( void ) { ActivateClient(0); }
|
|
__inline static bool NextIt( void )
|
|
{
|
|
// if ( curClient + 1 >= static_cast<int>(clientData.size()) ) {
|
|
if ( curClient + 1 >= numClients ) {
|
|
ActivateClient(mainClient);
|
|
return false;
|
|
}
|
|
ActivateClient( curClient + 1);
|
|
return true;
|
|
}
|
|
|
|
__inline static int ActiveController( void ) { return activeClient->controller; }
|
|
|
|
__inline static void SetActiveController( int ctl ) { activeClient->controller = ctl; }
|
|
__inline static void SetMainClient( int client) { mainClient = client; }
|
|
__inline static void ActivateMainClient( void ) { ActivateClient(mainClient); }
|
|
__inline static ClientData& ActiveClient( void ) { return *activeClient; }
|
|
__inline static ClientData& GetClient( int i ) { return *clientData[i] ; }
|
|
__inline static int ActiveClientNum( void ) { return curClient; }
|
|
__inline static int ActivePort ( void ) { return Cvar_VariableIntegerValue("qport") + curClient; }
|
|
|
|
__inline static bool IsActiveClient (int n) { return (n == curClient); }
|
|
__inline static int NumClients( void ) { return numClients; }
|
|
|
|
__inline static int Controller(int clientNum) { return clientData[clientNum]->controller; }
|
|
__inline static void ActivateClient( int client )
|
|
{
|
|
if (client >= numClients) return;
|
|
|
|
// clientData[curClient]->m_cg = cg;
|
|
// if(clientData[curClient]->m_cl)
|
|
// clientData[curClient]->m_cl = cl;
|
|
// clientData[curClient]->m_clc = clc;
|
|
// Need to check when removing second client:
|
|
if( curClient < numClients )
|
|
clientData[curClient]->state = cls.state;
|
|
|
|
curClient = client;
|
|
activeClient = clientData[curClient];
|
|
|
|
cg = clientData[curClient]->m_cg;
|
|
// if(clientData[curClient]->m_cl)
|
|
cl = clientData[curClient]->m_cl;
|
|
clc = clientData[curClient]->m_clc;
|
|
cls.state = clientData[curClient]->state;
|
|
}
|
|
|
|
static int AddClient( void );
|
|
static void Resize( int n );
|
|
static void Shutdown( void );
|
|
static void Init( int _numClients );
|
|
|
|
static void ClientForceInit (int client);
|
|
static void ClientForceInit ( void );
|
|
static void ClearAllClientInputs(void);
|
|
static void ClientForceAllInit ( void );
|
|
|
|
static bool ActivateByControllerId( int id);
|
|
static bool IsAClientControlller ( int id );
|
|
static void ClientFeedDeferedScript(void );
|
|
|
|
static void ClientActiveRelocate( bool bOutside );
|
|
|
|
private:
|
|
ClientManager() {}
|
|
~ClientManager() {}
|
|
operator =(const ClientManager&);
|
|
|
|
private:
|
|
// static tvector(ClientData*) clientData;
|
|
static ClientData* clientData[2];
|
|
static int curClient;
|
|
static int mainClient;
|
|
static ClientData* activeClient;
|
|
static int numClients;
|
|
|
|
static bool bClOutside;
|
|
|
|
public:
|
|
static qboolean splitScreenMode;
|
|
};
|
|
|
|
#endif
|