This repository has been archived on 2022-06-27. You can view files and clone it, but cannot push or open issues or pull requests.
Xash3DArchive/common/clgame_api.h

284 lines
11 KiB
C
Raw Normal View History

2008-12-25 22:00:00 +01:00
//=======================================================================
// Copyright XashXT Group 2008 <20>
// clgame_api.h - entity interface between engine and clgame
//=======================================================================
#ifndef CLGAME_API_H
#define CLGAME_API_H
2009-01-11 22:00:00 +01:00
typedef int HSPRITE; // handle to a graphic
2009-10-18 22:00:00 +02:00
typedef struct tempent_s TEMPENTITY;
2010-06-28 22:00:00 +02:00
typedef struct dlight_s dlight_t;
2009-09-13 22:00:00 +02:00
typedef struct usercmd_s usercmd_t;
2009-09-17 22:00:00 +02:00
typedef struct skyportal_s skyportal_t;
2009-01-11 22:00:00 +01:00
typedef struct ref_params_s ref_params_t;
2010-07-08 22:00:00 +02:00
typedef struct mstudioevent_s mstudioevent_t;
2010-02-23 22:00:00 +01:00
typedef void (*ENTCALLBACK)( TEMPENTITY *ent );
2010-08-12 22:00:00 +02:00
typedef void (*HITCALLBACK)( TEMPENTITY *ent, struct pmtrace_s *ptr );
2008-12-25 22:00:00 +01:00
typedef int (*pfnUserMsgHook)( const char *pszName, int iSize, void *pbuf ); // user message handle
2010-07-20 22:00:00 +02:00
#include "wrect.h"
#define SCRINFO_VIRTUALSPACE 1
typedef struct
{
int iFlags;
int iRealWidth;
int iRealHeight;
int iWidth;
int iHeight;
int iCharHeight;
byte charWidths[256];
} SCREENINFO;
2009-11-02 22:00:00 +01:00
2010-08-12 22:00:00 +02:00
// hud_player_info_t formed from player_info_t
2008-12-25 22:00:00 +01:00
typedef struct
{
2009-01-11 22:00:00 +01:00
char *name;
short ping;
byte thisplayer; // TRUE if this is the calling player
2009-12-03 22:00:00 +01:00
byte spectator;
byte packetloss;
2009-11-02 22:00:00 +01:00
const char *model;
short topcolor;
short bottomcolor;
2008-12-25 22:00:00 +01:00
} hud_player_info_t;
2010-08-12 22:00:00 +02:00
#define MAX_INFO_STRING 512
#define MAX_SCOREBOARDNAME 32
typedef struct player_info_s
{
int userid; // User id on server
char userinfo[MAX_INFO_STRING]; // User info string
char name[MAX_SCOREBOARDNAME]; // Name (extracted from userinfo)
int spectator; // Spectator or not, unused
int ping;
int packet_loss;
// skin information
char model[64];
int topcolor;
int bottomcolor;
// last frame rendered
int renderframe;
// Gait frame estimation
int gaitsequence;
float gaitframe;
float gaityaw;
vec3_t prevgaitorigin;
} player_info_t;
2008-12-25 22:00:00 +01:00
typedef struct client_textmessage_s
{
2009-01-11 22:00:00 +01:00
int effect;
byte r1, g1, b1, a1; // 2 colors for effects
byte r2, g2, b2, a2;
float x;
float y;
float fadein;
float fadeout;
float holdtime;
float fxtime;
const char *pName;
const char *pMessage;
2008-12-25 22:00:00 +01:00
} client_textmessage_t;
2010-08-07 22:00:00 +02:00
typedef struct client_data_s
{
// fields that cannot be modified (ie. have no effect if changed)
vec3_t origin;
// fields that can be changed by the cldll
vec3_t viewangles;
int iWeaponBits;
float fov; // field of view
} client_data_t;
2009-11-02 22:00:00 +01:00
typedef struct client_sprite_s
{
char szName[64];
char szSprite[64];
HSPRITE hSprite;
int iRes;
wrect_t rc;
} client_sprite_t;
2009-09-28 22:00:00 +02:00
typedef struct cl_globalvars_s
{
float time; // time from server
float frametime;
2010-08-18 22:00:00 +02:00
char mapname[64];
2009-09-28 22:00:00 +02:00
2010-03-07 22:00:00 +01:00
ref_params_t *pViewParms; // just for easy acess on client
2009-09-28 22:00:00 +02:00
int maxClients;
int maxEntities;
int numEntities; // actual ents count
} cl_globalvars_t;
2008-12-25 22:00:00 +01:00
typedef struct cl_enginefuncs_s
{
2009-12-03 22:00:00 +01:00
// sprite handlers
HSPRITE (*pfnSPR_Load)( const char *szPicName );
int (*pfnSPR_Frames)( HSPRITE hPic );
int (*pfnSPR_Height)( HSPRITE hPic, int frame );
int (*pfnSPR_Width)( HSPRITE hPic, int frame );
void (*pfnSPR_Set)( HSPRITE hPic, int r, int g, int b, int a );
void (*pfnSPR_Draw)( int frame, int x, int y, int width, int height, const wrect_t *prc );
void (*pfnSPR_DrawHoles)( int frame, int x, int y, int width, int height, const wrect_t *prc );
2010-06-28 22:00:00 +02:00
void (*pfnSPR_DrawTrans)( int frame, int x, int y, int width, int height, const wrect_t *prc ); // kRenderTransColor
2009-12-03 22:00:00 +01:00
void (*pfnSPR_DrawAdditive)( int frame, int x, int y, int width, int height, const wrect_t *prc );
void (*pfnSPR_EnableScissor)( int x, int y, int width, int height );
void (*pfnSPR_DisableScissor)( void );
client_sprite_t *(*pfnSPR_GetList)( char *psz, int *piCount );
// screen handlers
void (*pfnFillRGBA)( int x, int y, int width, int height, int r, int g, int b, int a );
int (*pfnGetScreenInfo)( SCREENINFO *pscrinfo );
void (*pfnSetCrosshair)( HSPRITE hspr, wrect_t rc, int r, int g, int b );
2008-12-25 22:00:00 +01:00
// cvar handlers
2009-01-22 22:00:00 +01:00
cvar_t* (*pfnRegisterVariable)( const char *szName, const char *szValue, int flags, const char *szDesc );
2008-12-25 22:00:00 +01:00
float (*pfnGetCvarFloat)( const char *szName );
char* (*pfnGetCvarString)( const char *szName );
// command handlers
void (*pfnAddCommand)( const char *cmd_name, void (*function)(void), const char *cmd_desc );
2008-12-26 22:00:00 +01:00
void (*pfnHookUserMsg)( const char *szMsgName, pfnUserMsgHook pfn );
2008-12-25 22:00:00 +01:00
void (*pfnServerCmd)( const char *szCmdString );
void (*pfnClientCmd)( const char *szCmdString );
2009-01-09 22:00:00 +01:00
2008-12-25 22:00:00 +01:00
void (*pfnGetPlayerInfo)( int player_num, hud_player_info_t *pinfo );
// sound handlers (NULL origin == play at current client origin)
2009-01-05 22:00:00 +01:00
void (*pfnPlaySoundByName)( const char *szSound, float volume, int pitch, const float *org );
void (*pfnPlaySoundByIndex)( int iSound, float volume, int pitch, const float *org );
2008-12-25 22:00:00 +01:00
// vector helpers
void (*pfnAngleVectors)( const float *rgflVector, float *forward, float *right, float *up );
2009-12-04 22:00:00 +01:00
// text message system
client_textmessage_t *(*pfnTextMessageGet)( const char *pName );
int (*pfnDrawCharacter)( int x, int y, int number, int r, int g, int b );
int (*pfnDrawConsoleString)( int x, int y, char *string );
void (*pfnDrawSetTextColor)( float r, float g, float b );
void (*pfnDrawConsoleStringLen)( const char *string, int *length, int *height );
void (*pfnConsolePrint)( const char *string );
void (*pfnCenterPrint)( const char *string );
// engine memory manager
2009-12-05 22:00:00 +01:00
void* (*pfnMemAlloc)( size_t cb, const char *filename, const int fileline );// was GetWindowCenterX
void (*pfnMemFree)( void *mem, const char *filename, const int fileline ); // was GetWindowCenterY
2009-12-04 22:00:00 +01:00
2009-12-05 22:00:00 +01:00
// added for user input processing
void (*pfnGetViewAngles)( float *rgflAngles );
void (*pfnSetViewAngles)( float *rgflAngles );
void (*pfnCvarSetString)( const char *szName, const char *szValue ); // was GetMaxClients (see gpGlobals->maxClients)
2009-12-04 22:00:00 +01:00
void (*pfnCvarSetValue)( const char *szName, float flValue );
int (*pfnCmdArgc)( void );
2009-12-05 22:00:00 +01:00
const char* (*pfnCmdArgv)( int argc );
const char *(*pfnCmd_Args)( void ); // was Con_Printf
float (*pfnGetLerpFrac)( void ); // was Con_DPrintf
void (*pfnDelCommand)( const char *cmd_name ); // was Con_NPrintf
2010-08-15 22:00:00 +02:00
void (*Con_Printf)( char *fmt, ... ); // was Con_NXPrintf
void (*Con_DPrintf)( char *fmt, ... ); // !!!
2009-12-05 22:00:00 +01:00
const char* (*pfnPhysInfo_ValueForKey)( const char *key );
const char* (*pfnServerInfo_ValueForKey)( const char *key );
float (*pfnGetClientMaxspeed)( void );
2010-08-18 22:00:00 +02:00
void* (*pfnGetModelPtr)( struct cl_entity_s *pEdict ); // was CheckParm
2009-12-05 22:00:00 +01:00
2010-08-07 22:00:00 +02:00
// entity handlers
struct cl_entity_s *(*pfnGetLocalPlayer)( void );
struct cl_entity_s *(*pfnGetViewModel)( void );
struct cl_entity_s *(*pfnGetEntityByIndex)( int idx ); // matched with entity serialnumber
2008-12-25 22:00:00 +01:00
2009-12-05 22:00:00 +01:00
float (*pfnGetClientTime)( void ); // can use gpGlobals->time instead
2010-06-28 22:00:00 +02:00
void (*pfnFadeClientVolume)( float fadePercent, float fadeOutSeconds, float holdTime, float fadeInSeconds ); // was V_CalcShake
2009-10-15 22:00:00 +02:00
2010-06-28 22:00:00 +02:00
int (*pfnPointContents)( const float *rgflPos, int *truecontents );
2010-08-07 22:00:00 +02:00
struct cl_entity_s *(*pfnWaterEntity)( const float *rgflPos );
2010-08-12 22:00:00 +02:00
struct pmtrace_s *(*PM_TraceLine)( const float *start, const float *end, int flags, int usehull, int ignore_pe );
2009-12-05 22:00:00 +01:00
2010-08-12 22:00:00 +02:00
modtype_t (*pfnGetModelType)( int modelIndex );
void (*pfnGetModBounds)( int modelIndex, float *mins, float *maxs );
int (*pfnGetModFrames)( int modelIndex );
2010-06-23 22:00:00 +02:00
word (*pfnPrecacheEvent)( int type, const char* psz );
2010-08-07 22:00:00 +02:00
void (*pfnPlaybackEvent)( int flags, const struct cl_entity_s *pInvoker, word eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
2010-08-12 22:00:00 +02:00
void (*pfnWeaponAnim)( int iAnim, int body );
2010-06-23 22:00:00 +02:00
float (*pfnRandomFloat)( float flLow, float flHigh );
long (*pfnRandomLong)( long lLow, long lHigh );
void (*pfnHookEvent)( const char *name, void ( *pfnEvent )( struct event_args_s *args ));
int (*Con_IsVisible)( void );
2009-12-05 22:00:00 +01:00
// dlls managemenet
void* (*pfnLoadLibrary)( const char *name ); // was pfnGetGameDirectory
void* (*pfnGetProcAddress)( void *hInstance, const char *name ); // was pfnGetCvarPointer
void (*pfnFreeLibrary)( void *hInstance ); // was Key_LookupBinding
2010-06-28 22:00:00 +02:00
void (*pfnHostError)( const char *szFmt, ... ); // was pfnGetLevelName (see gpGlobals->mapname)
2009-12-05 22:00:00 +01:00
int (*pfnFileExists)( const char *filename ); // was pfnGetScreenFade
2010-04-09 22:00:00 +02:00
void (*pfnGetGameDir)( char *szGetGameDir ); // was pfnSetScreenFade
2009-12-05 22:00:00 +01:00
// vgui handlers
void* (*VGui_GetPanel)( void ); // UNDONE: wait for version 0.75
void (*VGui_ViewportPaintBackground)( int extents[4] );
// parse txt files
byte* (*pfnLoadFile)( const char *filename, int *pLength ); // was COM_LoadFile, like it
char *(*pfnParseToken)( const char **data_p ); // was COM_ParseFile, like it
void (*pfnFreeFile)( void *buffer ); // was COM_FreeFile, like it
struct triapi_s *pTriAPI;
struct efxapi_s *pEfxAPI;
struct event_api_s *pEventAPI;
2008-12-25 22:00:00 +01:00
2010-06-28 22:00:00 +02:00
int (*pfnIsSpectateOnly)( void );
int (*pfnIsInGame)( void ); // was LoadMapSprite, return false for menu, console, etc
2010-03-17 22:00:00 +01:00
2008-12-25 22:00:00 +01:00
} cl_enginefuncs_t;
typedef struct
{
int (*pfnVidInit)( void );
void (*pfnInit)( void );
2008-12-26 22:00:00 +01:00
int (*pfnRedraw)( float flTime, int state );
2010-08-07 22:00:00 +02:00
int (*pfnUpdateClientData)( struct client_data_s *pcldata, float flTime );
2010-08-12 22:00:00 +02:00
int (*pfnGetHullBounds)( int hullnumber, float *mins, float *maxs );
2010-08-07 22:00:00 +02:00
void (*pfnTxferLocalOverrides)( struct entity_state_s *state, const struct clientdata_s *client );
2010-08-12 22:00:00 +02:00
void (*pfnProcessPlayerState)( struct entity_state_s *dst, const struct entity_state_s *src );
2010-08-07 22:00:00 +02:00
void (*pfnUpdateOnRemove)( struct cl_entity_s *pEdict );
2008-12-25 22:00:00 +01:00
void (*pfnReset)( void );
2010-03-09 22:00:00 +01:00
void (*pfnStartFrame)( void );
2008-12-25 22:00:00 +01:00
void (*pfnFrame)( double time );
void (*pfnShutdown)( void );
2009-12-05 22:00:00 +01:00
void (*pfnDrawTriangles)( int fTrans );
2008-12-25 22:00:00 +01:00
void (*pfnCreateEntities)( void );
2010-08-15 22:00:00 +02:00
int (*pfnAddVisibleEntity)( struct cl_entity_s *pEnt, int entityType );
2010-08-07 22:00:00 +02:00
void (*pfnStudioEvent)( const mstudioevent_t *event, struct cl_entity_s *entity );
void (*pfnStudioFxTransform)( struct cl_entity_s *pEdict, float transform[4][4] );
2009-09-13 22:00:00 +02:00
void (*pfnCalcRefdef)( ref_params_t *parms );
2010-08-12 22:00:00 +02:00
void (*pfnPM_Move)( struct playermove_s *ppmove, int server );
void (*pfnPM_Init)( struct playermove_s *ppmove );
2010-08-15 22:00:00 +02:00
char (*pfnPM_FindTextureType)( char *name );
2010-08-07 22:00:00 +02:00
void (*pfnCmdStart)( const struct cl_entity_s *player, int runfuncs );
void (*pfnCmdEnd)( const struct cl_entity_s *player, const usercmd_t *cmd, unsigned int random_seed );
2010-07-24 22:00:00 +02:00
void (*pfnCreateMove)( usercmd_t *cmd, int msec, int active );
2009-12-05 22:00:00 +01:00
void (*pfnMouseEvent)( int mx, int my );
int (*pfnKeyEvent)( int down, int keynum, const char *pszBind );
void (*VGui_ConsolePrint)( const char *text );
2010-07-13 22:00:00 +02:00
void (*pfnParticleEffect)( const float *org, const float *dir, int color, int count ); // SV_ParticleEffect
2010-08-16 22:00:00 +02:00
void (*pfnTempEntityMessage)( int iSize, void *pbuf );
void (*pfnDirectorMessage)( int iSize, void *pbuf );
2008-12-25 22:00:00 +01:00
} HUD_FUNCTIONS;
2009-09-28 22:00:00 +02:00
typedef int (*CLIENTAPI)( HUD_FUNCTIONS *pFunctionTable, cl_enginefuncs_t* engfuncs, cl_globalvars_t *pGlobals );
2008-12-25 22:00:00 +01:00
#endif//CLGAME_API_H