Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

ui_playermodel.c File Reference

#include "ui_local.h"

Include dependency graph for ui_playermodel.c:

Include dependency graph

Go to the source code of this file.

Data Structures

struct  playermodel_t

Defines

#define ID_BACK   102
#define ID_NEXTPAGE   101
#define ID_PLAYERPIC0   0
#define ID_PLAYERPIC1   1
#define ID_PLAYERPIC10   10
#define ID_PLAYERPIC11   11
#define ID_PLAYERPIC12   12
#define ID_PLAYERPIC13   13
#define ID_PLAYERPIC14   14
#define ID_PLAYERPIC15   15
#define ID_PLAYERPIC2   2
#define ID_PLAYERPIC3   3
#define ID_PLAYERPIC4   4
#define ID_PLAYERPIC5   5
#define ID_PLAYERPIC6   6
#define ID_PLAYERPIC7   7
#define ID_PLAYERPIC8   8
#define ID_PLAYERPIC9   9
#define ID_PREVPAGE   100
#define LOW_MEMORY   (5 * 1024 * 1024)
#define MAX_MODELSPERPAGE   (PLAYERGRID_ROWS*PLAYERGRID_COLS)
#define MAX_PLAYERMODELS   256
#define MODEL_ARROWS   "menu/art/gs_arrows_0"
#define MODEL_ARROWSL   "menu/art/gs_arrows_l"
#define MODEL_ARROWSR   "menu/art/gs_arrows_r"
#define MODEL_BACK0   "menu/art/back_0"
#define MODEL_BACK1   "menu/art/back_1"
#define MODEL_FRAMEL   "menu/art/frame1_l"
#define MODEL_FRAMER   "menu/art/frame1_r"
#define MODEL_PORTS   "menu/art/player_models_ports"
#define MODEL_SELECT   "menu/art/opponents_select"
#define MODEL_SELECTED   "menu/art/opponents_selected"
#define PLAYERGRID_COLS   4
#define PLAYERGRID_ROWS   4

Functions

void PlayerModel_BuildList (void)
void PlayerModel_Cache (void)
void PlayerModel_DrawPlayer (void *self)
void PlayerModel_MenuEvent (void *ptr, int event)
void PlayerModel_MenuInit (void)
sfxHandle_t PlayerModel_MenuKey (int key)
void PlayerModel_PicEvent (void *ptr, int event)
void PlayerModel_SaveChanges (void)
void PlayerModel_SetMenuItems (void)
void PlayerModel_UpdateGrid (void)
void PlayerModel_UpdateModel (void)
void UI_PlayerModelMenu (void)

Variables

char * playermodel_artlist []
playermodel_t s_playermodel


Define Documentation

#define ID_BACK   102
 

Definition at line 77 of file ui_playermodel.c.

#define ID_NEXTPAGE   101
 

Definition at line 76 of file ui_playermodel.c.

Referenced by PlayerModel_MenuEvent(), and StartServer_MenuEvent().

#define ID_PLAYERPIC0   0
 

Definition at line 59 of file ui_playermodel.c.

Referenced by PlayerModel_MenuInit().

#define ID_PLAYERPIC1   1
 

Definition at line 60 of file ui_playermodel.c.

#define ID_PLAYERPIC10   10
 

Definition at line 69 of file ui_playermodel.c.

#define ID_PLAYERPIC11   11
 

Definition at line 70 of file ui_playermodel.c.

#define ID_PLAYERPIC12   12
 

Definition at line 71 of file ui_playermodel.c.

#define ID_PLAYERPIC13   13
 

Definition at line 72 of file ui_playermodel.c.

#define ID_PLAYERPIC14   14
 

Definition at line 73 of file ui_playermodel.c.

#define ID_PLAYERPIC15   15
 

Definition at line 74 of file ui_playermodel.c.

#define ID_PLAYERPIC2   2
 

Definition at line 61 of file ui_playermodel.c.

#define ID_PLAYERPIC3   3
 

Definition at line 62 of file ui_playermodel.c.

#define ID_PLAYERPIC4   4
 

Definition at line 63 of file ui_playermodel.c.

#define ID_PLAYERPIC5   5
 

Definition at line 64 of file ui_playermodel.c.

#define ID_PLAYERPIC6   6
 

Definition at line 65 of file ui_playermodel.c.

#define ID_PLAYERPIC7   7
 

Definition at line 66 of file ui_playermodel.c.

#define ID_PLAYERPIC8   8
 

Definition at line 67 of file ui_playermodel.c.

#define ID_PLAYERPIC9   9
 

Definition at line 68 of file ui_playermodel.c.

#define ID_PREVPAGE   100
 

Definition at line 75 of file ui_playermodel.c.

Referenced by PlayerModel_MenuEvent(), and StartServer_MenuEvent().

#define LOW_MEMORY   (5 * 1024 * 1024)
 

Definition at line 36 of file ui_playermodel.c.

#define MAX_MODELSPERPAGE   (PLAYERGRID_ROWS*PLAYERGRID_COLS)
 

