fteqw/engine/client/api_menu.h
Spoike d1d0d86fea Rewrote infostrings. Now using infobuffers, which allows for the use of arbitrary blobs, except not using the protocol extension yet in case it needs to be fixed.
Fix sound source issues in Q3.
Fix q2 air acceleration/prediction omission.
Don't change console completion while typing (while that option is still possible).
Shift+tab now cycles completion backwards (now ctrl+shift for cycle subconsoles).
Allow a few things to ignore sv_pure - including csprogs files (which is useful for all the mods that come with the csprogs.dat distributed separately).
clamp pitch values to the range documented by openal, to hopefully avoid error spam.
add some colour coding to the text editor when shader files are being edited/viewed.
Changed how overbrights are clamped on q3bsp.
Added portalfboscale for explicit texture scales on portal/refract/reflect fbos.
qc decompiler can now at least attempt to decompile qtest's qc.
fteqccgui can now be pointed at a .pak file, and decompile the progs.dat inside.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5269 fc73d0e0-1445-4013-8a0c-d673dee63da5
2018-07-05 16:21:44 +00:00

199 lines
7.9 KiB
C

/*
* Copyright (c) 2015-2018
* Marco Hladik All rights reserved.
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this. If not, see <http://www.gnu.org/licenses/>.
*/
#define NATIVEMENU_API_VERSION_MIN 0 //will be updated any time a symbol is renamed.
#define NATIVEMENU_API_VERSION_MAX 0 //bumped for any change.
#ifndef NATIVEMENU_API_VERSION //so you can hold back the reported version in order to work with older engines.
#define NATIVEMENU_API_VERSION NATIVEMENU_API_VERSION_MAX //version reported to the other side.
#endif
struct vfsfile_s;
struct serverinfo_s;
struct searchpathfuncs_s;
struct model_s;
struct font_s;
struct shader_s;
enum slist_test_e;
enum hostcachekey_e; //obtained via calls to gethostcacheindexforkey
enum fs_relative;
enum com_tokentype_e;
#ifndef __QUAKEDEF_H__
#ifdef __cplusplus
typedef enum {qfalse, qtrue} qboolean;//false and true are forcivly defined.
#else
typedef enum {false, true} qboolean;
#endif
typedef float vec_t;
typedef vec_t vec2_t[2];
typedef vec_t vec3_t[3];
typedef vec_t vec4_t[4];
#ifdef _MSC_VER
#define QDECL __cdecl
#else
#define QDECL
#endif
#include <stdint.h>
typedef uint64_t qofs_t;
#endif
struct menu_inputevent_args_s
{
enum {
MIE_KEYDOWN = 0,
MIE_KEYUP = 1,
MIE_MOUSEDELTA = 2,
MIE_MOUSEABS = 3,
} eventtype;
unsigned int devid;
union
{
struct
{
unsigned int scancode;
unsigned int charcode;
} key;
struct
{
float delta[2];
float screen[2]; //virtual coords
} mouse;
};
};
typedef enum
{
MI_INIT, //initial startup
MI_RENDERER, //renderer restarted, any models/shaders/textures handles are no longer valid
MI_RESOLUTION, //video mode changed (scale or physical size) but without any gpu resources getting destroyed. you'll want to reload fonts.
} mintreason_t;
typedef struct
{
struct model_s *model;
int frame[2];
float frametime[2];
float frameweight[2];
vec4_t matrix[3]; //axis/angles+origin
} menuentity_t;
typedef struct
{
//these are in virtual coords, thus they need to be floats so that they can be rounded to ints more cleanly... yeah, scaling sucks.
vec2_t pos;
vec2_t size;
float time; //affects shader effects
vec_t fov[2];
vec4_t viewmatrix[3];
struct model_s *worldmodel;
int numentities;
menuentity_t *entlist;
} menuscene_t;
typedef struct {
int api_version; //this may be higher than you expect.
const char *engine_version;
int (*checkextension) (const char *ext);
void (QDECL *error) (const char *err, ...);
void (*printf) (const char *text, ...);
void (*dprintf) (const char *text, ...);
void (*localcmd) (const char *cmd);
float (*cvar_float) (const char *name);
const char *(*cvar_string) (const char *name, qboolean effective); //NULL if it doesn't exist. return value lasts until cvar_set is called, etc, so don't cache. effective=true reports its active value, not the value that the user wanted.
const char *(*cvar_default) (const char *name);
void (*cvar_set) (const char *name, const char *value);
void (*registercvar) (const char *name, const char *defaultvalue, unsigned int flags, const char *description);
void (*registercommand) (const char *name, const char *description);
char *(*parsetoken) (const char *data, char *out, int outlen, enum com_tokentype_e *toktype);
int (*isserver) (void);
int (*getclientstate) (void);
void (*localsound) (const char *sample, int channel, float volume);
// file input / search crap
struct vfsfile_s *(*fopen) (const char *filename, const char *modestring, enum fs_relative fsroot); //modestring should be one of rb,r+b,wb,w+b,ab,wbp. Mostly use a root of FS_GAMEONLY for writes, otherwise FS_GAME for reads.
void (*fclose) (struct vfsfile_s *fhandle);
char *(*fgets) (struct vfsfile_s *fhandle, char *out, size_t outsize); //returns output buffer, or NULL
void (*fprintf) (struct vfsfile_s *fhandle, const char *s, ...);
void (*enumeratefiles) (const char *match, int (QDECL *callback)(const char *fname, qofs_t fsize, time_t mtime, void *ctx, struct searchpathfuncs_s *package), void *ctx);
// Drawing stuff
void (*drawsetcliparea) (float x, float y, float width, float height);
void (*drawresetcliparea) (void);
struct shader_s *(*cachepic)(const char *name);
qboolean (*drawgetimagesize)(struct shader_s *pic, int *x, int *y);
void (*drawquad) (const vec2_t position[4], const vec2_t texcoords[4], struct shader_s *pic, const vec4_t rgba, unsigned int be_flags);
float (*drawstring) (const vec2_t position, const char *text, struct font_s *font, float height, const vec4_t rgba, unsigned int be_flags);
float (*stringwidth) (const char *text, struct font_s *font, float height);
struct font_s *(*loadfont) (const char *facename, float intendedheight); //with ttf fonts, you'll probably want one for each size.
void (*destroyfont) (struct font_s *font);
// 3D scene stuff
struct model_s *(*cachemodel)(const char *name);
qboolean (*getmodelsize) (struct model_s *model, vec3_t out_mins, vec3_t out_maxs);
void (*renderscene) (menuscene_t *scene);
// Menu specific stuff
qboolean (*setkeydest) (qboolean focused); //returns whether it changed.
int (*getkeydest) (void); //returns 0 if unfocused, -1 if active-but-unfocused, 1 if focused-and-active.
int (*setmousetarget) (const char *cursorname, float hot_x, float hot_y, float scale); //forces absolute mouse coords whenever cursorname isn't NULL
const char *(*keynumtostring) (int keynum, int modifier);
int (*stringtokeynum) (const char *key, int *modifier);
int (*findkeysforcommand) (int bindmap, const char *command, int *out_scancodes, int *out_modifiers, int keycount);
// Server browser stuff
enum hostcachekey_e (*gethostcacheindexforkey) (const char *key);
struct serverinfo_s *(*getsortedhost) (int idx);
char *(*gethostcachestring) (struct serverinfo_s *host, enum hostcachekey_e fld);
float (*gethostcachenumber) (struct serverinfo_s *host, enum hostcachekey_e fld);
void (*resethostcachemasks) (void);
void (*sethostcachemaskstring) (qboolean or, enum hostcachekey_e fld, const char *str, enum slist_test_e op);
void (*sethostcachemasknumber) (qboolean or, enum hostcachekey_e fld, int num, enum slist_test_e op);
void (*sethostcachesort) (enum hostcachekey_e fld, qboolean descending);
int (*resorthostcache) (void);
void (*refreshhostcache) (qboolean fullreset);
qboolean (*sendhostcachequeries) (void); //returns true while there are still waiting for servers. should be called each frame while you still care about the servers.
} menu_import_t;
typedef struct {
int api_version;
void (*Init) (mintreason_t reason, float vwidth, float vheight, int pwidth, int pheight);
void (*Shutdown) (mintreason_t reason);
void (*Draw) (double frametime);
void (*DrawLoading) (double frametime);
void (*Toggle) (int wantmode);
int (*InputEvent) (struct menu_inputevent_args_s ev);
qboolean(*ConsoleCommand) (const char *cmdline, int argc, char const*const*argv);
} menu_export_t;
#ifndef NATIVEEXPORT
#ifdef _WIN32
#define NATIVEEXPORTPROTO __declspec(dllexport)
#define NATIVEEXPORT NATIVEEXPORTPROTO
#else
#define NATIVEEXPORTPROTO
#define NATIVEEXPORT __attribute__((visibility("default")))
#endif
#endif
NATIVEEXPORTPROTO menu_export_t *QDECL GetMenuAPI (menu_import_t *import);