mirror of
https://github.com/bearstonem/openmohaa-vr.git
synced 2026-10-18 02:00:22 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9c7a1f959 | ||
|
|
c4502469f4 | ||
|
|
c2cb15a1d1 | ||
|
|
4d108a272f | ||
|
|
f523c32044 | ||
|
|
5ac5632e59 | ||
|
|
80f3296854 | ||
|
|
1b1433dd1b | ||
|
|
7647bbaf36 | ||
|
|
f00fd281b3 | ||
|
|
b5ea1ddb53 | ||
|
|
b16ce90be3 | ||
|
|
4c0f7a34de | ||
|
|
2e11cd4ea2 | ||
|
|
c2ad608508 | ||
|
|
5ec8c901e2 | ||
|
|
e6bbbdb79e | ||
|
|
f5fa8d15d1 | ||
|
|
7aee02ba8d |
No files matched your search
@@ -126,8 +126,8 @@ https://xiph.org/vorbis/
|
||||
|
||||
https://opus-codec.org/
|
||||
|
||||
## URL
|
||||
## URLs and communities
|
||||
|
||||
- https://openmohaa.sourceforge.net/
|
||||
- https://github.com/openmoh/openmohaa/
|
||||
- https://mohaaaa.co.uk/AAAAMOHAA/index.php
|
||||
- https://x-null.net/
|
||||
|
||||
@@ -6363,6 +6363,7 @@ qboolean CG_Command_ProcessFile(const char* filename, qboolean quiet, dtiki_t *c
|
||||
char* buffer;
|
||||
const char* bufstart;
|
||||
char com_token[MAX_STRING_CHARS];
|
||||
char tempName[MAX_QPATH + 1];
|
||||
|
||||
if (cgi.FS_ReadFile(filename, (void**)&buffer, quiet) == -1) {
|
||||
return qfalse;
|
||||
@@ -6375,6 +6376,10 @@ qboolean CG_Command_ProcessFile(const char* filename, qboolean quiet, dtiki_t *c
|
||||
// we are not setting up for a tiki
|
||||
current_tiki = NULL;
|
||||
|
||||
// Update the loading screen
|
||||
sprintf(tempName, "m%s", filename);
|
||||
cgi.LoadResource(tempName);
|
||||
|
||||
bufstart = buffer;
|
||||
|
||||
while (1) {
|
||||
@@ -6413,6 +6418,10 @@ qboolean CG_Command_ProcessFile(const char* filename, qboolean quiet, dtiki_t *c
|
||||
}
|
||||
cgi.FS_FreeFile((void*)bufstart);
|
||||
|
||||
// Update the loading screen
|
||||
sprintf(tempName, "o%s", filename);
|
||||
cgi.LoadResource(tempName);
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
|
||||
@@ -633,8 +633,8 @@ void CG_ImpactMarkSimple(
|
||||
);
|
||||
void CG_InitTestTreadMark();
|
||||
int CG_PermanentMark(
|
||||
vec_t* origin,
|
||||
vec_t* dir,
|
||||
const vec3_t origin,
|
||||
const vec3_t dir,
|
||||
float orientation,
|
||||
float fSScale,
|
||||
float fTScale,
|
||||
|
||||
+8
-10
@@ -194,23 +194,22 @@ called during a precache command
|
||||
*/
|
||||
void CG_RegisterSounds( void )
|
||||
{
|
||||
int startTime; // esi MAPDST
|
||||
int endTime; // eax MAPDST
|
||||
char filename[64]; // [esp+28h] [ebp-40h] BYREF
|
||||
int startTime;
|
||||
int endTime;
|
||||
char filename[MAX_QPATH];
|
||||
|
||||
Com_Printf("\n\n-----------PARSING UBERSOUND------------\n");
|
||||
Com_Printf(
|
||||
"Any SetCurrentTiki errors means that tiki wasn't prefetched and "
|
||||
"tiki-specific sounds for it won't work. To fix prefe"
|
||||
"tch the tiki. Ignore if you don't use that tiki on this level.\n");
|
||||
Com_sprintf(filename, 64, "ubersound/ubersound.scr");
|
||||
Com_sprintf(filename, sizeof(filename), "ubersound/ubersound.scr");
|
||||
|
||||
startTime = cgi.Milliseconds();
|
||||
CG_Command_ProcessFile(filename, 0, 0);
|
||||
endTime = cgi.Milliseconds();
|
||||
|
||||
Com_Printf("Parse/Load time: %f seconds.\n",
|
||||
(double)((long double)(endTime - startTime) / 1000.0));
|
||||
Com_Printf("Parse/Load time: %f seconds.\n", (endTime - startTime) / 1000.0f);
|
||||
|
||||
Com_Printf("-------------UBERSOUND DONE---------------\n\n");
|
||||
Com_Printf("\n\n-----------PARSING UBERDIALOG------------\n");
|
||||
@@ -218,14 +217,13 @@ void CG_RegisterSounds( void )
|
||||
"Any SetCurrentTiki errors means that tiki wasn't prefetched and "
|
||||
"tiki-specific sounds for it won't work. To fix prefe"
|
||||
"tch the tiki. Ignore if you don't use that tiki on this level.\n");
|
||||
Com_sprintf(filename, 64, "ubersound/uberdialog.scr");
|
||||
Com_sprintf(filename, sizeof(filename), "ubersound/uberdialog.scr");
|
||||
|
||||
startTime = cgi.Milliseconds();
|
||||
CG_Command_ProcessFile(filename, 0, 0);
|
||||
endTime = cgi.Milliseconds() - startTime;
|
||||
|
||||
Com_Printf("Parse/Load time: %f seconds.\n",
|
||||
(double)((long double)endTime / 1000.0));
|
||||
Com_Printf("Parse/Load time: %f seconds.\n", endTime / 1000.0f);
|
||||
Com_Printf("-------------UBERDIALOG DONE---------------\n\n");
|
||||
}
|
||||
|
||||
@@ -366,7 +364,7 @@ void CG_ProcessConfigString(int num)
|
||||
}
|
||||
else if (num >= CS_SOUNDS && num < CS_SOUNDS + MAX_SOUNDS)
|
||||
{
|
||||
int len = strlen(str);
|
||||
size_t len = strlen(str);
|
||||
if (len)
|
||||
{
|
||||
qboolean streamed;
|
||||
|
||||
@@ -444,8 +444,8 @@ void CG_AddTreadMarks()
|
||||
}
|
||||
|
||||
int CG_PermanentMark(
|
||||
vec_t* origin,
|
||||
vec_t* dir,
|
||||
const vec3_t origin,
|
||||
const vec3_t dir,
|
||||
float orientation,
|
||||
float fSScale,
|
||||
float fTScale,
|
||||
|
||||
+65
-21
@@ -158,6 +158,10 @@ CL_GetSnapshot
|
||||
qboolean CL_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) {
|
||||
clSnapshot_t *clSnap;
|
||||
int i, count;
|
||||
int pnum;
|
||||
int parents[MAX_ENTITIES_IN_SNAPSHOT];
|
||||
entityState_t *s1;
|
||||
int pcount = 0;
|
||||
|
||||
if ( snapshotNumber > cl.snap.messageNum ) {
|
||||
Com_Error( ERR_DROP, "CL_GetSnapshot: snapshotNumber > cl.snapshot.messageNum" );
|
||||
@@ -187,41 +191,81 @@ qboolean CL_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) {
|
||||
snapshot->serverTime = clSnap->serverTime;
|
||||
Com_Memcpy( snapshot->areamask, clSnap->areamask, sizeof( snapshot->areamask ) );
|
||||
snapshot->ps = clSnap->ps;
|
||||
|
||||
// wombat: sounds
|
||||
count = clSnap->number_of_sounds;
|
||||
if (snapshot->number_of_sounds > MAX_SERVER_SOUNDS) {
|
||||
Com_DPrintf("CL_GetSnapshot: truncated %i sounds to %i\n", count, MAX_SERVER_SOUNDS);
|
||||
count = MAX_SERVER_SOUNDS;
|
||||
}
|
||||
|
||||
snapshot->number_of_sounds = count;
|
||||
Com_Memcpy(snapshot->sounds, clSnap->sounds, sizeof(snapshot->sounds[0])* count);
|
||||
|
||||
count = clSnap->numEntities;
|
||||
if ( count > MAX_ENTITIES_IN_SNAPSHOT ) {
|
||||
Com_DPrintf( "CL_GetSnapshot: truncated %i visible entities to %i\n", count, MAX_ENTITIES_IN_SNAPSHOT );
|
||||
count = MAX_ENTITIES_IN_SNAPSHOT;
|
||||
}
|
||||
snapshot->numEntities = count;
|
||||
|
||||
snapshot->numEntities = 0;
|
||||
for ( i = 0 ; i < count ; i++ ) {
|
||||
snapshot->entities[i] =
|
||||
cl.parseEntities[ ( clSnap->parseEntitiesNum + i ) & (MAX_PARSE_ENTITIES-1) ];
|
||||
s1 = &cl.parseEntities[(clSnap->parseEntitiesNum + i) & (MAX_PARSE_ENTITIES - 1)];
|
||||
pnum = s1->parent;
|
||||
|
||||
if (pnum == ENTITYNUM_NONE) {
|
||||
parents[s1->number] = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (parents[pnum] == -2) {
|
||||
parents[s1->number] = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// add it later
|
||||
parents[s1->number] = pnum;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
snapshot->entities[snapshot->numEntities++] = *s1;
|
||||
}
|
||||
|
||||
// wombat: sounds
|
||||
count = clSnap->number_of_sounds;
|
||||
if ( snapshot->number_of_sounds > MAX_SERVER_SOUNDS) {
|
||||
Com_DPrintf( "CL_GetSnapshot: truncated %i sounds to %i\n", count, MAX_SERVER_SOUNDS);
|
||||
count = MAX_SERVER_SOUNDS;
|
||||
for(pcount = 0; pcount < 8 && snapshot->numEntities != count; pcount++)
|
||||
{
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
s1 = &cl.parseEntities[(clSnap->parseEntitiesNum + i) & (MAX_PARSE_ENTITIES - 1)];
|
||||
pnum = parents[s1->number];
|
||||
if (pnum >= 0 && parents[pnum] == -2) {
|
||||
snapshot->entities[snapshot->numEntities++] = *s1;
|
||||
}
|
||||
}
|
||||
}
|
||||
snapshot->number_of_sounds = count;
|
||||
Com_Memcpy( snapshot->sounds, clSnap->sounds, sizeof(snapshot->sounds[0])*count );
|
||||
|
||||
// FIXME: configstring changes and server commands!!!
|
||||
if (pcount >= 8)
|
||||
{
|
||||
for (i = count; i < snapshot->numEntities; i++)
|
||||
{
|
||||
s1 = &cl.parseEntities[(clSnap->parseEntitiesNum + i) & (MAX_PARSE_ENTITIES - 1)];
|
||||
if (parents[s1->number] >= 0) {
|
||||
Com_DPrintf(
|
||||
"CL_GetSnapshot: entity %d with parent %d and model '%s' at %.2f %.2f %.2f, could not find parent.\n",
|
||||
s1->number,
|
||||
s1->parent,
|
||||
CL_ConfigString(CS_MODELS + s1->modelindex),
|
||||
s1->origin[0],
|
||||
s1->origin[1],
|
||||
s1->origin[2]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
CL_SetUserCmdValue
|
||||
=====================
|
||||
*/
|
||||
void CL_SetUserCmdValue( int userCmdValue, float sensitivityScale ) {
|
||||
cl.cgameUserCmdValue = userCmdValue;
|
||||
cl.cgameSensitivity = sensitivityScale;
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
CL_AddCgameCommand
|
||||
|
||||
@@ -566,7 +566,7 @@ CL_CmdButtons
|
||||
*/
|
||||
void CL_CmdButtons( usercmd_t *cmd ) {
|
||||
int i;
|
||||
|
||||
|
||||
//
|
||||
// figure button bits
|
||||
// send a button bit even if the key was pressed and released in
|
||||
@@ -579,18 +579,28 @@ void CL_CmdButtons( usercmd_t *cmd ) {
|
||||
in_buttons[i].wasPressed = qfalse;
|
||||
}
|
||||
|
||||
// if ( Key_GetCatcher( ) ) {
|
||||
// cmd->buttons |= BUTTON_TALK; // su44: is there a TALK button in MoHAA?
|
||||
// }
|
||||
if (UI_MenuActive() || UI_ConsoleIsOpen()) {
|
||||
cmd->buttons |= BUTTON_TALK;
|
||||
}
|
||||
|
||||
if (in_speed.active == !cl_run->integer) {
|
||||
cmd->buttons |= BUTTON_RUN;
|
||||
}
|
||||
|
||||
if (cge) {
|
||||
// send weapon commands from cg
|
||||
cmd->buttons |= cge->CG_WeaponCommandButtonBits();
|
||||
}
|
||||
|
||||
// allow the game to know if any key at all is
|
||||
// currently pressed, even if it isn't bound to anything
|
||||
if ( anykeydown && Key_GetCatcher( ) == 0 ) {
|
||||
if ( anykeydown && Key_GetCatcher() == 0) {
|
||||
cmd->buttons |= BUTTON_ANY;
|
||||
}
|
||||
|
||||
// su44: add weapon command bits
|
||||
cmd->buttons |= cl.cgameUserCmdValue;
|
||||
if (anykeydown) {
|
||||
cmd->buttons |= BUTTON_ANY2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+11
-4
@@ -947,7 +947,13 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) {
|
||||
ctrl_down = down;
|
||||
}
|
||||
|
||||
if( cls.state > CA_DISCONNECTED && cge && !cls.keyCatchers && cge->CG_CheckCaptureKey( key, down, time ) && key != K_ESCAPE )
|
||||
if (down && !CL_FinishedIntro())
|
||||
{
|
||||
UI_StartStageKeyEvent();
|
||||
return;
|
||||
}
|
||||
|
||||
if( cls.state > CA_DISCONNECTED && cge && !Key_GetCatcher() && cge->CG_CheckCaptureKey( key, down, time ) && key != K_ESCAPE )
|
||||
{
|
||||
if( key != '`' && key != '~' )
|
||||
return;
|
||||
@@ -958,6 +964,7 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) {
|
||||
if( !down ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if( Cvar_VariableIntegerValue( "ui_console" ) )
|
||||
{
|
||||
UI_ToggleConsole();
|
||||
@@ -1011,10 +1018,10 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) {
|
||||
}
|
||||
}
|
||||
|
||||
if( in_guimouse || key <= K_MOUSE3 || key > K_JOY1 )
|
||||
if (!in_guimouse || key <= K_MOUSE3 || key > K_JOY1)
|
||||
{
|
||||
// keys can still be used for bound actions
|
||||
if( down && ( key < 128 || key == K_MOUSE4 ) &&
|
||||
if (down && (key <= K_BACKSPACE || key == K_MOUSE4) &&
|
||||
( clc.demoplaying || cls.state == CA_CINEMATIC ) && Key_GetCatcher() == 0 ) {
|
||||
Cvar_Set( "nextdemo", "" );
|
||||
key = K_ESCAPE;
|
||||
@@ -1057,7 +1064,7 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) {
|
||||
UI_KeyEvent( key, time );
|
||||
} else if( cls.loading & KEYCATCH_MESSAGE ) {
|
||||
Message_Key( key );
|
||||
} else if( cls.state != CA_DISCONNECTED ) {
|
||||
} else if( cls.state != CA_DISCONNECTED || menubound[key]) {
|
||||
// send the bound action
|
||||
kb = altkeys[ key ].binding;
|
||||
if( !kb || !altkeys[ key ].down ) {
|
||||
|
||||
@@ -4307,4 +4307,12 @@ qboolean CL_CDKeyValidate( const char *key, const char *checksum ) {
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
void TIKI_CG_Command_ProcessFile(char* filename, qboolean quiet, dtiki_t* curTiki)
|
||||
{
|
||||
if (cge) {
|
||||
cge->CG_Command_ProcessFile(filename, quiet, curTiki);
|
||||
return;
|
||||
}
|
||||
|
||||
Com_Printf("NO CGE \n");
|
||||
}
|
||||
@@ -527,6 +527,7 @@ void CL_ParseGamestate( msg_t *msg ) {
|
||||
// reinitialize the filesystem if the game directory has changed
|
||||
FS_ConditionalRestart( clc.checksumFeed );
|
||||
|
||||
cls.state = CA_LOADING;
|
||||
if (!com_sv_running->integer)
|
||||
{
|
||||
const char *info = cl.gameState.stringData + cl.gameState.stringOffsets[CS_SERVERINFO];
|
||||
|
||||
+86
-67
@@ -1881,7 +1881,7 @@ void UI_Update(void) {
|
||||
{
|
||||
UI_ForceMenuOff(true);
|
||||
UI_DeactiveFloatingWindows();
|
||||
UI_ForceMenu("");
|
||||
UI_ForceMenu(ui_sCurrentLoadingMenu);
|
||||
uWinMan.showCursor(false);
|
||||
}
|
||||
|
||||
@@ -4485,8 +4485,14 @@ ScoreboardListItem::ScoreboardListItem()
|
||||
void ScoreboardListItem::DrawListItem( int iColumn, const UIRect2D& drawRect, bool bSelected, UIFont *pFont )
|
||||
{
|
||||
DrawBox( drawRect, backColor, 1.0 );
|
||||
pFont->setColor( textColor );
|
||||
pFont->Print( drawRect.pos.x + 1, drawRect.pos.y, Sys_LV_CL_ConvertString( getListItemString( iColumn ) ), iColumn, -1 );
|
||||
pFont->setColor(textColor);
|
||||
pFont->Print(
|
||||
drawRect.pos.x + 1,
|
||||
drawRect.pos.y,
|
||||
Sys_LV_CL_ConvertString(getListItemString(iColumn)),
|
||||
-1,
|
||||
qfalse
|
||||
);
|
||||
|
||||
if( bTitleItem )
|
||||
{
|
||||
@@ -4588,10 +4594,11 @@ void UI_SetScoreBoardItem( int iItemNumber,
|
||||
{
|
||||
cge->CG_GetScoreBoardPosition( &x, &y, &w, &h );
|
||||
|
||||
if( scoreboard_x == x
|
||||
|| scoreboard_y == y
|
||||
|| scoreboard_w == w
|
||||
|| scoreboard_h == h
|
||||
// Recreate the scoreboard if it has different rect
|
||||
if( scoreboard_x != x
|
||||
|| scoreboard_y != y
|
||||
|| scoreboard_w != w
|
||||
|| scoreboard_h != h
|
||||
|| scoreboard_header != cge->CG_GetScoreBoardDrawHeader() )
|
||||
{
|
||||
delete scoreboardlist;
|
||||
@@ -4606,11 +4613,12 @@ void UI_SetScoreBoardItem( int iItemNumber,
|
||||
|
||||
if( scoreboardlist )
|
||||
{
|
||||
if( iItemNumber + 1 > scoreboardlist->getNumItems() ) {
|
||||
if (iItemNumber + 1 > scoreboardlist->getNumItems()) {
|
||||
pItem = new ScoreboardListItem;
|
||||
scoreboardlist->AddItem( pItem );
|
||||
} else {
|
||||
pItem = ( ScoreboardListItem * )scoreboardlist->GetItem( iItemNumber );
|
||||
scoreboardlist->AddItem(pItem);
|
||||
}
|
||||
else {
|
||||
pItem = (ScoreboardListItem*)scoreboardlist->GetItem(iItemNumber + 1);
|
||||
}
|
||||
|
||||
if( pItem )
|
||||
@@ -5565,23 +5573,23 @@ UI_LoadResource
|
||||
====================
|
||||
*/
|
||||
void UI_LoadResource( const char *name ) {
|
||||
if( cls.loading == SS_DEAD ) {
|
||||
if (cls.loading == SS_DEAD) {
|
||||
return;
|
||||
}
|
||||
|
||||
if( cls.loading == 3 )
|
||||
if (cls.loading == SS_GAME)
|
||||
{
|
||||
UI_EndLoadResource();
|
||||
UI_EndLoadResource( name );
|
||||
UI_EndLoadResource(name);
|
||||
UI_BeginLoadResource();
|
||||
}
|
||||
else if( cls.loading == 2 )
|
||||
else if (cls.loading == SS_LOADING2)
|
||||
{
|
||||
UI_RegisterLoadResource( name );
|
||||
Cvar_SetValue( "loadingbar", currentLoadTime / totalLoadTime );
|
||||
UI_RegisterLoadResource(name);
|
||||
Cvar_SetValue("loadingbar", (float)currentLoadTime / (float)totalLoadTime);
|
||||
}
|
||||
|
||||
UI_TestUpdateScreen( 333u );
|
||||
UI_TestUpdateScreen(333u);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5746,7 +5754,65 @@ void UI_BeginLoad( const char *pszMapName ) {
|
||||
UI_ForceMenuOff( true );
|
||||
UI_DeactiveFloatingWindows();
|
||||
|
||||
if( !ui_pLoadingMenu )
|
||||
if (ui_pLoadingMenu)
|
||||
{
|
||||
if (!developer->integer && UI_ConsoleIsVisible()) {
|
||||
UI_CloseConsole();
|
||||
}
|
||||
|
||||
ui_pLoadingMenu->PassEventToWidget("continuebutton", new Event(EV_Widget_Disable));
|
||||
|
||||
loadName = "maps/";
|
||||
loadName += pszMapName;
|
||||
loadName += ".min";
|
||||
mapfile = loadName + ".bsp";
|
||||
|
||||
if (UI_ArchiveLoadMapinfo(mapfile)) {
|
||||
cls.loading = SS_LOADING2;
|
||||
}
|
||||
else {
|
||||
cls.loading = SS_GAME;
|
||||
}
|
||||
|
||||
if (cls.loading == SS_LOADING2)
|
||||
{
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingflasher", new Event(EV_Widget_Disable));
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingbar", new Event(EV_Widget_Enable));
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingbar_border", new Event(EV_Widget_Enable));
|
||||
|
||||
currentLoadTime = 0;
|
||||
Cvar_SetValue("loadingbar", 0);
|
||||
|
||||
L_ProcessPendingEvents();
|
||||
|
||||
lastTime = Sys_Milliseconds();
|
||||
if (com_sv_running->integer) {
|
||||
SCR_UpdateScreen();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingflasher", new Event(EV_Widget_Enable));
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingbar", new Event(EV_Widget_Disable));
|
||||
ui_pLoadingMenu->PassEventToWidget("loadingbar_border", new Event(EV_Widget_Disable));
|
||||
|
||||
UI_BeginLoadResource();
|
||||
loadCountLow = 0;
|
||||
loadCountHigh = 0;
|
||||
loadHead = NULL;
|
||||
loadNumber = 0;
|
||||
|
||||
cls.loading = SS_LOADING;
|
||||
|
||||
L_ProcessPendingEvents();
|
||||
lastTime = Sys_Milliseconds();
|
||||
|
||||
if (com_sv_running->integer) {
|
||||
SCR_UpdateScreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cls.loading = SS_LOADING;
|
||||
|
||||
@@ -5755,56 +5821,9 @@ void UI_BeginLoad( const char *pszMapName ) {
|
||||
|
||||
lastTime = Sys_Milliseconds();
|
||||
|
||||
if( com_sv_running->integer ) {
|
||||
if (com_sv_running->integer) {
|
||||
SCR_UpdateScreen();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if( !developer->integer && UI_ConsoleIsVisible() ) {
|
||||
UI_CloseConsole();
|
||||
}
|
||||
|
||||
ui_pLoadingMenu->PassEventToWidget( "continuebutton", new Event( EV_Widget_Disable ) );
|
||||
|
||||
loadName = "maps/";
|
||||
loadName += pszMapName;
|
||||
loadName += ".min";
|
||||
mapfile = loadName + ".bsp";
|
||||
|
||||
if( UI_ArchiveLoadMapinfo( mapfile ) ) {
|
||||
cls.loading = SS_LOADING2;
|
||||
} else {
|
||||
cls.loading = SS_GAME;
|
||||
}
|
||||
|
||||
if( cls.loading != SS_LOADING2 )
|
||||
{
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingflasher", new Event( EV_Widget_Enable ) );
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingbar", new Event( EV_Widget_Disable ) );
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingbar_border", new Event( EV_Widget_Disable ) );
|
||||
|
||||
UI_BeginLoadResource();
|
||||
loadCountLow = 0;
|
||||
loadCountHigh = 0;
|
||||
loadHead = NULL;
|
||||
loadNumber = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingflasher", new Event( EV_Widget_Disable ) );
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingbar", new Event( EV_Widget_Enable ) );
|
||||
ui_pLoadingMenu->PassEventToWidget( "loadingbar_border", new Event( EV_Widget_Enable ) );
|
||||
|
||||
currentLoadTime = 0;
|
||||
Cvar_SetValue( "loadingbar", 0 );
|
||||
}
|
||||
|
||||
L_ProcessPendingEvents();
|
||||
lastTime = Sys_Milliseconds();
|
||||
|
||||
if( com_sv_running->integer ) {
|
||||
SCR_UpdateScreen();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -126,10 +126,6 @@ typedef struct {
|
||||
|
||||
int joystickAxis[MAX_JOYSTICK_AXIS]; // set by joystick events
|
||||
|
||||
// cgame communicates a few values to the client system
|
||||
int cgameUserCmdValue; // current weapon to add to usercmd_t
|
||||
float cgameSensitivity;
|
||||
|
||||
// cmds[cmdNumber] is the predicted command, [cmdNumber-1] is the last
|
||||
// properly generated command
|
||||
usercmd_t cmds[CMD_BACKUP]; // each mesage will send several old cmds
|
||||
@@ -145,9 +141,6 @@ typedef struct {
|
||||
// and teleport direction changes
|
||||
vec3_t viewangles;
|
||||
|
||||
vec3_t eyeAngles;
|
||||
vec3_t eyeOrigin;
|
||||
|
||||
int serverId; // included in each client message so the server
|
||||
// can tell if it is for a prior map_restart
|
||||
// big stuff at end of structure so most offsets are 15 bits or less
|
||||
|
||||
@@ -1423,7 +1423,7 @@ void PmoveSingle( pmove_t *pmove )
|
||||
if( pm->ps->pm_type == PM_CLIMBWALL )
|
||||
{
|
||||
pm->ps->fLeanAngle = 0.0f;
|
||||
pm->cmd.buttons &= ~( BUTTON_LEANLEFT | BUTTON_LEANRIGHT );
|
||||
pm->cmd.buttons &= ~( BUTTON_LEAN_LEFT | BUTTON_LEAN_RIGHT );
|
||||
}
|
||||
|
||||
// clear all pmove local vars
|
||||
@@ -1447,10 +1447,10 @@ void PmoveSingle( pmove_t *pmove )
|
||||
|
||||
pml.frametime = pml.msec * 0.001;
|
||||
|
||||
if( ( pm->cmd.buttons & ( BUTTON_LEANLEFT | BUTTON_LEANRIGHT ) &&
|
||||
( pm->cmd.buttons & ( BUTTON_LEANLEFT | BUTTON_LEANRIGHT ) ) != ( BUTTON_LEANLEFT | BUTTON_LEANRIGHT ) ) )
|
||||
if( ( pm->cmd.buttons & ( BUTTON_LEAN_LEFT | BUTTON_LEAN_RIGHT ) &&
|
||||
( pm->cmd.buttons & ( BUTTON_LEAN_LEFT | BUTTON_LEAN_RIGHT ) ) != ( BUTTON_LEAN_LEFT | BUTTON_LEAN_RIGHT ) ) )
|
||||
{
|
||||
if( pm->cmd.buttons & BUTTON_LEANLEFT )
|
||||
if( pm->cmd.buttons & BUTTON_LEAN_LEFT )
|
||||
{
|
||||
if( pm->ps->fLeanAngle <= -40.0f )
|
||||
{
|
||||
|
||||
+16
-16
@@ -1907,11 +1907,11 @@ qboolean Player::checkattackleft
|
||||
return false;
|
||||
}
|
||||
|
||||
if( last_ucmd.buttons & BUTTON_ATTACK )
|
||||
if( last_ucmd.buttons & BUTTON_ATTACKLEFT )
|
||||
{
|
||||
Weapon *weapon;
|
||||
|
||||
last_attack_button = BUTTON_ATTACK;
|
||||
last_attack_button = BUTTON_ATTACKLEFT;
|
||||
|
||||
weapon = GetActiveWeapon( WEAPON_MAIN );
|
||||
if( weapon )
|
||||
@@ -1939,7 +1939,7 @@ qboolean Player::checkattackbuttonleft
|
||||
return false;
|
||||
}
|
||||
|
||||
return ( last_ucmd.buttons & BUTTON_ATTACK );
|
||||
return ( last_ucmd.buttons & BUTTON_ATTACKLEFT );
|
||||
}
|
||||
|
||||
|
||||
@@ -1954,11 +1954,11 @@ qboolean Player::checkattackright
|
||||
return false;
|
||||
}
|
||||
|
||||
if( last_ucmd.buttons & BUTTON_ATTACK2 )
|
||||
if( last_ucmd.buttons & BUTTON_ATTACKRIGHT )
|
||||
{
|
||||
Weapon *weapon;
|
||||
|
||||
last_attack_button = BUTTON_ATTACK2;
|
||||
last_attack_button = BUTTON_ATTACKRIGHT;
|
||||
|
||||
weapon = GetActiveWeapon( WEAPON_MAIN );
|
||||
if( weapon )
|
||||
@@ -1986,7 +1986,7 @@ qboolean Player::checkattackbuttonright
|
||||
return false;
|
||||
}
|
||||
|
||||
return ( last_ucmd.buttons & BUTTON_ATTACK2 );
|
||||
return ( last_ucmd.buttons & BUTTON_ATTACKRIGHT );
|
||||
}
|
||||
|
||||
qboolean Player::checksneak
|
||||
@@ -6957,7 +6957,7 @@ void Player::ClientThink
|
||||
client->ps.pm_flags |= PMF_FROZEN;
|
||||
client->ps.pm_flags |= PMF_INTERMISSION;
|
||||
|
||||
if( level.time - level.intermissiontime > 5.0f && ( new_buttons & ( BUTTON_ATTACK | BUTTON_ATTACK2 ) ) )
|
||||
if( level.time - level.intermissiontime > 5.0f && ( new_buttons & ( BUTTON_ATTACKLEFT | BUTTON_ATTACKRIGHT ) ) )
|
||||
{
|
||||
level.exitintermission = true;
|
||||
}
|
||||
@@ -6998,7 +6998,7 @@ void Player::ClientThink
|
||||
{
|
||||
if( level.intermissiontype )
|
||||
{
|
||||
if( ( new_buttons & BUTTON_ATTACK ) || ( new_buttons & BUTTON_ATTACK2 ) )
|
||||
if( ( new_buttons & BUTTON_ATTACKLEFT ) || ( new_buttons & BUTTON_ATTACKRIGHT ) )
|
||||
{
|
||||
if( level.intermissiontype == TRANS_MISSION_FAILED )
|
||||
{
|
||||
@@ -7044,7 +7044,7 @@ void Player::ClientThink
|
||||
return;
|
||||
}
|
||||
|
||||
if( new_buttons & BUTTON_ATTACK2 )
|
||||
if( new_buttons & BUTTON_ATTACKRIGHT )
|
||||
{
|
||||
Weapon *weapon = GetActiveWeapon( WEAPON_MAIN );
|
||||
|
||||
@@ -7252,7 +7252,7 @@ void Player::Think
|
||||
if (g_gametype->integer == GT_SINGLE_PLAYER)
|
||||
{
|
||||
|
||||
if (((server_new_buttons & BUTTON_ATTACK) || (server_new_buttons & BUTTON_ATTACK2)) &&
|
||||
if (((server_new_buttons & BUTTON_ATTACKLEFT) || (server_new_buttons & BUTTON_ATTACKRIGHT)) &&
|
||||
(!GetActiveWeapon(WEAPON_MAIN)) &&
|
||||
(!IsDead()) &&
|
||||
(!IsNewActiveWeapon()) &&
|
||||
@@ -7270,7 +7270,7 @@ void Player::Think
|
||||
{
|
||||
if (dmManager.AllowRespawn())
|
||||
{
|
||||
if (((server_new_buttons & BUTTON_ATTACK) || (server_new_buttons & BUTTON_ATTACK2)) ||
|
||||
if (((server_new_buttons & BUTTON_ATTACKLEFT) || (server_new_buttons & BUTTON_ATTACKRIGHT)) ||
|
||||
(g_forcerespawn->integer > 0 && level.time > g_forcerespawn->integer + respawn_time))
|
||||
{
|
||||
m_bSpectator = false;
|
||||
@@ -7288,7 +7288,7 @@ void Player::Think
|
||||
|
||||
if (IsSpectator() && !m_bTempSpectator)
|
||||
{
|
||||
if (level.time <= respawn_time || !((server_new_buttons & BUTTON_ATTACK) || (server_new_buttons & BUTTON_ATTACK2)))
|
||||
if (level.time <= respawn_time || !((server_new_buttons & BUTTON_ATTACKLEFT) || (server_new_buttons & BUTTON_ATTACKRIGHT)))
|
||||
{
|
||||
if (level.time - 10.0f > m_fWeapSelectTime)
|
||||
{
|
||||
@@ -11544,7 +11544,7 @@ void Player::EventGetFireHeld
|
||||
)
|
||||
|
||||
{
|
||||
ev->AddInteger( buttons & ( BUTTON_ATTACK | BUTTON_ATTACK2 ) ? qtrue : qfalse );
|
||||
ev->AddInteger( buttons & ( BUTTON_ATTACKLEFT | BUTTON_ATTACKRIGHT ) ? qtrue : qfalse );
|
||||
}
|
||||
|
||||
void Player::Score
|
||||
@@ -14202,7 +14202,7 @@ void Player::LeanLeftHeld
|
||||
|
||||
player = ( Player * )this;
|
||||
|
||||
buttonheld = !!( player->buttons & BUTTON_LEANLEFT );
|
||||
buttonheld = !!( player->buttons & BUTTON_LEAN_LEFT );
|
||||
|
||||
ev->AddInteger( buttonheld );
|
||||
}
|
||||
@@ -14218,7 +14218,7 @@ void Player::LeanRightHeld
|
||||
|
||||
player = ( Player * )this;
|
||||
|
||||
buttonheld = !!( player->buttons & BUTTON_LEANRIGHT );
|
||||
buttonheld = !!( player->buttons & BUTTON_LEAN_RIGHT );
|
||||
|
||||
ev->AddInteger( buttonheld );
|
||||
}
|
||||
@@ -14362,7 +14362,7 @@ void Player::SecFireHeld
|
||||
|
||||
player = ( Player * )this;
|
||||
|
||||
buttonheld = !!( player->buttons & BUTTON_ATTACK2 );
|
||||
buttonheld = !!( player->buttons & BUTTON_ATTACKRIGHT );
|
||||
|
||||
ev->AddInteger( buttonheld );
|
||||
}
|
||||
|
||||
+12
-12
@@ -503,7 +503,7 @@ void PlayerBot::UpdateBotStates
|
||||
if( IsDead() )
|
||||
{
|
||||
// The bot should respawn
|
||||
m_botCmd.buttons ^= BUTTON_ATTACK;
|
||||
m_botCmd.buttons ^= BUTTON_ATTACKLEFT;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1419,7 +1419,7 @@ void PlayerBot::State_EndAttack
|
||||
)
|
||||
|
||||
{
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACK | BUTTON_ATTACK2 );
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACKLEFT | BUTTON_ATTACKRIGHT );
|
||||
}
|
||||
|
||||
void PlayerBot::State_Attack
|
||||
@@ -1470,16 +1470,16 @@ void PlayerBot::State_Attack
|
||||
{
|
||||
if( pWeap->IsSemiAuto() )
|
||||
{
|
||||
m_botCmd.buttons ^= BUTTON_ATTACK;
|
||||
m_botCmd.buttons ^= BUTTON_ATTACKLEFT;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_botCmd.buttons |= BUTTON_ATTACK;
|
||||
m_botCmd.buttons |= BUTTON_ATTACKLEFT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACK;
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACKLEFT;
|
||||
}
|
||||
}
|
||||
else if( pWeap->GetFireType( FIRE_SECONDARY ) == FT_MELEE )
|
||||
@@ -1488,21 +1488,21 @@ void PlayerBot::State_Attack
|
||||
|
||||
if( fDistanceSquared <= fSecondaryBulletRangeSquared )
|
||||
{
|
||||
m_botCmd.buttons ^= BUTTON_ATTACK2;
|
||||
m_botCmd.buttons ^= BUTTON_ATTACKRIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACK2;
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACKRIGHT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACK | BUTTON_ATTACK2 );
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACKLEFT | BUTTON_ATTACKRIGHT );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACK | BUTTON_ATTACK2 );
|
||||
m_botCmd.buttons &= ~( BUTTON_ATTACKLEFT | BUTTON_ATTACKRIGHT );
|
||||
fMinDistanceSquared = 0;
|
||||
}
|
||||
|
||||
@@ -1634,10 +1634,10 @@ void PlayerBot::Killed
|
||||
Player::Killed( ev );
|
||||
|
||||
// send the respawn buttons
|
||||
if( !( m_botCmd.buttons & BUTTON_ATTACK ) )
|
||||
m_botCmd.buttons |= BUTTON_ATTACK;
|
||||
if( !( m_botCmd.buttons & BUTTON_ATTACKLEFT ) )
|
||||
m_botCmd.buttons |= BUTTON_ATTACKLEFT;
|
||||
else
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACK;
|
||||
m_botCmd.buttons &= ~BUTTON_ATTACKLEFT;
|
||||
|
||||
m_botEyes.ofs[ 0 ] = 0;
|
||||
m_botEyes.ofs[ 1 ] = 0;
|
||||
|
||||
@@ -772,7 +772,7 @@ qboolean TurretGun::UserAim
|
||||
|
||||
m_vUserLastCmdAng = vNewCmdAng;
|
||||
|
||||
if( ( ucmd->buttons & BUTTON_ATTACK ) || ( ucmd->buttons & BUTTON_ATTACK2 ) )
|
||||
if( ( ucmd->buttons & BUTTON_ATTACKLEFT ) || ( ucmd->buttons & BUTTON_ATTACKRIGHT ) )
|
||||
{
|
||||
if( !m_iFiring ) {
|
||||
m_iFiring = 1;
|
||||
|
||||
@@ -609,6 +609,7 @@ void CMod_LoadPatches( gamelump_t *surfs, gamelump_t *verts, int *shaderSubdivis
|
||||
vec3_t points[MAX_PATCH_VERTS];
|
||||
int width, height;
|
||||
int shaderNum;
|
||||
char tempName[MAX_QPATH + 1];
|
||||
|
||||
in = ( dsurface_t * )surfs->buffer;
|
||||
if( surfs->length % sizeof( *in ) )
|
||||
@@ -668,6 +669,9 @@ void CMod_LoadPatches( gamelump_t *surfs, gamelump_t *verts, int *shaderSubdivis
|
||||
|
||||
// create the internal facet structure
|
||||
patch->pc = CM_GeneratePatchCollide( width, height, points, patch->subdivisions );
|
||||
|
||||
sprintf(tempName, "s%d", i);
|
||||
UI_LoadResource(tempName);
|
||||
}
|
||||
|
||||
Hunk_FreeTempMemory( shaderSubdivisions );
|
||||
|
||||
+27
-36
@@ -30,7 +30,9 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#define PRODUCT_NAME "OpenMoHAA"
|
||||
#define PRODUCT_VERSION "0.50-alpha"
|
||||
#define PRODUCT_VERSION_NUMBER "0.51"
|
||||
#define PRODUCT_VERSION_STAGE "alpha"
|
||||
#define PRODUCT_VERSION PRODUCT_VERSION_NUMBER "-" PRODUCT_VERSION_STAGE
|
||||
#define PRODUCT_DATE __DATE__
|
||||
|
||||
#if TARGET_GAME_TYPE == 1
|
||||
@@ -1608,7 +1610,7 @@ typedef struct {
|
||||
|
||||
// maybe this is better put somewhere else...
|
||||
typedef struct server_sound_s {
|
||||
float origin[3];
|
||||
vec3_t origin;
|
||||
int entity_number;
|
||||
int channel;
|
||||
short int sound_index;
|
||||
@@ -1712,44 +1714,33 @@ typedef struct playerState_s {
|
||||
|
||||
//====================================================================
|
||||
|
||||
#define BUTTON_ATTACKRIGHT_BITINDEX 0
|
||||
#define BUTTON_ATTACKLEFT_BITINDEX 1
|
||||
#define BUTTON_SNEAK_BITINDEX 2
|
||||
#define BUTTON_RUN_BITINDEX 3
|
||||
#define BUTTON_HOLSTERWEAPON_BITINDEX 4
|
||||
#define BUTTON_USE_BITINDEX 5
|
||||
#define BUTTON_TALK_BITINDEX 6 // displays talk balloon and disables actions
|
||||
#define BUTTON_ANY_BITINDEX 11 // any key whatsoever
|
||||
#define BUTTON_MOUSE_BITINDEX 14 // mouse move
|
||||
|
||||
//
|
||||
// usercmd_t->button bits, many of which are generated by the client system,
|
||||
// so they aren't game/cgame only definitions
|
||||
// so they aren't game-only definitions
|
||||
//
|
||||
#define BUTTON_ATTACK 1 // +/-attackprimary
|
||||
#define BUTTON_ATTACK2 2 // +/-attacksecondary
|
||||
#define BUTTON_RUN 4 // +/-speed
|
||||
// walking can't just be infered from MOVE_RUN
|
||||
// because a key pressed late in the frame will
|
||||
// only generate a small move value for that frame
|
||||
// walking will use different animations and
|
||||
// won't generate footsteps
|
||||
#define BUTTON_ATTACKLEFT_BITINDEX 0
|
||||
#define BUTTON_ATTACKRIGHT_BITINDEX 1
|
||||
#define BUTTON_RUN_BITINDEX 2
|
||||
#define BUTTON_USE_BITINDEX 3
|
||||
#define BUTTON_LEAN_LEFT_BITINDEX 4
|
||||
#define BUTTON_LEAN_RIGHT_BITINDEX 5
|
||||
#define BUTTON_TALK_BITINDEX 6 // displays talk balloon and disables actions
|
||||
#define BUTTON_ANY_BITINDEX 10 // any key whatsoever
|
||||
#define BUTTON_ANY2_BITINDEX 11 // any key whatsoever (regardless of keycatcher)
|
||||
#define BUTTON_MOUSE_BITINDEX 14 // mouse move
|
||||
#define BUTTON_HOLSTER_BITINDEX 15
|
||||
|
||||
#define BUTTON_USE 8
|
||||
#define BUTTON_LEANLEFT 16 // +/-leanleft
|
||||
#define BUTTON_LEANRIGHT 32 // +/-leanright
|
||||
#define BUTTON_NEGATIVE 64
|
||||
|
||||
#define BUTTON_GETFLAG 128
|
||||
#define BUTTON_GUARDBASE 256
|
||||
#define BUTTON_PATROL 512
|
||||
#define BUTTON_FOLLOWME 1024
|
||||
|
||||
#define BUTTON_HOLSTER 32768
|
||||
|
||||
#define BUTTON_TALK ( 1 << BUTTON_TALK_BITINDEX ) // displays talk balloon and disables actions
|
||||
#define BUTTON_ANY ( 1 << BUTTON_ANY_BITINDEX ) // any key whatsoever
|
||||
#define BUTTON_MOUSE ( 1 << BUTTON_MOUSE_BITINDEX )
|
||||
#define BUTTON_ATTACKLEFT (1 << BUTTON_ATTACKLEFT_BITINDEX)
|
||||
#define BUTTON_ATTACKRIGHT (1 << BUTTON_ATTACKRIGHT_BITINDEX)
|
||||
#define BUTTON_RUN (1 << BUTTON_RUN_BITINDEX)
|
||||
#define BUTTON_USE (1 << BUTTON_USE_BITINDEX)
|
||||
#define BUTTON_LEAN_LEFT (1 << BUTTON_LEAN_LEFT_BITINDEX)
|
||||
#define BUTTON_LEAN_RIGHT (1 << BUTTON_LEAN_RIGHT_BITINDEX)
|
||||
#define BUTTON_TALK (1 << BUTTON_TALK_BITINDEX) // displays talk balloon and disables actions
|
||||
#define BUTTON_ANY (1 << BUTTON_ANY_BITINDEX) // any key whatsoever
|
||||
#define BUTTON_ANY2 (1 << BUTTON_ANY_BITINDEX) // any key whatsoever (regardless of keycatcher)
|
||||
#define BUTTON_MOUSE (1 << BUTTON_MOUSE_BITINDEX)
|
||||
#define BUTTON_HOLSTER (1 << BUTTON_HOLSTER_BITINDEX)
|
||||
|
||||
#define WEAPON_COMMAND_USE_PISTOL 1
|
||||
#define WEAPON_COMMAND_USE_RIFLE 2
|
||||
|
||||
@@ -49,6 +49,8 @@ int gl_filter_max = GL_LINEAR;
|
||||
#define FILE_HASH_SIZE 1024
|
||||
static image_t* hashTable[FILE_HASH_SIZE];
|
||||
|
||||
extern qboolean scr_initialized;
|
||||
|
||||
/*
|
||||
** R_GammaCorrect
|
||||
*/
|
||||
@@ -1881,6 +1883,7 @@ Loads any of the supported image types into a cannonical
|
||||
*/
|
||||
static void R_LoadImage(const char* name, byte** pic, int* width, int* height, qboolean* hasAlpha, int* glCompressMode, int* numMipmaps, int* piMipmapsAvailable) {
|
||||
int len;
|
||||
char tempName[MAX_STRING_TOKENS + 1];
|
||||
|
||||
*hasAlpha = qfalse;
|
||||
*glCompressMode = 0;
|
||||
@@ -1918,6 +1921,12 @@ static void R_LoadImage(const char* name, byte** pic, int* width, int* height, q
|
||||
LoadJPG(name, pic, width, height);
|
||||
*piMipmapsAvailable = 1;
|
||||
}
|
||||
|
||||
if (scr_initialized)
|
||||
{
|
||||
sprintf(tempName, "n%s", name);
|
||||
UI_LoadResource(tempName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -216,7 +216,11 @@ extern uidef_t uid;
|
||||
extern uiexport_t uie;
|
||||
extern uiimport_t uii;
|
||||
|
||||
|
||||
void UI_Init(void);
|
||||
void UI_Shutdown(void);
|
||||
void UI_InitExports();
|
||||
qboolean CL_FinishedIntro(void);
|
||||
void UI_StartStageKeyEvent(void);
|
||||
void UI_GetMouseState( int *mouseX, int *mouseY, int *flags );
|
||||
int UI_GetCvarInt( const char *name, int def );
|
||||
float UI_GetCvarFloat( const char *name, float def );
|
||||
@@ -226,8 +230,5 @@ void UI_SetCvarInt( const char *cvar, int value );
|
||||
void UI_SetCvarFloat( const char *cvar, float value );
|
||||
void UI_ListFiles( const char *filespec );
|
||||
const char *UI_ConfigString( int index );
|
||||
void UI_Init( void );
|
||||
void UI_Shutdown( void );
|
||||
void UI_InitExports();
|
||||
|
||||
#endif
|
||||
+67
-9
@@ -24,12 +24,35 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
CLASS_DECLARATION( UIWidget, UIList, NULL )
|
||||
{
|
||||
{ &W_LeftMouseDown, &UIList::Pressed },
|
||||
{ &W_LeftMouseUp, &UIList::Released },
|
||||
{ &EV_Layout_AddListItem, &UIList::LayoutAddListItem },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
UIList::UIList()
|
||||
{
|
||||
// FIXME: stub
|
||||
m_arrow_width = 15.0;
|
||||
m_arrow_width = 0.0;
|
||||
m_currentItem = 0;
|
||||
m_next_arrow_region = 0;
|
||||
m_prev_arrow_region = 0;
|
||||
m_prev_arrow_depressed = 0;
|
||||
m_next_arrow_depressed = 0;
|
||||
|
||||
AllowActivate(true);
|
||||
|
||||
m_prev_arrow = uWinMan.RegisterShader("gfx/2d/arrow_left.tga");
|
||||
if (!m_prev_arrow) {
|
||||
uii.Sys_Printf("UIList::Ulist : Could not register shader gfx/2d/arrow_left.tga");
|
||||
}
|
||||
|
||||
|
||||
|
||||
m_next_arrow = uWinMan.RegisterShader("gfx/2d/arrow_right.tga");
|
||||
if (!m_next_arrow) {
|
||||
uii.Sys_Printf("UIList::Ulist : Could not register shader gfx/2d/arrow_right.tga");
|
||||
}
|
||||
}
|
||||
|
||||
void UIList::Draw
|
||||
@@ -48,8 +71,26 @@ qboolean UIList::KeyEvent
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return qfalse;
|
||||
switch (key)
|
||||
{
|
||||
case K_RIGHTARROW:
|
||||
ScrollNext();
|
||||
UpdateData();
|
||||
if (m_commandhandler) {
|
||||
m_commandhandler(m_itemlist.ObjectAt(m_currentItem)->itemname.c_str(), NULL);
|
||||
}
|
||||
return qtrue;
|
||||
case K_LEFTARROW:
|
||||
ScrollPrev();
|
||||
UpdateData();
|
||||
if (m_commandhandler) {
|
||||
m_commandhandler(m_itemlist.ObjectAt(m_currentItem)->itemname.c_str(), NULL);
|
||||
}
|
||||
return qtrue;
|
||||
default:
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void UIList::CharEvent
|
||||
@@ -58,7 +99,6 @@ void UIList::CharEvent
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
}
|
||||
|
||||
void UIList::Pressed
|
||||
@@ -85,7 +125,10 @@ void UIList::ScrollNext
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_currentItem++;
|
||||
if (m_currentItem > m_itemlist.NumObjects()) {
|
||||
m_currentItem = m_itemlist.NumObjects();
|
||||
}
|
||||
}
|
||||
|
||||
void UIList::ScrollPrev
|
||||
@@ -94,7 +137,10 @@ void UIList::ScrollPrev
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_currentItem--;
|
||||
if (m_currentItem < 1) {
|
||||
m_currentItem = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void UIList::FrameInitialized
|
||||
@@ -103,7 +149,8 @@ void UIList::FrameInitialized
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_prev_arrow_region = new UIRect2D(m_clippedframe.pos.x, m_clippedframe.pos.y, m_arrow_width, m_frame.size.height);
|
||||
m_next_arrow_region = new UIRect2D(m_clippedframe.size.width - m_arrow_width + m_clippedframe.pos.x, m_clippedframe.pos.y, m_arrow_width, m_frame.size.height);
|
||||
}
|
||||
|
||||
void UIList::LayoutAddListItem
|
||||
@@ -155,6 +202,17 @@ qboolean UIListIndex::KeyEvent
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return qfalse;
|
||||
switch (key)
|
||||
{
|
||||
case K_RIGHTARROW:
|
||||
ScrollNext();
|
||||
UpdateData();
|
||||
return qtrue;
|
||||
case K_LEFTARROW:
|
||||
ScrollPrev();
|
||||
UpdateData();
|
||||
return qtrue;
|
||||
default:
|
||||
return qfalse;
|
||||
}
|
||||
}
|
||||
+192
-29
@@ -29,7 +29,10 @@ CLASS_DECLARATION( UIWidget, UIListBase, NULL )
|
||||
|
||||
UIListBase::UIListBase()
|
||||
{
|
||||
// FIXME: stub
|
||||
m_currentItem = 0;
|
||||
m_vertscroll = 0;
|
||||
m_bUseVertScroll = 1;
|
||||
AllowActivate(true);
|
||||
}
|
||||
|
||||
void UIListBase::TrySelectItem
|
||||
@@ -58,7 +61,13 @@ void UIListBase::FrameInitialized
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (m_vertscroll) {
|
||||
delete m_vertscroll;
|
||||
}
|
||||
|
||||
m_vertscroll = new UIVertScroll();
|
||||
m_vertscroll->InitFrame(this, m_frame.size.width - 16.0, 0.0, 16.0, m_frame.size.height, -1);
|
||||
m_vertscroll->setTopItem(0);
|
||||
}
|
||||
|
||||
int UIListBase::getCurrentItem
|
||||
@@ -67,8 +76,7 @@ int UIListBase::getCurrentItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
return m_currentItem;
|
||||
}
|
||||
|
||||
int UIListBase::getNumItems
|
||||
@@ -77,8 +85,7 @@ int UIListBase::getNumItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void UIListBase::DeleteAllItems
|
||||
@@ -87,7 +94,6 @@ void UIListBase::DeleteAllItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
}
|
||||
|
||||
void UIListBase::DeleteItem
|
||||
@@ -96,7 +102,6 @@ void UIListBase::DeleteItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
}
|
||||
|
||||
UIVertScroll *UIListBase::GetScrollBar
|
||||
@@ -105,8 +110,7 @@ UIVertScroll *UIListBase::GetScrollBar
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return NULL;
|
||||
return m_vertscroll;
|
||||
}
|
||||
|
||||
void UIListBase::SetUseScrollBar
|
||||
@@ -115,12 +119,28 @@ void UIListBase::SetUseScrollBar
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_bUseVertScroll = bUse;
|
||||
|
||||
if (bUse)
|
||||
{
|
||||
if (!m_vertscroll) {
|
||||
m_vertscroll = new UIVertScroll();
|
||||
}
|
||||
|
||||
m_vertscroll->InitFrame(this, m_frame.size.width - 16.0, 0.0, 16.0, m_frame.size.height, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_vertscroll) {
|
||||
delete m_vertscroll;
|
||||
m_vertscroll = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListItem::ListItem()
|
||||
{
|
||||
// FIXME: stub
|
||||
index = -1;
|
||||
}
|
||||
|
||||
ListItem::ListItem
|
||||
@@ -131,17 +151,71 @@ ListItem::ListItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
this->string = string;
|
||||
this->index = index;
|
||||
this->command = command;
|
||||
}
|
||||
|
||||
Event EV_UIListBase_ItemSelected
|
||||
(
|
||||
"listbase_item_selected",
|
||||
EV_DEFAULT,
|
||||
"i",
|
||||
"index",
|
||||
"Signaled when an item is selected"
|
||||
);
|
||||
|
||||
Event EV_UIListBase_ItemDoubleClicked
|
||||
(
|
||||
"listbase_item_doubleclicked",
|
||||
EV_DEFAULT,
|
||||
"i",
|
||||
"index",
|
||||
"Signaled when an item is double clicked"
|
||||
);
|
||||
|
||||
Event EV_Layout_AddListItem
|
||||
(
|
||||
"additem",
|
||||
EV_DEFAULT,
|
||||
"sS",
|
||||
"itemname command",
|
||||
"Add an item to the list"
|
||||
);
|
||||
|
||||
Event EV_Layout_AddConfigstringListItem
|
||||
(
|
||||
"addconfigstringitem",
|
||||
EV_DEFAULT,
|
||||
"iS",
|
||||
"index command",
|
||||
"Add an item to the list that uses a configstring"
|
||||
);
|
||||
|
||||
Event EV_UIListBox_DeleteAllItems
|
||||
(
|
||||
"deleteallitems",
|
||||
EV_DEFAULT,
|
||||
NULL,
|
||||
NULL,
|
||||
"Delete all the items from the widget"
|
||||
);
|
||||
|
||||
CLASS_DECLARATION( UIListBase, UIListBox, NULL )
|
||||
{
|
||||
{ &W_LeftMouseDown, &UIListBox::MousePressed },
|
||||
{ &W_LeftMouseUp, &UIListBox::MouseReleased },
|
||||
{ &EV_Layout_AddListItem, &UIListBox::LayoutAddListItem },
|
||||
{ &EV_Layout_AddConfigstringListItem, &UIListBox::LayoutAddConfigstringListItem },
|
||||
{ &EV_UIListBox_DeleteAllItems, &UIListBox::DeleteAllItems },
|
||||
{ &EV_Layout_Font, &UIListBox::SetListFont },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
UIListBox::UIListBox()
|
||||
{
|
||||
// FIXME: stub
|
||||
m_clickState.point.x = 0.0;
|
||||
m_clickState.point.y = 0.0;
|
||||
}
|
||||
|
||||
void UIListBox::Draw
|
||||
@@ -168,7 +242,6 @@ void UIListBox::MouseReleased
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
}
|
||||
|
||||
void UIListBox::DeleteAllItems
|
||||
@@ -177,7 +250,14 @@ void UIListBox::DeleteAllItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.ClearObjectList();
|
||||
m_currentItem = 0;
|
||||
|
||||
if (m_vertscroll)
|
||||
{
|
||||
m_vertscroll->setNumItems(0);
|
||||
m_vertscroll->setTopItem(0);
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::SetListFont
|
||||
@@ -186,7 +266,13 @@ void UIListBox::SetListFont
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
LayoutFont(ev);
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setPageHeight(m_frame.size.height / m_font->getHeight(m_bVirtual));
|
||||
}
|
||||
|
||||
FrameInitialized();
|
||||
}
|
||||
|
||||
void UIListBox::TrySelectItem
|
||||
@@ -195,7 +281,16 @@ void UIListBox::TrySelectItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
UIListBase::TrySelectItem(which);
|
||||
|
||||
if (!getNumItems()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_cvarname.length())
|
||||
{
|
||||
uii.Cvar_Set(m_cvarname.c_str(), m_itemlist.ObjectAt(m_currentItem)->string.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::AddItem
|
||||
@@ -205,7 +300,27 @@ void UIListBox::AddItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
ListItem* li;
|
||||
|
||||
li = new ListItem();
|
||||
if (!li) {
|
||||
uii.Sys_Error(ERR_DROP, "Couldn't create list item\n");
|
||||
}
|
||||
|
||||
li->string = item;
|
||||
if (command) {
|
||||
li->command = command;
|
||||
}
|
||||
|
||||
m_itemlist.AddObject(li);
|
||||
|
||||
if (!m_currentItem) {
|
||||
m_currentItem = 1;
|
||||
}
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::AddItem
|
||||
@@ -215,7 +330,27 @@ void UIListBox::AddItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
ListItem* li;
|
||||
|
||||
li = new ListItem();
|
||||
if (!li) {
|
||||
uii.Sys_Error(ERR_DROP, "Couldn't create list item\n");
|
||||
}
|
||||
|
||||
li->index = index;
|
||||
if (command) {
|
||||
li->command = command;
|
||||
}
|
||||
|
||||
m_itemlist.AddObject(li);
|
||||
|
||||
if (!m_currentItem) {
|
||||
m_currentItem = 1;
|
||||
}
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::FrameInitialized
|
||||
@@ -224,7 +359,12 @@ void UIListBox::FrameInitialized
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
UIListBase::FrameInitialized();
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setPageHeight(m_frame.size.height / m_font->getHeight(m_bVirtual));
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::LayoutAddListItem
|
||||
@@ -233,7 +373,12 @@ void UIListBox::LayoutAddListItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (ev->NumArgs() != 2) {
|
||||
AddItem(ev->GetString(1), NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
AddItem(ev->GetString(1), ev->GetString(2).c_str());
|
||||
}
|
||||
|
||||
void UIListBox::LayoutAddConfigstringListItem
|
||||
@@ -242,7 +387,12 @@ void UIListBox::LayoutAddConfigstringListItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (ev->NumArgs() != 2) {
|
||||
AddItem(ev->GetInteger(1), NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
AddItem(ev->GetInteger(1), ev->GetString(2).c_str());
|
||||
}
|
||||
|
||||
str UIListBox::getItemText
|
||||
@@ -251,8 +401,7 @@ str UIListBox::getItemText
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return "";
|
||||
return m_itemlist.ObjectAt(which)->string;
|
||||
}
|
||||
|
||||
int UIListBox::getNumItems
|
||||
@@ -261,8 +410,7 @@ int UIListBox::getNumItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
return m_itemlist.NumObjects();
|
||||
}
|
||||
|
||||
void UIListBox::DeleteAllItems
|
||||
@@ -271,7 +419,14 @@ void UIListBox::DeleteAllItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.ClearObjectList();
|
||||
m_currentItem = 0;
|
||||
|
||||
if (m_vertscroll)
|
||||
{
|
||||
m_vertscroll->setNumItems(0);
|
||||
m_vertscroll->setTopItem(0);
|
||||
}
|
||||
}
|
||||
|
||||
void UIListBox::DeleteItem
|
||||
@@ -280,5 +435,13 @@ void UIListBox::DeleteItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.RemoveObjectAt(which);
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
|
||||
if (m_currentItem > getNumItems()) {
|
||||
TrySelectItem(getNumItems());
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#ifndef __UILISTBOX_H__
|
||||
#define __UILISTBOX_H__
|
||||
|
||||
extern Event EV_Layout_AddListItem;
|
||||
|
||||
class UIListBase : public UIWidget {
|
||||
protected:
|
||||
int m_currentItem;
|
||||
|
||||
+474
-84
@@ -21,66 +21,35 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "ui_local.h"
|
||||
#include "localization.h"
|
||||
|
||||
griditemtype_t UIListCtrlItem::getListItemType
|
||||
(
|
||||
int which
|
||||
) const
|
||||
static UISize2D s_columnpadding;
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return TYPE_STRING;
|
||||
}
|
||||
|
||||
str UIListCtrlItem::getListItemString
|
||||
(
|
||||
int which
|
||||
) const
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return "";
|
||||
}
|
||||
|
||||
int UIListCtrlItem::getListItemValue
|
||||
(
|
||||
int which
|
||||
) const
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UIListCtrlItem::DrawListItem
|
||||
(
|
||||
int,
|
||||
UIRect2D const &,
|
||||
bool, UIFont *
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
}
|
||||
|
||||
qboolean UIListCtrlItem::IsHeaderEntry
|
||||
(
|
||||
void
|
||||
) const
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return qfalse;
|
||||
}
|
||||
bool UIListCtrl::s_qsortreverse;
|
||||
int UIListCtrl::s_qsortcolumn;
|
||||
class UIListCtrl* UIListCtrl::s_qsortobject;
|
||||
|
||||
CLASS_DECLARATION( UIListBase, UIListCtrl, NULL )
|
||||
{
|
||||
{ &W_SizeChanged, &UIListCtrl::OnSizeChanged },
|
||||
{ &W_LeftMouseDown, &UIListCtrl::MousePressed },
|
||||
{ &W_LeftMouseUp, &UIListCtrl::MouseReleased },
|
||||
{ &W_LeftMouseDragged, &UIListCtrl::MouseDragged },
|
||||
{ &W_MouseEntered, &UIListCtrl::MouseEntered },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
UIListCtrl::UIListCtrl()
|
||||
{
|
||||
// FIXME: stub
|
||||
m_clickState.point.x = m_clickState.point.y = 0;
|
||||
m_sizestate.column = 0;
|
||||
m_iLastSortColumn = 0;
|
||||
m_bDrawHeader = qtrue;
|
||||
m_headerfont = NULL;
|
||||
|
||||
Connect(this, W_SizeChanged, W_SizeChanged);
|
||||
m_background_color = UColor(0.02f, 0.07f, 0.005f, 1.0f);
|
||||
m_foreground_color = UHudColor;
|
||||
}
|
||||
|
||||
int UIListCtrl::StringCompareFunction
|
||||
@@ -91,8 +60,34 @@ int UIListCtrl::StringCompareFunction
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
if (i1->getListItemType(columnname) != TYPE_STRING || i2->getListItemType(columnname) != TYPE_STRING) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char* s1 = i1->getListItemString(columnname);
|
||||
const char* s2 = i2->getListItemString(columnname);
|
||||
|
||||
if (*s1 == '.')
|
||||
{
|
||||
if (*s2 != '.') {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (*s2 == '.') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (*s1 == '[')
|
||||
{
|
||||
if (*s2 != '[') {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (*s2 == '[') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return Q_stricmp(s1, s2);
|
||||
}
|
||||
|
||||
int UIListCtrl::StringNumberCompareFunction
|
||||
@@ -103,8 +98,18 @@ int UIListCtrl::StringNumberCompareFunction
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
int val1, val2;
|
||||
|
||||
val1 = i1->getListItemValue(columnname);
|
||||
val2 = i2->getListItemValue(columnname);
|
||||
|
||||
if (val1 > val2) {
|
||||
return 1;
|
||||
} else if (val1 < val2) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int UIListCtrl::QsortCompare
|
||||
@@ -114,8 +119,8 @@ int UIListCtrl::QsortCompare
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
int val = s_qsortobject->m_comparefunction((const UIListCtrlItem*)e1, (const UIListCtrlItem*)e2, s_qsortcolumn);
|
||||
return s_qsortreverse ? -val : val;
|
||||
}
|
||||
|
||||
void UIListCtrl::Draw
|
||||
@@ -124,7 +129,11 @@ void UIListCtrl::Draw
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (m_bDrawHeader) {
|
||||
DrawColumns();
|
||||
}
|
||||
|
||||
DrawContent();
|
||||
}
|
||||
|
||||
int UIListCtrl::getHeaderHeight
|
||||
@@ -133,8 +142,19 @@ int UIListCtrl::getHeaderHeight
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
if (!m_bDrawHeader) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (m_headerfont) {
|
||||
return (int)(m_headerfont->getHeight(m_bVirtual) + (s_columnpadding.height + s_columnpadding.height) * m_vVirtualScale[1]);
|
||||
}
|
||||
|
||||
if (m_font) {
|
||||
return (int)(m_font->getHeight(m_bVirtual) + (s_columnpadding.height + s_columnpadding.height) * m_vVirtualScale[1]);
|
||||
}
|
||||
|
||||
return (int)((s_columnpadding.height + s_columnpadding.height) * m_vVirtualScale[1]);
|
||||
}
|
||||
|
||||
void UIListCtrl::MousePressed
|
||||
@@ -143,7 +163,73 @@ void UIListCtrl::MousePressed
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
UIPoint2D p;
|
||||
|
||||
p = MouseEventToClientPoint(ev);
|
||||
|
||||
if (m_clicksound.length()) {
|
||||
uii.Snd_PlaySound(m_clicksound.c_str());
|
||||
}
|
||||
|
||||
if (getHeaderHeight() > p.y)
|
||||
{
|
||||
int closesep = 0;
|
||||
int atleft = 0;
|
||||
int closeatleft = 0;
|
||||
int insep = 0;
|
||||
|
||||
for (int i = 1; i <= m_columnlist.NumObjects(); i++) {
|
||||
const columndef_t& column = m_columnlist.ObjectAt(i);
|
||||
atleft += column.width;
|
||||
|
||||
if (abs(atleft - p.x) > 2)
|
||||
{
|
||||
if (atleft - column.width < p.x && atleft > p.x) {
|
||||
insep = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
closesep = i;
|
||||
closeatleft = atleft;
|
||||
}
|
||||
}
|
||||
|
||||
if (closesep)
|
||||
{
|
||||
m_sizestate.column = closesep;
|
||||
m_sizestate.min = closeatleft - m_columnlist.ObjectAt(closesep).width;
|
||||
uWinMan.setFirstResponder(this);
|
||||
} else {
|
||||
SortByColumn(m_columnlist.ObjectAt(insep).name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_vertscroll) {
|
||||
TrySelectItem((m_vertscroll->getTopItem() + 1) + (p.y - getHeaderHeight()) / m_font->getHeight(m_bVirtual));
|
||||
} else {
|
||||
TrySelectItem(1.0 + (p.y - getHeaderHeight()) / m_font->getHeight(m_bVirtual));
|
||||
}
|
||||
|
||||
if (m_clickState.time + 500 > uid.time
|
||||
&& m_currentItem == m_clickState.selected
|
||||
&& fabs(m_clickState.point.x - p.x) <= 2.0
|
||||
&& fabs(m_clickState.point.y - p.y) <= 2.0)
|
||||
{
|
||||
Event newev;
|
||||
newev.AddInteger(m_currentItem);
|
||||
SendSignal(newev);
|
||||
m_clickState.time = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_clickState.time = uid.time;
|
||||
m_clickState.selected = m_currentItem;
|
||||
m_clickState.point.x = p.x;
|
||||
m_clickState.point.y = p.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::MouseDragged
|
||||
@@ -152,7 +238,23 @@ void UIListCtrl::MouseDragged
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
UIPoint2D p;
|
||||
int newwidth;
|
||||
|
||||
p = MouseEventToClientPoint(ev);
|
||||
if (m_sizestate.column)
|
||||
{
|
||||
columndef_t& column = m_columnlist.ObjectAt(m_sizestate.column);
|
||||
|
||||
newwidth = p.x - m_sizestate.min;
|
||||
if (newwidth > 600) {
|
||||
newwidth = 600;
|
||||
} else if (newwidth < 0) {
|
||||
newwidth = 0;
|
||||
}
|
||||
|
||||
column.width = newwidth;
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::MouseReleased
|
||||
@@ -161,7 +263,11 @@ void UIListCtrl::MouseReleased
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_sizestate.column = 0;
|
||||
|
||||
if (uWinMan.getFirstResponder() == this) {
|
||||
uWinMan.setFirstResponder(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::MouseEntered
|
||||
@@ -170,7 +276,7 @@ void UIListCtrl::MouseEntered
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
uWinMan.ActivateControl(this);
|
||||
}
|
||||
|
||||
void UIListCtrl::OnSizeChanged
|
||||
@@ -179,7 +285,13 @@ void UIListCtrl::OnSizeChanged
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (!m_vertscroll) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_vertscroll->InitFrame(this, m_frame.size.width - 16.0, 0.0, 16.0, m_frame.size.height, -1);
|
||||
m_vertscroll->setPageHeight((m_frame.size.height - getHeaderHeight()) / m_font->getHeight(m_bVirtual));
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
|
||||
void UIListCtrl::DrawColumns
|
||||
@@ -188,7 +300,57 @@ void UIListCtrl::DrawColumns
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
int atleft;
|
||||
int i;
|
||||
int height;
|
||||
UIFont* pFont;
|
||||
UColor columnColor, textColor;
|
||||
|
||||
atleft = 0;
|
||||
columnColor = UColor(0.07f, 0.06f, 0.005f, 1.0f);
|
||||
textColor = UHudColor;
|
||||
|
||||
pFont = m_headerfont;
|
||||
if (!pFont) pFont = m_font;
|
||||
|
||||
height = (s_columnpadding.height + s_columnpadding.height) * m_vVirtualScale[1] + pFont->getHeight(m_bVirtual);
|
||||
pFont->setColor(textColor);
|
||||
|
||||
for (i = 1; i <= m_columnlist.NumObjects(); i++)
|
||||
{
|
||||
const columndef_t& column = m_columnlist.ObjectAt(i);
|
||||
|
||||
DrawBoxWithSolidBorder(
|
||||
UIRect2D(atleft, 0, column.width + m_vVirtualScale[1], height),
|
||||
columnColor,
|
||||
textColor,
|
||||
1,
|
||||
3,
|
||||
m_local_alpha
|
||||
);
|
||||
|
||||
pFont->Print(
|
||||
atleft / m_vVirtualScale[0] + s_columnpadding.width,
|
||||
s_columnpadding.height,
|
||||
Sys_LV_CL_ConvertString(column.title.c_str()),
|
||||
-1,
|
||||
m_bVirtual
|
||||
);
|
||||
|
||||
atleft += column.width;
|
||||
}
|
||||
|
||||
if (m_frame.size.width > atleft)
|
||||
{
|
||||
DrawBoxWithSolidBorder(
|
||||
UIRect2D(atleft, 0, m_frame.size.width - atleft + 1.0, height),
|
||||
columnColor,
|
||||
textColor,
|
||||
1,
|
||||
3,
|
||||
m_local_alpha
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::DrawContent
|
||||
@@ -197,7 +359,110 @@ void UIListCtrl::DrawContent
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
int item;
|
||||
int height, headerheight, iItemHeight;
|
||||
UIFont* pFont;
|
||||
int top;
|
||||
UColor selColor, selText;
|
||||
UColor backColor, textColor;
|
||||
|
||||
height = m_font->getHeight(m_bVirtual);
|
||||
selColor = UColor(0.21f, 0.18f, 0.015f, 1.0f);
|
||||
selText = UColor(0.9f, 0.8f, 0.6f, 1.0f);
|
||||
backColor = m_background_color;
|
||||
textColor = m_foreground_color;
|
||||
|
||||
if (m_headerfont) {
|
||||
headerheight = m_headerfont->getHeight(m_bVirtual);
|
||||
} else {
|
||||
headerheight = 0;
|
||||
}
|
||||
|
||||
selColor.a = m_local_alpha;
|
||||
selText.a = m_local_alpha;
|
||||
backColor.a = m_local_alpha;
|
||||
textColor.a = m_local_alpha;
|
||||
top = getHeaderHeight();
|
||||
if (m_vertscroll) {
|
||||
item = m_vertscroll->getTopItem() + 1;
|
||||
} else {
|
||||
item = 1;
|
||||
}
|
||||
|
||||
for (; item <= m_itemlist.NumObjects(); item++)
|
||||
{
|
||||
UIListCtrlItem* theitem;
|
||||
int col;
|
||||
int atleft;
|
||||
UColor* itemBg;
|
||||
UColor* itemText;
|
||||
|
||||
theitem = m_itemlist.ObjectAt(item);
|
||||
atleft = 0;
|
||||
|
||||
if (item == m_currentItem)
|
||||
{
|
||||
itemBg = &selColor;
|
||||
itemText = &selText;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemBg = &backColor;
|
||||
itemText = &textColor;
|
||||
}
|
||||
|
||||
if (theitem->IsHeaderEntry() && m_headerfont) {
|
||||
pFont = m_headerfont;
|
||||
iItemHeight = headerheight;
|
||||
} else {
|
||||
pFont = m_font;
|
||||
iItemHeight = height;
|
||||
}
|
||||
|
||||
pFont->setColor(*itemText);
|
||||
for (col = 1; col <= m_columnlist.NumObjects(); col++)
|
||||
{
|
||||
columndef_t& column = m_columnlist.ObjectAt(col);
|
||||
UIRect2D drawRect(atleft, top, column.width, iItemHeight);
|
||||
griditemtype_t itemtype = theitem->getListItemType(column.name);
|
||||
|
||||
switch (itemtype)
|
||||
{
|
||||
case TYPE_STRING:
|
||||
DrawBox(drawRect, *itemBg, m_local_alpha);
|
||||
pFont->Print(
|
||||
drawRect.pos.x / m_vVirtualScale[0] + 1.0,
|
||||
drawRect.pos.y / m_vVirtualScale[1],
|
||||
Sys_LV_CL_ConvertString(theitem->getListItemString(column.name)),
|
||||
-1,
|
||||
m_bVirtual
|
||||
);
|
||||
break;
|
||||
case TYPE_OWNERDRAW:
|
||||
theitem->DrawListItem(column.name, drawRect, item == m_currentItem, pFont);
|
||||
break;
|
||||
}
|
||||
|
||||
atleft += column.width;
|
||||
}
|
||||
|
||||
if (m_frame.size.width > atleft)
|
||||
{
|
||||
DrawBox(
|
||||
atleft,
|
||||
top,
|
||||
m_frame.size.width - atleft,
|
||||
height,
|
||||
*itemBg,
|
||||
m_local_alpha
|
||||
);
|
||||
}
|
||||
|
||||
top += iItemHeight;
|
||||
if (iItemHeight + top > m_frame.size.height) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::FrameInitialized
|
||||
@@ -206,7 +471,8 @@ void UIListCtrl::FrameInitialized
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
UIListBase::FrameInitialized();
|
||||
OnSizeChanged(NULL);
|
||||
}
|
||||
|
||||
void UIListCtrl::SetDrawHeader
|
||||
@@ -215,7 +481,7 @@ void UIListCtrl::SetDrawHeader
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_bDrawHeader = bDrawHeader;
|
||||
}
|
||||
|
||||
void UIListCtrl::AddItem
|
||||
@@ -224,7 +490,10 @@ void UIListCtrl::AddItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.AddObject(item);
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::InsertItem
|
||||
@@ -233,7 +502,26 @@ void UIListCtrl::InsertItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (where > 0 && where <= m_itemlist.NumObjects())
|
||||
{
|
||||
int i;
|
||||
|
||||
m_itemlist.AddObject(NULL);
|
||||
|
||||
for (i = m_itemlist.NumObjects(); i > where; i++) {
|
||||
m_itemlist.SetObjectAt(i, m_itemlist.ObjectAt(i - 1));
|
||||
}
|
||||
|
||||
m_itemlist.SetObjectAt(where, item);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_itemlist.AddObject(item);
|
||||
}
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
}
|
||||
|
||||
int UIListCtrl::FindItem
|
||||
@@ -242,8 +530,7 @@ int UIListCtrl::FindItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
return m_itemlist.IndexOfObject(item);
|
||||
}
|
||||
|
||||
UIListCtrlItem *UIListCtrl::GetItem
|
||||
@@ -252,8 +539,7 @@ UIListCtrlItem *UIListCtrl::GetItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return NULL;
|
||||
return m_itemlist.ObjectAt(item);
|
||||
}
|
||||
|
||||
void UIListCtrl::AddColumn
|
||||
@@ -266,7 +552,15 @@ void UIListCtrl::AddColumn
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
columndef_t column;
|
||||
|
||||
column.title = title;
|
||||
column.name = name;
|
||||
column.width = width;
|
||||
column.numeric = numeric;
|
||||
column.reverse_sort = reverse_sort;
|
||||
|
||||
m_columnlist.AddObject(column);
|
||||
}
|
||||
|
||||
void UIListCtrl::RemoveAllColumns
|
||||
@@ -275,7 +569,7 @@ void UIListCtrl::RemoveAllColumns
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_columnlist.ClearObjectList();
|
||||
}
|
||||
|
||||
int UIListCtrl::getNumItems
|
||||
@@ -284,8 +578,7 @@ int UIListCtrl::getNumItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
return 0;
|
||||
return m_itemlist.NumObjects();
|
||||
}
|
||||
|
||||
void UIListCtrl::DeleteAllItems
|
||||
@@ -294,7 +587,14 @@ void UIListCtrl::DeleteAllItems
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.ClearObjectList();
|
||||
m_currentItem = 0;
|
||||
|
||||
if (m_vertscroll)
|
||||
{
|
||||
m_vertscroll->setNumItems(0);
|
||||
m_vertscroll->setTopItem(0);
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::DeleteItem
|
||||
@@ -303,7 +603,15 @@ void UIListCtrl::DeleteItem
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_itemlist.RemoveObjectAt(which);
|
||||
|
||||
if (m_vertscroll) {
|
||||
m_vertscroll->setNumItems(m_itemlist.NumObjects());
|
||||
}
|
||||
|
||||
if (m_currentItem > getNumItems()) {
|
||||
TrySelectItem(getNumItems());
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::SortByColumn
|
||||
@@ -312,7 +620,81 @@ void UIListCtrl::SortByColumn
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
int i;
|
||||
bool exists;
|
||||
bool numeric;
|
||||
bool reverse;
|
||||
UIListCtrlItem* selected;
|
||||
bool selvisible;
|
||||
|
||||
exists = 0;
|
||||
numeric = 0;
|
||||
reverse = 0;
|
||||
selected = NULL;
|
||||
selvisible = 0;
|
||||
|
||||
for (i = 1; i <= m_columnlist.NumObjects(); i++) {
|
||||
columndef_t& def = m_columnlist.ObjectAt(i);
|
||||
|
||||
if (def.name == i) {
|
||||
numeric = def.numeric;
|
||||
reverse = def.reverse_sort;
|
||||
exists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (exists)
|
||||
{
|
||||
m_iLastSortColumn = column;
|
||||
s_qsortcolumn = column;
|
||||
s_qsortobject = this;
|
||||
s_qsortreverse = reverse;
|
||||
|
||||
if (m_currentItem)
|
||||
{
|
||||
selected = m_itemlist.ObjectAt(m_currentItem);
|
||||
if (m_vertscroll)
|
||||
{
|
||||
selvisible = false;
|
||||
if (m_currentItem >= m_vertscroll->getTopItem() + 1) {
|
||||
selvisible = m_currentItem <= m_vertscroll->getPageHeight() + m_vertscroll->getTopItem();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
selvisible = false;
|
||||
// FIXME: selvisible when there is no vertical scroll?
|
||||
//
|
||||
//if (m_currentItem > 0) {
|
||||
// selvisible = m_currentItem <= m_vertscroll->m_pageheight + m_vertscroll->getTopItem();
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
if (numeric) {
|
||||
m_comparefunction = &UIListCtrl::StringNumberCompareFunction;
|
||||
} else {
|
||||
m_comparefunction = &UIListCtrl::StringCompareFunction;
|
||||
}
|
||||
|
||||
if (m_itemlist.NumObjects()) {
|
||||
m_itemlist.Sort(&UIListCtrl::QsortCompare);
|
||||
}
|
||||
|
||||
if (selected)
|
||||
{
|
||||
if (selvisible) {
|
||||
TrySelectItem(FindItem(selected));
|
||||
} else {
|
||||
m_currentItem = FindItem(selected);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_iLastSortColumn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void UIListCtrl::SortByLastSortColumn
|
||||
@@ -321,7 +703,7 @@ void UIListCtrl::SortByLastSortColumn
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
SortByColumn(m_iLastSortColumn);
|
||||
}
|
||||
|
||||
void UIListCtrl::setCompareFunction
|
||||
@@ -330,7 +712,7 @@ void UIListCtrl::setCompareFunction
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
m_comparefunction = func;
|
||||
}
|
||||
|
||||
void UIListCtrl::setHeaderFont
|
||||
@@ -339,5 +721,13 @@ void UIListCtrl::setHeaderFont
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
if (m_headerfont) {
|
||||
delete m_headerfont;
|
||||
}
|
||||
|
||||
if (name) {
|
||||
m_headerfont = new UIFont(name);
|
||||
} else {
|
||||
m_headerfont = NULL;
|
||||
}
|
||||
}
|
||||
@@ -27,11 +27,11 @@ typedef enum { TYPE_STRING, TYPE_OWNERDRAW } griditemtype_t;
|
||||
|
||||
class UIListCtrlItem {
|
||||
public:
|
||||
virtual griditemtype_t getListItemType( int which ) const;
|
||||
virtual str getListItemString( int which ) const;
|
||||
virtual int getListItemValue( int which ) const;
|
||||
virtual void DrawListItem( int iColumn, const UIRect2D &drawRect, bool bSelected, UIFont *pFont );
|
||||
virtual qboolean IsHeaderEntry( void ) const;
|
||||
virtual griditemtype_t getListItemType( int which ) const = 0;
|
||||
virtual str getListItemString( int which ) const = 0;
|
||||
virtual int getListItemValue( int which ) const = 0;
|
||||
virtual void DrawListItem( int iColumn, const UIRect2D &drawRect, bool bSelected, UIFont *pFont ) = 0;
|
||||
virtual qboolean IsHeaderEntry( void ) const = 0;
|
||||
};
|
||||
|
||||
typedef struct m_clickState_s {
|
||||
@@ -54,6 +54,7 @@ protected:
|
||||
static bool s_qsortreverse;
|
||||
static int s_qsortcolumn;
|
||||
static class UIListCtrl *s_qsortobject;
|
||||
|
||||
int m_iLastSortColumn;
|
||||
class UIFont *m_headerfont;
|
||||
Container<UIListCtrlItem *> m_itemlist;
|
||||
@@ -66,7 +67,7 @@ protected:
|
||||
} m_sizestate;
|
||||
m_clickState_s m_clickState;
|
||||
|
||||
int( *m_comparefunction ) (/* unknown */ );
|
||||
int (*m_comparefunction) (const UIListCtrlItem* i1, const UIListCtrlItem* i2, int columnname);
|
||||
|
||||
public:
|
||||
CLASS_PROTOTYPE( UIListCtrl );
|
||||
|
||||
+13
-1
@@ -1201,7 +1201,19 @@ Sys_PumpMessageLoop
|
||||
*/
|
||||
void Sys_PumpMessageLoop(void)
|
||||
{
|
||||
// FIXME: stub
|
||||
MSG msg;
|
||||
|
||||
while (PeekMessageA(&msg, 0, 0, 0, 0))
|
||||
{
|
||||
if (!GetMessageA(&msg, 0, 0, 0)) {
|
||||
Com_Quit_f();
|
||||
}
|
||||
|
||||
g_wv.sysMsgTime = msg.time;
|
||||
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessageA(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in new issue
Block a user