Definition at line 55 of file ui_playermodel.c.

Referenced by PlayerModel_MenuKey(), PlayerModel_PicEvent(), PlayerModel_UpdateGrid(), UI_BotSelectMenu_BotEvent(), UI_BotSelectMenu_SelectEvent(), and UI_PlayerModelMenu().

#define MAX_PLAYERMODELS   256
 

Definition at line 57 of file ui_playermodel.c.

#define MODEL_ARROWS   "menu/art/gs_arrows_0"
 

Definition at line 32 of file ui_playermodel.c.

#define MODEL_ARROWSL   "menu/art/gs_arrows_l"
 

Definition at line 33 of file ui_playermodel.c.

#define MODEL_ARROWSR   "menu/art/gs_arrows_r"
 

Definition at line 34 of file ui_playermodel.c.

#define MODEL_BACK0   "menu/art/back_0"
 

Definition at line 25 of file ui_playermodel.c.

#define MODEL_BACK1   "menu/art/back_1"
 

Definition at line 26 of file ui_playermodel.c.

#define MODEL_FRAMEL   "menu/art/frame1_l"
 

Definition at line 29 of file ui_playermodel.c.

#define MODEL_FRAMER   "menu/art/frame1_r"
 

Definition at line 30 of file ui_playermodel.c.

#define MODEL_PORTS   "menu/art/player_models_ports"
 

Definition at line 31 of file ui_playermodel.c.

#define MODEL_SELECT   "menu/art/opponents_select"
 

Definition at line 27 of file ui_playermodel.c.

#define MODEL_SELECTED   "menu/art/opponents_selected"
 

Definition at line 28 of file ui_playermodel.c.

#define PLAYERGRID_COLS   4
 

Definition at line 53 of file ui_playermodel.c.

#define PLAYERGRID_ROWS   4
 

Definition at line 54 of file ui_playermodel.c.

Referenced by PlayerModel_PicEvent(), PlayerModel_UpdateGrid(), UI_BotSelectMenu_BotEvent(), and UI_BotSelectMenu_UpdateGrid().


Function Documentation

void PlayerModel_BuildList void   )  [static]
 

Definition at line 388 of file ui_playermodel.c.

References Com_sprintf(), COM_StripExtension(), filelist, i, j, playermodel_t::modelnames, playermodel_t::modelpage, playermodel_t::nummodels, playermodel_t::numpages, Q_stricmpn(), qboolean, qfalse, s_playermodel, strcmp(), strlen(), trap_Cvar_VariableValue(), trap_FS_GetFileList(), trap_S_RegisterSound(), and va().

Referenced by PlayerModel_Cache().

00389 {
00390     int     numdirs;
00391     int     numfiles;
00392     char    dirlist[2048];
00393     char    filelist[2048];
00394     char    skinname[64];
00395     char*   dirptr;
00396     char*   fileptr;
00397     int     i;
00398     int     j;
00399     int     dirlen;
00400     int     filelen;
00401     qboolean precache;
00402 
00403     precache = trap_Cvar_VariableValue("com_buildscript");
00404 
00405     s_playermodel.modelpage = 0;
00406     s_playermodel.nummodels = 0;
00407 
00408     // iterate directory of all player models
00409     numdirs = trap_FS_GetFileList("models/players", "/", dirlist, 2048 );
00410     dirptr  = dirlist;
00411     for (i=0; i<numdirs && s_playermodel.nummodels < MAX_PLAYERMODELS; i++,dirptr+=dirlen+1)
00412     {
00413         dirlen = strlen(dirptr);
00414         
00415         if (dirlen && dirptr[dirlen-1]=='/') dirptr[dirlen-1]='\0';
00416 
00417         if (!strcmp(dirptr,".") || !strcmp(dirptr,".."))
00418             continue;
00419             
00420         // iterate all skin files in directory
00421         numfiles = trap_FS_GetFileList( va("models/players/%s",dirptr), "tga", filelist, 2048 );
00422         fileptr  = filelist;
00423         for (j=0; j<numfiles && s_playermodel.nummodels < MAX_PLAYERMODELS;j++,fileptr+=filelen+1)
00424         {
00425             filelen = strlen(fileptr);
00426 
00427             COM_StripExtension(fileptr,skinname);
00428 
00429             // look for icon_????
00430             if (!Q_stricmpn(skinname,"icon_",5))
00431             {
00432                 Com_sprintf( s_playermodel.modelnames[s_playermodel.nummodels++],
00433                     sizeof( s_playermodel.modelnames[s_playermodel.nummodels] ),
00434                     "models/players/%s/%s", dirptr, skinname );
00435                 //if (s_playermodel.nummodels >= MAX_PLAYERMODELS)
00436                 //  return;
00437             }
00438 
00439             if( precache ) {
00440                 trap_S_RegisterSound( va( "sound/player/announce/%s_wins.wav", skinname), qfalse );
00441             }
00442         }
00443     }   
00444 
00445     //APSFIXME - Degenerate no models case
00446 
00447     s_playermodel.numpages = s_playermodel.nummodels/MAX_MODELSPERPAGE;
00448     if (s_playermodel.nummodels % MAX_MODELSPERPAGE)
00449         s_playermodel.numpages++;
00450 }

