X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Fgametypelist.qc;h=030af6715339257b23ddb7d4a07531f1a489635c;hb=ff442844108257ce535eae6dc08eaf659ff5efd7;hp=e3df84467708fc9ab1c47a04410e66fa15aa21b2;hpb=d99a102842ced06e6e1a0c9358c07c3b64523968;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/gametypelist.qc b/qcsrc/menu/xonotic/gametypelist.qc index e3df84467..030af6715 100644 --- a/qcsrc/menu/xonotic/gametypelist.qc +++ b/qcsrc/menu/xonotic/gametypelist.qc @@ -1,13 +1,16 @@ -#ifdef INTERFACE -CLASS(XonoticGametypeList) EXTENDS(XonoticListBox) +#ifndef GAMETYPELIST_H +#define GAMETYPELIST_H +#include "listbox.qc" +CLASS(XonoticGametypeList, XonoticListBox) METHOD(XonoticGametypeList, configureXonoticGametypeList, void(entity)) ATTRIB(XonoticGametypeList, rowsPerItem, float, 2) - METHOD(XonoticGametypeList, drawListBoxItem, void(entity, float, vector, float)) + METHOD(XonoticGametypeList, drawListBoxItem, void(entity, int, vector, bool, bool)) METHOD(XonoticGametypeList, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(XonoticGametypeList, setSelected, void(entity, float)) METHOD(XonoticGametypeList, loadCvars, void(entity)) METHOD(XonoticGametypeList, saveCvars, void(entity)) METHOD(XonoticGametypeList, keyDown, float(entity, float, float, float)) + METHOD(XonoticGametypeList, clickListBoxItem, void(entity, float, vector)) ATTRIB(XonoticGametypeList, realFontSize, vector, '0 0 0') ATTRIB(XonoticGametypeList, realUpperMargin, float, 0) @@ -24,19 +27,20 @@ entity makeXonoticGametypeList(); entity makeXonoticGametypeList(void) { entity me; - me = spawnXonoticGametypeList(); + me = NEW(XonoticGametypeList); me.configureXonoticGametypeList(me); return me; } void XonoticGametypeList_configureXonoticGametypeList(entity me) { - float i; me.configureXonoticListBox(me); me.nItems = GameType_GetCount(); - // we want the pics mipmapped - for(i = 0; i < GameType_GetCount(); ++i) - draw_PreloadPictureWithFlags(GameType_GetIcon(i), PRECACHE_PIC_MIPMAP); + if(SKINBOOL_GAMETYPELIST_ICON_BLUR) + { + for(int i = 0; i < GameType_GetCount(); ++i) + draw_PreloadPictureWithFlags(GameType_GetIcon(i), PRECACHE_PIC_MIPMAP); + } me.loadCvars(me); } @@ -45,7 +49,6 @@ void XonoticGametypeList_setSelected(entity me, float i) SUPER(XonoticGametypeList).setSelected(me, i); me.saveCvars(me); } - void XonoticGametypeList_loadCvars(entity me) { float t; @@ -67,33 +70,41 @@ void XonoticGametypeList_loadCvars(entity me) } void XonoticGametypeList_saveCvars(entity me) { - float t; - t = GameType_GetID(me.selectedItem); - if(t == MapInfo_CurrentGametype()) + int t = GameType_GetID(me.selectedItem); + if (t == MapInfo_CurrentGametype()) { return; + } MapInfo_SwitchGameType(t); - me.parent.gameTypeChangeNotify(me.parent); + entity owner = me.parent; + if (owner) { // not set immediately + owner.gameTypeChangeNotify(owner); + } } -void XonoticGametypeList_drawListBoxItem(entity me, float i, vector absSize, float isSelected) +void XonoticGametypeList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused) { string s1, s2; if(isSelected) draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); + else if(isFocused) + { + me.focusedItemAlpha = getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha); + } draw_Picture(me.columnIconOrigin * eX, GameType_GetIcon(i), me.columnIconSize * eX + eY, '1 1 1', SKINALPHA_LISTBOX_SELECTED); s1 = GameType_GetName(i); - + if(_MapInfo_GetTeamPlayBool(GameType_GetID(i))) s2 = _("teamplay"); else s2 = _("free for all"); vector save_fontscale = draw_fontscale; - float f = draw_CondensedFontFactor(strcat(s1, " ", s2), FALSE, me.realFontSize, 1); - draw_fontscale_x *= f; + float f = draw_CondensedFontFactor(strcat(s1, " ", s2), false, me.realFontSize, 1); + draw_fontscale.x *= f; vector fs = me.realFontSize; - fs_x *= f; + fs.x *= f; draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s1, fs, '1 1 1', SKINALPHA_TEXT, 0); draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 1.0 * (me.columnNameSize - draw_TextWidth(s2, 0, fs))) * eX, s2, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0); draw_fontscale = save_fontscale; @@ -103,23 +114,27 @@ void XonoticGametypeList_resizeNotify(entity me, vector relOrigin, vector relSiz me.itemAbsSize = '0 0 0'; SUPER(XonoticServerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); - me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight)); - me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth))); - me.realUpperMargin = 0.5 * (1 - me.realFontSize_y); + me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize.y * me.itemHeight)); + me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize.x * (1 - me.controlWidth))); + me.realUpperMargin = 0.5 * (1 - me.realFontSize.y); me.columnIconOrigin = 0; - me.columnIconSize = me.itemAbsSize_y / me.itemAbsSize_x; - me.columnNameOrigin = me.columnIconOrigin + me.columnIconSize + (0.5 * me.realFontSize_x); - me.columnNameSize = 1 - me.columnIconSize - (1.5 * me.realFontSize_x); + me.columnIconSize = me.itemAbsSize.y / me.itemAbsSize.x; + me.columnNameOrigin = me.columnIconOrigin + me.columnIconSize + (0.5 * me.realFontSize.x); + me.columnNameSize = 1 - me.columnIconSize - (1.5 * me.realFontSize.x); } - float XonoticGametypeList_keyDown(entity me, float scan, float ascii, float shift) { if(scan == K_ENTER || scan == K_KP_ENTER) { + m_play_click_sound(MENU_SOUND_EXECUTE); me.parent.gameTypeSelectNotify(me.parent); return 1; } return SUPER(XonoticGametypeList).keyDown(me, scan, ascii, shift); } +void XonoticGametypeList_clickListBoxItem(entity me, float i, vector where) +{ + m_play_click_sound(MENU_SOUND_SELECT); +} #endif