/* ================= PlayerModel_PicEvent ================= */ static void PlayerModel_PicEvent( void* ptr, int event ) { int modelnum; int maxlen; char* buffptr; char* pdest; int i; if (event != QM_ACTIVATED) return; for (i=0; i<PLAYERGRID_ROWS*PLAYERGRID_COLS; i++) { // reset s_playermodel.pics[i].generic.flags &= ~QMF_HIGHLIGHT; s_playermodel.picbuttons[i].generic.flags |= QMF_PULSEIFFOCUS; } // set selected i = ((menucommon_s*)ptr)->id - ID_PLAYERPIC0; s_playermodel.pics[i].generic.flags |= QMF_HIGHLIGHT; s_playermodel.picbuttons[i].generic.flags &= ~QMF_PULSEIFFOCUS; // get model and strip icon_ modelnum = s_playermodel.modelpage*MAX_MODELSPERPAGE + i; buffptr = s_playermodel.modelnames[modelnum] + strlen("models/players/"); pdest = strstr(buffptr,"icon_"); if (pdest) { // track the whole model/skin name Q_strncpyz( s_playermodel.modelskin, buffptr, pdest - buffptr + 1 ); Q_strcat( s_playermodel.modelskin, sizeof (s_playermodel.modelskin), pdest + 5); // strcpy(s_playermodel.headmodelskin, s_playermodel.modelskin ); // seperate the model name maxlen = pdest-buffptr; if (maxlen > 16) maxlen = 16; Q_strncpyz( s_playermodel.modelname.string, buffptr, maxlen ); Q_strupr( s_playermodel.modelname.string ); // seperate the skin name maxlen = strlen(pdest+5)+1; if (maxlen > 16) maxlen = 16; Q_strncpyz( s_playermodel.skinname.string, pdest+5, maxlen ); Q_strupr( s_playermodel.skinname.string ); s_playermodel.selectedmodel = modelnum; if( trap_MemoryRemaining() > LOW_MEMORY ) { PlayerModel_UpdateModel(); } } }
/* ================= PlayerModel_MenuKey ================= */ static sfxHandle_t PlayerModel_MenuKey(int key) { menucommon_s* m; int picnum; switch (key) { case K_KP_LEFTARROW: case K_LEFTARROW: m = Menu_ItemAtCursor(&s_playermodel.menu); picnum = m->id - ID_PLAYERPIC0; if (picnum >= 0 && picnum <= 15) { if (picnum > 0) { Menu_SetCursor(&s_playermodel.menu, s_playermodel.menu.cursor - 1); return (menu_move_sound); } else if (s_playermodel.modelpage > 0) { s_playermodel.modelpage--; Menu_SetCursor(&s_playermodel.menu, s_playermodel.menu.cursor + 15); PlayerModel_UpdateGrid(); return (menu_move_sound); } else return (menu_buzz_sound); } break; case K_KP_RIGHTARROW: case K_RIGHTARROW: m = Menu_ItemAtCursor(&s_playermodel.menu); picnum = m->id - ID_PLAYERPIC0; if (picnum >= 0 && picnum <= 15) { if ((picnum < 15) && (s_playermodel.modelpage*MAX_MODELSPERPAGE + picnum + 1 < s_playermodel.nummodels)) { Menu_SetCursor(&s_playermodel.menu, s_playermodel.menu.cursor + 1); return (menu_move_sound); } else if ((picnum == 15) && (s_playermodel.modelpage < s_playermodel.numpages - 1)) { s_playermodel.modelpage++; Menu_SetCursor(&s_playermodel.menu, s_playermodel.menu.cursor - 15); PlayerModel_UpdateGrid(); return (menu_move_sound); } else return (menu_buzz_sound); } break; case K_MOUSE2: trap_Cvar_Set("headmodel", s_playermodel.modelskin); trap_Cvar_Set("team_headmodel", s_playermodel.modelskin); PlayerModel_SaveChanges(); PlayerModel_UpdateModel(); return (menu_buzz_sound); case K_ESCAPE: PlayerModel_SaveChanges(); break; } return (Menu_DefaultKey(&s_playermodel.menu, key)); }
/* ================= PlayerModel_MenuInit ================= */ static void PlayerModel_MenuInit( int localClient ) { int i; int j; int k; int x; int y; static char playername[32]; static char modelname[32]; static char skinname[32]; // zero set all our globals memset( &s_playermodel, 0 ,sizeof(playermodel_t) ); s_playermodel.localClient = localClient; Com_sprintf(s_playermodel.bannerString, sizeof (s_playermodel.bannerString), "PLAYER %d MODEL", s_playermodel.localClient+1); PlayerModel_Cache(); s_playermodel.menu.key = PlayerModel_MenuKey; s_playermodel.menu.wrapAround = qtrue; s_playermodel.menu.fullscreen = qtrue; s_playermodel.banner.generic.type = MTYPE_BTEXT; s_playermodel.banner.generic.x = 320; s_playermodel.banner.generic.y = 16; s_playermodel.banner.string = s_playermodel.bannerString; s_playermodel.banner.color = color_white; s_playermodel.banner.style = UI_CENTER; s_playermodel.framel.generic.type = MTYPE_BITMAP; s_playermodel.framel.generic.name = MODEL_FRAMEL; s_playermodel.framel.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; s_playermodel.framel.generic.x = 0; s_playermodel.framel.generic.y = 78; s_playermodel.framel.width = 256; s_playermodel.framel.height = 329; s_playermodel.framer.generic.type = MTYPE_BITMAP; s_playermodel.framer.generic.name = MODEL_FRAMER; s_playermodel.framer.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; s_playermodel.framer.generic.x = 376; s_playermodel.framer.generic.y = 76; s_playermodel.framer.width = 256; s_playermodel.framer.height = 334; s_playermodel.ports.generic.type = MTYPE_BITMAP; s_playermodel.ports.generic.name = MODEL_PORTS; s_playermodel.ports.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; s_playermodel.ports.generic.x = 50; s_playermodel.ports.generic.y = 59; s_playermodel.ports.width = 274; s_playermodel.ports.height = 274; y = 59; for (i=0,k=0; i<PLAYERGRID_ROWS; i++) { x = 50; for (j=0; j<PLAYERGRID_COLS; j++,k++) { s_playermodel.pics[k].generic.type = MTYPE_BITMAP; s_playermodel.pics[k].generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; s_playermodel.pics[k].generic.x = x; s_playermodel.pics[k].generic.y = y; s_playermodel.pics[k].width = 64; s_playermodel.pics[k].height = 64; s_playermodel.pics[k].focuspic = MODEL_SELECTED; s_playermodel.pics[k].focuscolor = colorRed; s_playermodel.picbuttons[k].generic.type = MTYPE_BITMAP; s_playermodel.picbuttons[k].generic.flags = QMF_LEFT_JUSTIFY|QMF_NODEFAULTINIT|QMF_PULSEIFFOCUS; s_playermodel.picbuttons[k].generic.id = ID_PLAYERPIC0+k; s_playermodel.picbuttons[k].generic.callback = PlayerModel_PicEvent; s_playermodel.picbuttons[k].generic.x = x - 16; s_playermodel.picbuttons[k].generic.y = y - 16; s_playermodel.picbuttons[k].generic.left = x; s_playermodel.picbuttons[k].generic.top = y; s_playermodel.picbuttons[k].generic.right = x + 64; s_playermodel.picbuttons[k].generic.bottom = y + 64; s_playermodel.picbuttons[k].width = 128; s_playermodel.picbuttons[k].height = 128; s_playermodel.picbuttons[k].focuspic = MODEL_SELECT; s_playermodel.picbuttons[k].focuscolor = colorRed; x += 64+6; } y += 64+6; } s_playermodel.playername.generic.type = MTYPE_PTEXT; s_playermodel.playername.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE; s_playermodel.playername.generic.x = 320; s_playermodel.playername.generic.y = 440; s_playermodel.playername.string = playername; s_playermodel.playername.style = UI_CENTER; s_playermodel.playername.color = text_color_normal; s_playermodel.modelname.generic.type = MTYPE_PTEXT; s_playermodel.modelname.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE; s_playermodel.modelname.generic.x = 497; s_playermodel.modelname.generic.y = 54; s_playermodel.modelname.string = modelname; s_playermodel.modelname.style = UI_CENTER; s_playermodel.modelname.color = text_color_normal; s_playermodel.skinname.generic.type = MTYPE_PTEXT; s_playermodel.skinname.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE; s_playermodel.skinname.generic.x = 497; s_playermodel.skinname.generic.y = 394; s_playermodel.skinname.string = skinname; s_playermodel.skinname.style = UI_CENTER; s_playermodel.skinname.color = text_color_normal; s_playermodel.player.generic.type = MTYPE_BITMAP; s_playermodel.player.generic.flags = QMF_INACTIVE; s_playermodel.player.generic.ownerdraw = PlayerModel_DrawPlayer; s_playermodel.player.generic.x = 400; s_playermodel.player.generic.y = -40; s_playermodel.player.width = 32*10; s_playermodel.player.height = 56*10; s_playermodel.arrows.generic.type = MTYPE_BITMAP; s_playermodel.arrows.generic.name = MODEL_ARROWS; s_playermodel.arrows.generic.flags = QMF_INACTIVE; s_playermodel.arrows.generic.x = 125; s_playermodel.arrows.generic.y = 340; s_playermodel.arrows.width = 128; s_playermodel.arrows.height = 32; s_playermodel.left.generic.type = MTYPE_BITMAP; s_playermodel.left.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_playermodel.left.generic.callback = PlayerModel_MenuEvent; s_playermodel.left.generic.id = ID_PREVPAGE; s_playermodel.left.generic.x = 125; s_playermodel.left.generic.y = 340; s_playermodel.left.width = 64; s_playermodel.left.height = 32; s_playermodel.left.focuspic = MODEL_ARROWSL; s_playermodel.right.generic.type = MTYPE_BITMAP; s_playermodel.right.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_playermodel.right.generic.callback = PlayerModel_MenuEvent; s_playermodel.right.generic.id = ID_NEXTPAGE; s_playermodel.right.generic.x = 125+61; s_playermodel.right.generic.y = 340; s_playermodel.right.width = 64; s_playermodel.right.height = 32; s_playermodel.right.focuspic = MODEL_ARROWSR; s_playermodel.back.generic.type = MTYPE_BITMAP; s_playermodel.back.generic.name = MODEL_BACK0; s_playermodel.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_playermodel.back.generic.callback = PlayerModel_MenuEvent; s_playermodel.back.generic.id = ID_BACK; s_playermodel.back.generic.x = 0; s_playermodel.back.generic.y = 480-64; s_playermodel.back.width = 128; s_playermodel.back.height = 64; s_playermodel.back.focuspic = MODEL_BACK1; Menu_AddItem( &s_playermodel.menu, &s_playermodel.banner ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.framel ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.framer ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.ports ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.playername ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.modelname ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.skinname ); for (i=0; i<MAX_MODELSPERPAGE; i++) { Menu_AddItem( &s_playermodel.menu, &s_playermodel.pics[i] ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.picbuttons[i] ); } Menu_AddItem( &s_playermodel.menu, &s_playermodel.player ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.arrows ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.left ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.right ); Menu_AddItem( &s_playermodel.menu, &s_playermodel.back ); // find all available models // PlayerModel_BuildList(); // set initial states PlayerModel_SetMenuItems(); // update user interface PlayerModel_UpdateGrid(); PlayerModel_UpdateModel(); }