Here is the call graph for this function:

void PlayerModel_Cache void   ) 
 

Definition at line 708 of file ui_playermodel.c.

References i, playermodel_t::modelnames, playermodel_t::nummodels, playermodel_artlist, PlayerModel_BuildList(), s_playermodel, and trap_R_RegisterShaderNoMip().

00709 {
00710     int i;
00711 
00712     for( i = 0; playermodel_artlist[i]; i++ ) {
00713         trap_R_RegisterShaderNoMip( playermodel_artlist[i] );
00714     }
00715 
00716     PlayerModel_BuildList();
00717     for( i = 0; i < s_playermodel.nummodels; i++ ) {
00718         trap_R_RegisterShaderNoMip( s_playermodel.modelnames[i] );
00719     }
00720 }

Here is the call graph for this function:

void PlayerModel_DrawPlayer void *  self  )  [static]
 

Definition at line 369 of file ui_playermodel.c.

References b, color_red, menubitmap_s::generic, menubitmap_s::height, playermodel_t::playerinfo, uiStatic_t::realtime, s_playermodel, trap_MemoryRemaining(), UI_DrawPlayer(), UI_DrawProportionalString(), UI_LEFT, uis, menubitmap_s::width, menucommon_s::x, and menucommon_s::y.

00370 {
00371     menubitmap_s*   b;
00372 
00373     b = (menubitmap_s*) self;
00374 
00375     if( trap_MemoryRemaining() <= LOW_MEMORY ) {
00376         UI_DrawProportionalString( b->generic.x, b->generic.y + b->height / 2, "LOW MEMORY", UI_LEFT, color_red );
00377         return;
00378     }
00379 
00380     UI_DrawPlayer( b->generic.x, b->generic.y, b->width, b->height, &s_playermodel.playerinfo, uis.realtime/2 );
00381 }

Here is the call graph for this function:

void PlayerModel_MenuEvent void *  ptr,
int  event
[static]
 

Definition at line 206 of file ui_playermodel.c.

References ID_BACK, ID_NEXTPAGE, ID_PREVPAGE, playermodel_t::modelpage, playermodel_t::numpages, PlayerModel_SaveChanges(), PlayerModel_UpdateGrid(), s_playermodel, and UI_PopMenu().

00207 {
00208     if (event != QM_ACTIVATED)
00209         return;
00210 
00211     switch (((menucommon_s*)ptr)->id)
00212     {
00213         case ID_PREVPAGE:
00214             if (s_playermodel.modelpage > 0)
00215             {
00216                 s_playermodel.modelpage--;
00217                 PlayerModel_UpdateGrid();
00218             }
00219             break;
00220 
00221         case ID_NEXTPAGE:
00222             if (s_playermodel.modelpage < s_playermodel.numpages-1)
00223             {
00224                 s_playermodel.modelpage++;
00225                 PlayerModel_UpdateGrid();
00226             }
00227             break;
00228 
00229         case ID_BACK:
00230             PlayerModel_SaveChanges();
00231             UI_PopMenu();
00232             break;
00233     }
00234 }

Here is the call graph for this function:

void PlayerModel_MenuInit void   )  [static]
 

Definition at line 515 of file ui_playermodel.c.

References playermodel_t::arrows, playermodel_t::back, playermodel_t::banner, menucommon_s::bottom, menucommon_s::callback, menutext_s::color, menucommon_s::flags, menubitmap_s::focuscolor, menubitmap_s::focuspic, playermodel_t::framel, playermodel_t::framer, _tag_menuframework::fullscreen, menubitmap_s::generic, menutext_s::generic, menubitmap_s::height, i, menucommon_s::id, ID_PLAYERPIC0, j, k, _tag_menuframework::key, playermodel_t::left, menucommon_s::left, memset(), playermodel_t::menu, Menu_AddItem(), playermodel_t::modelname, menucommon_s::name, menucommon_s::ownerdraw, playermodel_t::picbuttons, playermodel_t::pics, playermodel_t::player, PlayerModel_Cache(), PlayerModel_SetMenuItems(), PlayerModel_UpdateGrid(), PlayerModel_UpdateModel(), playermodel_t::playername, playermodel_t::ports, QMF_CENTER_JUSTIFY, QMF_LEFT_JUSTIFY, QMF_NODEFAULTINIT, playermodel_t::right, menucommon_s::right, s_playermodel, playermodel_t::skinname, menutext_s::string, menutext_s::style, menucommon_s::top, menucommon_s::type, menubitmap_s::width, _tag_menuframework::wrapAround, x, menucommon_s::x, y, and menucommon_s::y.

Referenced by UI_PlayerModelMenu().

