Resolution-dependent symbols exported to scripts.

This commit is contained in:
Andrei Drexler 2009-06-24 22:08:55 +00:00
parent a3abca6868
commit 11fb78008c
4 changed files with 95 additions and 11 deletions

View file

@ -539,6 +539,7 @@ int vmMain(int command, int arg0, int arg1, int arg2, int arg3, int arg4, int ar
return -1;
}
/*
==========================
UI_FileExists
@ -557,6 +558,62 @@ qboolean UI_FileExists(const char *filename)
return qfalse;
}
// Makro - temporary file with #define's
static const char* s_symbols_temp_file_name = "ui/runtime.h";
static void FS_WriteText(fileHandle_t file, const char* text)
{
trap_FS_Write(text, strlen(text), file);
}
static void DefineSymbol(fileHandle_t f, const char* name, const char* value)
{
char buffer[512];
if (value && *value)
Com_sprintf(buffer, sizeof(buffer), "#define %s %s\n", name, value);
else
Com_sprintf(buffer, sizeof(buffer), "#define %s\n", name);
FS_WriteText(f, va("#ifdef %s\n", name));
FS_WriteText(f, va("# undef %s\n", name));
FS_WriteText(f, va("#endif // def %s\n", name));
FS_WriteText(f, buffer);
}
static void UI_ExportSymbols()
{
// Makro - this is a hack that allows us to export resolution-dependent symbols to the scripts.
// We could call trap_PC_AddGlobalDefine, but there's no undefine function...
fileHandle_t f;
const char* fname = s_symbols_temp_file_name;
if (trap_FS_FOpenFile(fname, &f, FS_WRITE) >= 0)
{
DefineSymbol(f, "UI_MINX", va("%.0f", uiInfo.uiDC.min[0]));
DefineSymbol(f, "UI_MINY", va("%.0f", uiInfo.uiDC.min[1]));
DefineSymbol(f, "UI_MAXX", va("%.0f", uiInfo.uiDC.max[0]));
DefineSymbol(f, "UI_MAXY", va("%.0f", uiInfo.uiDC.max[1]));
trap_FS_FCloseFile(f);
}
else
Com_Error(ERR_FATAL, "Could not create temporary UI symbol file!\n", fname);
}
static void UI_CleanUpSymbols()
{
fileHandle_t f;
const char* fname = s_symbols_temp_file_name;
if (trap_FS_FOpenFile(fname, &f, FS_WRITE) >= 0)
trap_FS_FCloseFile(f);
}
//Makro - registers an asset; path is relative to the assetsPath
qhandle_t Asset_RegisterShaderNoMip(const char *path)
{
@ -1592,6 +1649,7 @@ _UI_Shutdown
*/
void _UI_Shutdown(void)
{
UI_CleanUpSymbols();
trap_LAN_SaveCachedServers();
}
@ -8095,7 +8153,6 @@ static void UI_MakeExtensionsList()
}
}
/*
=================
UI_Init
@ -8239,8 +8296,15 @@ void _UI_Init(qboolean inGameLoad)
AssetCache();
uiInfo.uiDC.min[0] = 0.5f * (SCREEN_WIDTH - SCREEN_HEIGHT * uiInfo.uiDC.glconfig.vidWidth / (float)uiInfo.uiDC.glconfig.vidHeight);
uiInfo.uiDC.min[1] = 0;
uiInfo.uiDC.max[0] = SCREEN_WIDTH - uiInfo.uiDC.min[0];
uiInfo.uiDC.max[1] = SCREEN_HEIGHT;
start = trap_Milliseconds();
UI_ExportSymbols();
uiInfo.teamCount = 0;
uiInfo.characterCount = 0;
uiInfo.aliasCount = 0;
@ -8371,10 +8435,10 @@ UI_MouseEvent
*/
void _UI_MouseEvent(int dx, int dy)
{
const int MIN_X = (int)(0.5f * (SCREEN_WIDTH - SCREEN_HEIGHT * uiInfo.uiDC.glconfig.vidWidth / (float)uiInfo.uiDC.glconfig.vidHeight));
const int MAX_X = SCREEN_WIDTH - MIN_X;
const int MIN_Y = 0;
const int MAX_Y = SCREEN_HEIGHT;
const int MIN_X = (int)uiInfo.uiDC.min[0];
const int MIN_Y = (int)uiInfo.uiDC.min[1];
const int MAX_X = (int)uiInfo.uiDC.max[0];
const int MAX_Y = (int)uiInfo.uiDC.max[1];
//Makro - added tablet code
if (ui_RQ3_tabletMode.integer)

View file

@ -507,19 +507,32 @@ qboolean PC_Float_Parse(int handle, float *f)
if (!trap_PC_ReadToken(handle, &token))
return qfalse;
if (token.string[0] == '-') {
while (token.type == TT_PUNCTUATION)
{
if (token.string[0] != '-')
{
PC_SourceError(handle, "expected float but found %s\n", token.string);
return qfalse;
}
if (!trap_PC_ReadToken(handle, &token))
return qfalse;
negative = qtrue;
negative ^= qtrue;
}
if (token.type != TT_NUMBER) {
if (token.type != TT_NUMBER)
{
PC_SourceError(handle, "expected float but found %s\n", token.string);
return qfalse;
}
if (negative)
*f = -token.floatvalue;
*f = -atof(token.string);
else
*f = token.floatvalue;
*f = atof(token.string);
return qtrue;
}
@ -601,7 +614,7 @@ qboolean PC_Int_Parse(int handle, int *i)
PC_SourceError(handle, "expected integer but found %s\n", token.string);
return qfalse;
}
*i = token.intvalue;
*i = atoi(token.string);
if (negative)
*i = -*i;
return qtrue;

View file

@ -123,6 +123,8 @@
#define WINDOW_RANDOM_TCGEN 0x04000000
//Makro - parent is moved around when this item is clicked
#define WINDOW_MENU_ANCHOR 0x08000000
//Makro - window is fullscreen
#define WINDOW_FULLSCREEN 0x10000000
// CGAME cursor type bits
#define CURSOR_NONE 0x00000001
@ -615,6 +617,10 @@ typedef struct {
//Makro - gl extensions
const char *glExtensions[MAX_NUM_GL_EXTENSIONS];
int numGlExtensions;
// Makro - total screen extents (which can go outside 0,0-640,480 for wide screens)
float min[2];
float max[2];
} displayContextDef_t;
const char *String_Alloc(const char *p);

View file

@ -1,3 +1,4 @@
#include "ui/runtime.h"
#define ITEM_TYPE_TEXT 0 // simple text
#define ITEM_TYPE_BUTTON 1 // button, basically text with a border