#ifndef ETWOLF_GAMEPAD_COMMON_H
#define ETWOLF_GAMEPAD_COMMON_H

#include <Windows.h>
#include "common.h"

#define CVAR_ARCHIVE 1

#define BUTTON_WALKING 16
#define BUTTON_SPRINT  32

typedef enum {
	// bk001129 - make sure SE_NONE is zero
	SE_NONE = 0,    // evTime is still valid
	SE_KEY,     // evValue is a key code, evValue2 is the down flag
	SE_CHAR,    // evValue is an ascii char
	SE_MOUSE,   // evValue and evValue2 are reletive signed x / y moves
	SE_JOYSTICK_AXIS,   // evValue is an axis number and evValue2 is the current state (-127 to 127)
	SE_CONSOLE, // evPtr is a char*
	SE_PACKET   // evPtr is a netadr_t followed by data bytes to evPtrLength
} sysEventType_t;

enum {
	CG_INIT,
	CG_SHUTDOWN,
	CG_CONSOLE_COMMAND,
	CG_DRAW_ACTIVE_FRAME,
	CG_GETCURRENTCMDNUMBER = 82,
	CG_GETUSERCMD          = 83,
};

typedef struct usercmd_s {
	int         serverTime;
	byte        buttons;
	byte        wbuttons;
	byte        weapon;
	byte        flags;
	int         angles[3];
	signed char forwardmove, rightmove, upmove;
	byte        doubleTap;
	byte        identClient;
} usercmd_t;

struct game {
	void      *cgame;
	void      (*cg_dllEntry)(int (*)(int, ...));
	int       (*cg_vmMain)(int, ...);
	int       (*syscall)(int, ...);
	void      (*ETPro_AC)(void*, void*, void*, int, void*, char*);
	void*     (*ETPro_AC2)(DWORD);
	usercmd_t (*CL_CreateCmd)(void);
	void      (*Sys_QueEvent)(int time, sysEventType_t type, int value, int value2, int ptrLength, void *ptr);
	void      (*IN_JoyMove)(void);
	HINSTANCE (__stdcall *LoadLibraryA)(LPCSTR);
	FARPROC   (__stdcall *GetProcAddress)(HMODULE, LPCSTR);
	float     *mouseX;
	float     *mouseY;
} game;

typedef struct cvar_s {
	char   *name;
	char   *string;
	char   *resetString;
	char   *latchedString;
	int    flags;
	BOOL   modified;
	int    modificationCount;
	float  value;
	int    integer;
	struct cvar_s *next;
	struct cvar_s *hashNext;
} cvar_t;

cvar_t *cvar_vars;

void    (*Com_Printf)(const char *msg, ...);
char*   (*Cmd_Argv)(int arg);
cvar_t* (*Cvar_Get)(const char *, const char *, int flags);
void    (*trap_Cvar_Set)(const char *, const char *);

#endif