00516 {
00517     int         i;
00518     int         j;
00519     int         k;
00520     int         x;
00521     int         y;
00522     static char playername[32];
00523     static char modelname[32];
00524     static char skinname[32];
00525 
00526     // zero set all our globals
00527     memset( &s_playermodel, 0 ,sizeof(playermodel_t) );
00528 
00529     PlayerModel_Cache();
00530 
00531     s_playermodel.menu.key        = PlayerModel_MenuKey;
00532     s_playermodel.menu.wrapAround = qtrue;
00533     s_playermodel.menu.fullscreen = qtrue;
00534 
00535     s_playermodel.banner.generic.type  = MTYPE_BTEXT;
00536     s_playermodel.banner.generic.x     = 320;
00537     s_playermodel.banner.generic.y     = 16;
00538     s_playermodel.banner.string        = "PLAYER MODEL";
00539     s_playermodel.banner.color         = color_white;
00540     s_playermodel.banner.style         = UI_CENTER;
00541 
00542     s_playermodel.framel.generic.type  = MTYPE_BITMAP;
00543     s_playermodel.framel.generic.name  = MODEL_FRAMEL;
00544     s_playermodel.framel.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
00545     s_playermodel.framel.generic.x     = 0;
00546     s_playermodel.framel.generic.y     = 78;
00547     s_playermodel.framel.width         = 256;
00548     s_playermodel.framel.height        = 329;
00549 
00550     s_playermodel.framer.generic.type  = MTYPE_BITMAP;
00551     s_playermodel.framer.generic.name  = MODEL_FRAMER;
00552     s_playermodel.framer.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
00553     s_playermodel.framer.generic.x     = 376;
00554     s_playermodel.framer.generic.y     = 76;
00555     s_playermodel.framer.width         = 256;
00556     s_playermodel.framer.height        = 334;
00557 
00558     s_playermodel.ports.generic.type  = MTYPE_BITMAP;
00559     s_playermodel.ports.generic.name  = MODEL_PORTS;
00560     s_playermodel.ports.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
00561     s_playermodel.ports.generic.x     = 50;
00562     s_playermodel.ports.generic.y     = 59;
00563     s_playermodel.ports.width         = 274;
00564     s_playermodel.ports.height        = 274;
00565 
00566     y = 59;
00567     for (i=0,k=0; i<PLAYERGRID_ROWS; i++)
00568     {
00569         x = 50;
00570         for (j=0; j<PLAYERGRID_COLS; j++,k++)
00571         {
00572             s_playermodel.pics[k].generic.type     = MTYPE_BITMAP;
00573             s_playermodel.pics[k].generic.flags    = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
00574             s_playermodel.pics[k].generic.x        = x;
00575             s_playermodel.pics[k].generic.y        = y;
00576             s_playermodel.pics[k].width            = 64;
00577             s_playermodel.pics[k].height           = 64;
00578             s_playermodel.pics[k].focuspic         = MODEL_SELECTED;
00579             s_playermodel.pics[k].focuscolor       = colorRed;
00580 
00581             s_playermodel.picbuttons[k].generic.type     = MTYPE_BITMAP;
00582             s_playermodel.picbuttons[k].generic.flags    = QMF_LEFT_JUSTIFY|QMF_NODEFAULTINIT|QMF_PULSEIFFOCUS;
00583             s_playermodel.picbuttons[k].generic.id       = ID_PLAYERPIC0+k;
00584             s_playermodel.picbuttons[k].generic.callback = PlayerModel_PicEvent;
00585             s_playermodel.picbuttons[k].generic.x        = x - 16;
00586             s_playermodel.picbuttons[k].generic.y        = y - 16;
00587             s_playermodel.picbuttons[k].generic.left     = x;
00588             s_playermodel.picbuttons[k].generic.top      = y;
00589             s_playermodel.picbuttons[k].generic.right    = x + 64;
00590             s_playermodel.picbuttons[k].generic.bottom   = y + 64;
00591             s_playermodel.picbuttons[k].width            = 128;
00592             s_playermodel.picbuttons[k].height           = 128;
00593             s_playermodel.picbuttons[k].focuspic         = MODEL_SELECT;
00594             s_playermodel.picbuttons[k].focuscolor       = colorRed;
00595 
00596             x += 64+6;
00597         }
00598         y += 64+6;
00599     }
00600 
00601     s_playermodel.playername.generic.type  = MTYPE_PTEXT;
00602     s_playermodel.playername.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE;
00603     s_playermodel.playername.generic.x     = 320;
00604     s_playermodel.playername.generic.y     = 440;
00605     s_playermodel.playername.string        = playername;
00606     s_playermodel.playername.style         = UI_CENTER;
00607     s_playermodel.playername.color         = text_color_normal;
00608 
00609     s_playermodel.modelname.generic.type  = MTYPE_PTEXT;
00610     s_playermodel.modelname.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE;
00611     s_playermodel.modelname.generic.x     = 497;
00612     s_playermodel.modelname.generic.y     = 54;
00613     s_playermodel.modelname.string        = modelname;
00614     s_playermodel.modelname.style         = UI_CENTER;
00615     s_playermodel.modelname.color         = text_color_normal;
00616 
00617     s_playermodel.skinname.generic.type   = MTYPE_PTEXT;
00618     s_playermodel.skinname.generic.flags  = QMF_CENTER_JUSTIFY|QMF_INACTIVE;
00619     s_playermodel.skinname.generic.x      = 497;
00620     s_playermodel.skinname.generic.y      = 394;
00621     s_playermodel.skinname.string         = skinname;
00622     s_playermodel.skinname.style          = UI_CENTER;
00623     s_playermodel.skinname.color          = text_color_normal;
00624 
00625     s_playermodel.player.generic.type      = MTYPE_BITMAP;
00626     s_playermodel.player.generic.flags     = QMF_INACTIVE;
00627     s_playermodel.player.generic.ownerdraw = PlayerModel_DrawPlayer;
00628     s_playermodel.player.generic.x         = 400;
00629     s_playermodel.player.generic.y         = -40;
00630     s_playermodel.player.width             = 32*10;
00631     s_playermodel.player.height            = 56*10;
00632 
00633     s_playermodel.arrows.generic.type       = MTYPE_BITMAP;
00634     s_playermodel.arrows.generic.name       = MODEL_ARROWS;
00635     s_playermodel.arrows.generic.flags      = QMF_INACTIVE;
00636     s_playermodel.arrows.generic.x          = 125;
00637     s_playermodel.arrows.generic.y          = 340;
00638     s_playermodel.arrows.width              = 128;
00639     s_playermodel.arrows.height             = 32;
00640 
00641     s_playermodel.left.generic.type         = MTYPE_BITMAP;
00642     s_playermodel.left.generic.flags        = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00643     s_playermodel.left.generic.callback     = PlayerModel_MenuEvent;
00644     s_playermodel.left.generic.id           = ID_PREVPAGE;
00645     s_playermodel.left.generic.x            = 125;
00646     s_playermodel.left.generic.y            = 340;
00647     s_playermodel.left.width                = 64;
00648     s_playermodel.left.height               = 32;
00649     s_playermodel.left.focuspic             = MODEL_ARROWSL;
00650 
00651     s_playermodel.right.generic.type        = MTYPE_BITMAP;
00652     s_playermodel.right.generic.flags       = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00653     s_playermodel.right.generic.callback    = PlayerModel_MenuEvent;
00654     s_playermodel.right.generic.id          = ID_NEXTPAGE;
00655     s_playermodel.right.generic.x           = 125+61;
00656     s_playermodel.right.generic.y           = 340;
00657     s_playermodel.right.width               = 64;
00658     s_playermodel.right.height              = 32;
00659     s_playermodel.right.focuspic            = MODEL_ARROWSR;
00660 
00661     s_playermodel.back.generic.type     = MTYPE_BITMAP;
00662     s_playermodel.back.generic.name     = MODEL_BACK0;
00663     s_playermodel.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00664     s_playermodel.back.generic.callback = PlayerModel_MenuEvent;
00665     s_playermodel.back.generic.id       = ID_BACK;
00666     s_playermodel.back.generic.x        = 0;
00667     s_playermodel.back.generic.y        = 480-64;
00668     s_playermodel.back.width            = 128;
00669     s_playermodel.back.height           = 64;
00670     s_playermodel.back.focuspic         = MODEL_BACK1;
00671 
00672     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.banner );
00673     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.framel );
00674     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.framer );
00675     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.ports );
00676     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.playername );
00677     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.modelname );
00678     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.skinname );
00679 
00680     for (i=0; i<MAX_MODELSPERPAGE; i++)
00681     {
00682         Menu_AddItem( &s_playermodel.menu,  &s_playermodel.pics[i] );
00683         Menu_AddItem( &s_playermodel.menu,  &s_playermodel.picbuttons[i] );
00684     }
00685 
00686     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.player );
00687     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.arrows );
00688     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.left );
00689     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.right );
00690     Menu_AddItem( &s_playermodel.menu,  &s_playermodel.back );
00691 
00692     // find all available models
00693 //  PlayerModel_BuildList();
00694 
00695     // set initial states
00696     PlayerModel_SetMenuItems();
00697 
00698     // update user interface
00699     PlayerModel_UpdateGrid();
00700     PlayerModel_UpdateModel();
00701 }

Here is the call graph for this function:

sfxHandle_t PlayerModel_MenuKey int  key  )  [static]
 

Definition at line 241 of file ui_playermodel.c.

References _tag_menuframework::cursor, menucommon_s::id, K_ESCAPE, K_KP_LEFTARROW, K_KP_RIGHTARROW, K_LEFTARROW, K_MOUSE2, K_RIGHTARROW, m, MAX_MODELSPERPAGE, playermodel_t::menu, Menu_DefaultKey(), Menu_ItemAtCursor(), Menu_SetCursor(), playermodel_t::modelpage, playermodel_t::nummodels, playermodel_t::numpages, PlayerModel_SaveChanges(), PlayerModel_UpdateGrid(), s_playermodel, and sfxHandle_t.

00242 {
00243     menucommon_s*   m;
00244     int             picnum;
00245 
00246     switch (key)
00247     {
00248         case K_KP_LEFTARROW:
00249         case K_LEFTARROW:
00250             m = Menu_ItemAtCursor(&s_playermodel.menu);
00251             picnum = m->id - ID_PLAYERPIC0;
00252             if (picnum >= 0 && picnum <= 15)
00253             {
00254                 if (picnum > 0)
00255                 {
00256                     Menu_SetCursor(&s_playermodel.menu,s_playermodel.menu.cursor-1);
00257                     return (menu_move_sound);
00258                     
00259                 }
00260                 else if (s_playermodel.modelpage > 0)
00261                 {
00262                     s_playermodel.modelpage--;
00263                     Menu_SetCursor(&s_playermodel.menu,s_playermodel.menu.cursor+15);
00264                     PlayerModel_UpdateGrid();
00265                     return (menu_move_sound);
00266                 }
00267                 else
00268                     return (menu_buzz_sound);
00269             }
00270             break;
00271 
00272         case K_KP_RIGHTARROW:
00273         case K_RIGHTARROW:
00274             m = Menu_ItemAtCursor(&s_playermodel.menu);
00275             picnum = m->id - ID_PLAYERPIC0;
00276             if (picnum >= 0 && picnum <= 15)
00277             {
00278                 if ((picnum < 15) && (s_playermodel.modelpage*MAX_MODELSPERPAGE + picnum+1 < s_playermodel.nummodels))
00279                 {
00280                     Menu_SetCursor(&s_playermodel.menu,s_playermodel.menu.cursor+1);
00281                     return (menu_move_sound);
00282                 }                   
00283                 else if ((picnum == 15) && (s_playermodel.modelpage < s_playermodel.numpages-1))
00284                 {
00285                     s_playermodel.modelpage++;
00286                     Menu_SetCursor(&s_playermodel.menu,s_playermodel.menu.cursor-15);
00287                     PlayerModel_UpdateGrid();
00288                     return (menu_move_sound);
00289                 }
00290                 else
00291                     return (menu_buzz_sound);
00292             }
00293             break;
00294             
00295         case K_MOUSE2:
00296         case K_ESCAPE:
00297             PlayerModel_SaveChanges();
00298             break;
00299     }
00300 
00301     return ( Menu_DefaultKey( &s_playermodel.menu, key ) );
00302 }

Here is the call graph for this function:

void PlayerModel_PicEvent void *  ptr,
int  event
[static]
 

Definition at line 309 of file ui_playermodel.c.

References menucommon_s::flags, menubitmap_s::generic, i, menucommon_s::id, MAX_MODELSPERPAGE, playermodel_t::modelname, playermodel_t::modelnames, playermodel_t::modelpage, playermodel_t::modelskin, playermodel_t::picbuttons, playermodel_t::pics, PLAYERGRID_ROWS, PlayerModel_UpdateModel(), Q_strncpyz(), Q_strupr(), s_playermodel, playermodel_t::selectedmodel, playermodel_t::skinname, strcat(), menutext_s::string, strlen(), strstr(), and trap_MemoryRemaining().

00310 {
00311     int             modelnum;
00312     int             maxlen;
00313     char*           buffptr;
00314     char*           pdest;
00315     int             i;
00316 
00317     if (event != QM_ACTIVATED)
00318         return;
00319 
00320     for (i=0; i<PLAYERGRID_ROWS*PLAYERGRID_COLS; i++)
00321     {
00322         // reset
00323         s_playermodel.pics[i].generic.flags       &= ~QMF_HIGHLIGHT;
00324         s_playermodel.picbuttons[i].generic.flags |= QMF_PULSEIFFOCUS;
00325     }
00326 
00327     // set selected
00328     i = ((menucommon_s*)ptr)->id - ID_PLAYERPIC0;
00329     s_playermodel.pics[i].generic.flags       |= QMF_HIGHLIGHT;
00330     s_playermodel.picbuttons[i].generic.flags &= ~QMF_PULSEIFFOCUS;
00331 
00332     // get model and strip icon_
00333     modelnum = s_playermodel.modelpage*MAX_MODELSPERPAGE + i;
00334     buffptr  = s_playermodel.modelnames[modelnum] + strlen("models/players/");
00335     pdest    = strstr(buffptr,"icon_");
00336     if (pdest)
00337     {
00338         // track the whole model/skin name
00339         Q_strncpyz(s_playermodel.modelskin,buffptr,pdest-buffptr+1);
00340         strcat(s_playermodel.modelskin,pdest + 5);
00341 
00342         // seperate the model name
00343         maxlen = pdest-buffptr;
00344         if (maxlen > 16)
00345             maxlen = 16;
00346         Q_strncpyz( s_playermodel.modelname.string, buffptr, maxlen );
00347         Q_strupr( s_playermodel.modelname.string );
00348 
00349         // seperate the skin name
00350         maxlen = strlen(pdest+5)+1;
00351         if (maxlen > 16)
00352             maxlen = 16;
00353         Q_strncpyz( s_playermodel.skinname.string, pdest+5, maxlen );
00354         Q_strupr( s_playermodel.skinname.string );
00355 
00356         s_playermodel.selectedmodel = modelnum;
00357 
00358         if( trap_MemoryRemaining() > LOW_MEMORY ) {
00359             PlayerModel_UpdateModel();
00360         }
00361     }
00362 }

Here is the call graph for this function:

void PlayerModel_SaveChanges void   )  [static]
 

Definition at line 193 of file ui_playermodel.c.

References playermodel_t::modelskin, s_playermodel, and trap_Cvar_Set().

Referenced by PlayerModel_MenuEvent(), and PlayerModel_MenuKey().

00194 {
00195     trap_Cvar_Set( "model", s_playermodel.modelskin );
00196     trap_Cvar_Set( "headmodel", s_playermodel.modelskin );
00197     trap_Cvar_Set( "team_model", s_playermodel.modelskin );
00198     trap_Cvar_Set( "team_headmodel", s_playermodel.modelskin );
00199 }

Here is the call graph for this function:

void PlayerModel_SetMenuItems void   )  [static]
 

Definition at line 457 of file ui_playermodel.c.

References i, playermodel_t::modelname, playermodel_t::modelnames, playermodel_t::modelpage, playermodel_t::modelskin, playermodel_t::nummodels, playermodel_t::playername, Q_CleanStr(), Q_stricmp(), Q_strncpyz(), Q_strupr(), s_playermodel, playermodel_t::selectedmodel, playermodel_t::skinname, strcat(), menutext_s::string, strlen(), strstr(), and trap_Cvar_VariableStringBuffer().

Referenced by PlayerModel_MenuInit().

00458 {
00459     int             i;
00460     int             maxlen;
00461     char            modelskin[64];
00462     char*           buffptr;
00463     char*           pdest;
00464 
00465     // name
00466     trap_Cvar_VariableStringBuffer( "name", s_playermodel.playername.string, 16 );
00467     Q_CleanStr( s_playermodel.playername.string );
00468 
00469     // model
00470     trap_Cvar_VariableStringBuffer( "model", s_playermodel.modelskin, 64 );
00471     
00472     // find model in our list
00473     for (i=0; i<s_playermodel.nummodels; i++)
00474     {
00475         // strip icon_
00476         buffptr  = s_playermodel.modelnames[i] + strlen("models/players/");
00477         pdest    = strstr(buffptr,"icon_");
00478         if (pdest)
00479         {
00480             Q_strncpyz(modelskin,buffptr,pdest-buffptr+1);
00481             strcat(modelskin,pdest + 5);
00482         }
00483         else
00484             continue;
00485 
00486         if (!Q_stricmp( s_playermodel.modelskin, modelskin ))
00487         {
00488             // found pic, set selection here        
00489             s_playermodel.selectedmodel = i;
00490             s_playermodel.modelpage     = i/MAX_MODELSPERPAGE;
00491 
00492             // seperate the model name
00493             maxlen = pdest-buffptr;
00494             if (maxlen > 16)
00495                 maxlen = 16;
00496             Q_strncpyz( s_playermodel.modelname.string, buffptr, maxlen );
00497             Q_strupr( s_playermodel.modelname.string );
00498 
00499             // seperate the skin name
00500             maxlen = strlen(pdest+5)+1;
00501             if (maxlen > 16)
00502                 maxlen = 16;
00503             Q_strncpyz( s_playermodel.skinname.string, pdest+5, maxlen );
00504             Q_strupr( s_playermodel.skinname.string );
00505             break;
00506         }
00507     }
00508 }

Here is the call graph for this function:

void PlayerModel_UpdateGrid void   )  [static]
 

Definition at line 112 of file ui_playermodel.c.

References menucommon_s::flags, menubitmap_s::generic, i, j, playermodel_t::left, MAX_MODELSPERPAGE, playermodel_t::modelnames, playermodel_t::modelpage, menucommon_s::name, playermodel_t::nummodels, playermodel_t::numpages, playermodel_t::picbuttons, playermodel_t::pics, PLAYERGRID_ROWS, playermodel_t::right, s_playermodel, playermodel_t::selectedmodel, and menubitmap_s::shader.

Referenced by PlayerModel_MenuEvent(), PlayerModel_MenuInit(), and PlayerModel_MenuKey().

00113 {
00114     int i;
00115     int j;
00116 
00117     j = s_playermodel.modelpage * MAX_MODELSPERPAGE;
00118     for (i=0; i<PLAYERGRID_ROWS*PLAYERGRID_COLS; i++,j++)
00119     {
00120         if (j < s_playermodel.nummodels)
00121         { 
00122             // model/skin portrait
00123             s_playermodel.pics[i].generic.name         = s_playermodel.modelnames[j];
00124             s_playermodel.picbuttons[i].generic.flags &= ~QMF_INACTIVE;
00125         }
00126         else
00127         {
00128             // dead slot
00129             s_playermodel.pics[i].generic.name         = NULL;
00130             s_playermodel.picbuttons[i].generic.flags |= QMF_INACTIVE;
00131         }
00132 
00133         s_playermodel.pics[i].generic.flags       &= ~QMF_HIGHLIGHT;
00134         s_playermodel.pics[i].shader               = 0;
00135         s_playermodel.picbuttons[i].generic.flags |= QMF_PULSEIFFOCUS;
00136     }
00137 
00138     if (s_playermodel.selectedmodel/MAX_MODELSPERPAGE == s_playermodel.modelpage)
00139     {
00140         // set selected model
00141         i = s_playermodel.selectedmodel % MAX_MODELSPERPAGE;
00142 
00143         s_playermodel.pics[i].generic.flags       |= QMF_HIGHLIGHT;
00144         s_playermodel.picbuttons[i].generic.flags &= ~QMF_PULSEIFFOCUS;
00145     }
00146 
00147     if (s_playermodel.numpages > 1)
00148     {
00149         if (s_playermodel.modelpage > 0)
00150             s_playermodel.left.generic.flags &= ~QMF_INACTIVE;
00151         else
00152             s_playermodel.left.generic.flags |= QMF_INACTIVE;
00153 
00154         if (s_playermodel.modelpage < s_playermodel.numpages-1)
00155             s_playermodel.right.generic.flags &= ~QMF_INACTIVE;
00156         else
00157             s_playermodel.right.generic.flags |= QMF_INACTIVE;
00158     }
00159     else
00160     {
00161         // hide left/right markers
00162         s_playermodel.left.generic.flags |= QMF_INACTIVE;
00163         s_playermodel.right.generic.flags |= QMF_INACTIVE;
00164     }
00165 }

void PlayerModel_UpdateModel void   )  [static]
 

Definition at line 172 of file ui_playermodel.c.

References LEGS_IDLE, memset(), playermodel_t::modelskin, playermodel_t::playerinfo, qfalse, s_playermodel, TORSO_STAND, UI_PlayerInfo_SetInfo(), UI_PlayerInfo_SetModel(), vec3_t, VectorClear, and WP_MACHINEGUN.

Referenced by PlayerModel_MenuInit(), and PlayerModel_PicEvent().

00173 {
00174     vec3_t  viewangles;
00175     vec3_t  moveangles;
00176 
00177     memset( &s_playermodel.playerinfo, 0, sizeof(playerInfo_t) );
00178     
00179     viewangles[YAW]   = 180 - 30;
00180     viewangles[PITCH] = 0;
00181     viewangles[ROLL]  = 0;
00182     VectorClear( moveangles );
00183 
00184     UI_PlayerInfo_SetModel( &s_playermodel.playerinfo, s_playermodel.modelskin );
00185     UI_PlayerInfo_SetInfo( &s_playermodel.playerinfo, LEGS_IDLE, TORSO_STAND, viewangles, moveangles, WP_MACHINEGUN, qfalse );
00186 }

Here is the call graph for this function:

void UI_PlayerModelMenu void   ) 
 

Definition at line 722 of file ui_playermodel.c.

References MAX_MODELSPERPAGE, playermodel_t::menu, Menu_SetCursorToItem(), playermodel_t::pics, PlayerModel_MenuInit(), s_playermodel, playermodel_t::selectedmodel, and UI_PushMenu().

00723 {
00724     PlayerModel_MenuInit();
00725 
00726     UI_PushMenu( &s_playermodel.menu );
00727 
00728     Menu_SetCursorToItem( &s_playermodel.menu, &s_playermodel.pics[s_playermodel.selectedmodel % MAX_MODELSPERPAGE] );
00729 }

Here is the call graph for this function:


Variable Documentation

char* playermodel_artlist[] [static]
 

Initial value:

{
    MODEL_BACK0,    
    MODEL_BACK1,    
    MODEL_SELECT,
    MODEL_SELECTED,
    MODEL_FRAMEL,
    MODEL_FRAMER,
    MODEL_PORTS,    
    MODEL_ARROWS,
    MODEL_ARROWSL,
    MODEL_ARROWSR,
    NULL
}

Definition at line 38 of file ui_playermodel.c.

Referenced by PlayerModel_Cache().

playermodel_t s_playermodel [static]
 

Definition at line 105 of file ui_playermodel.c.

Referenced by PlayerModel_BuildList(), PlayerModel_Cache(), PlayerModel_DrawPlayer(), PlayerModel_MenuEvent(), PlayerModel_MenuInit(), PlayerModel_MenuKey(), PlayerModel_PicEvent(), PlayerModel_SaveChanges(), PlayerModel_SetMenuItems(), PlayerModel_UpdateGrid(), PlayerModel_UpdateModel(), and UI_PlayerModelMenu().


Generated on Thu Aug 25 14:33:15 2005 for Quake III Arena by  doxygen 1.3.9.1