#ifdef INTERFACE CLASS(VoretCreditsList) EXTENDS(VoretListBox) METHOD(VoretCreditsList, configureVoretCreditsList, void(entity)) ATTRIB(VoretCreditsList, rowsPerItem, float, 1) METHOD(VoretCreditsList, draw, void(entity)) METHOD(VoretCreditsList, drawListBoxItem, void(entity, float, vector, float)) METHOD(VoretCreditsList, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(VoretCreditsList, keyDown, float(entity, float, float, float)) METHOD(VoretCreditsList, destroy, void(entity)) ATTRIB(VoretCreditsList, realFontSize, vector, '0 0 0') ATTRIB(VoretCreditsList, realUpperMargin, float, 0) ATTRIB(VoretCreditsList, bufferIndex, float, 0) ATTRIB(VoretCreditsList, scrolling, float, 0) ATTRIB(VoretListBox, alphaBG, float, 0) ENDCLASS(VoretCreditsList) entity makeVoretCreditsList(); #endif #ifdef IMPLEMENTATION entity makeVoretCreditsList() { entity me; me = spawnVoretCreditsList(); me.configureVoretCreditsList(me); return me; } void configureVoretCreditsListVoretCreditsList(entity me) { me.configureVoretListBox(me); // load the file me.bufferIndex = buf_load("voretournament-credits.txt"); me.nItems = buf_getsize(me.bufferIndex); } void destroyVoretCreditsList(entity me) { buf_del(me.bufferIndex); } void drawVoretCreditsList(entity me) { float i; if(me.scrolling) { me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1); i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)); i = max(i, ceil(me.scrollPos / me.itemHeight)); me.setSelected(me, i); } drawListBox(me); } void resizeNotifyVoretCreditsList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { resizeNotifyVoretListBox(me, relOrigin, relSize, absOrigin, absSize); me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight); me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth)); me.realUpperMargin = 0.5 * (1 - me.realFontSize_y); } void drawListBoxItemVoretCreditsList(entity me, float i, vector absSize, float isSelected) { // layout: Ping, Credits name, Map name, NP, TP, MP string s; float theAlpha; vector theColor; s = bufstr_get(me.bufferIndex, i); if(substring(s, 0, 2) == "**") { s = substring(s, 2, strlen(s) - 2); theColor = SKINCOLOR_CREDITS_TITLE; theAlpha = SKINALPHA_CREDITS_TITLE; } else if(substring(s, 0, 1) == "*") { s = substring(s, 1, strlen(s) - 1); theColor = SKINCOLOR_CREDITS_FUNCTION; theAlpha = SKINALPHA_CREDITS_FUNCTION; } else { theColor = SKINCOLOR_CREDITS_PERSON; theAlpha = SKINALPHA_CREDITS_PERSON; } draw_CenterText(me.realUpperMargin * eY + 0.5 * eX, s, me.realFontSize, theColor, theAlpha, 0); } float keyDownVoretCreditsList(entity me, float scan, float ascii, float shift) { float i; me.dragScrollTimer = time; me.scrolling = 0; if(scan == K_PGUP) me.scrollPos = max(me.scrollPos - 0.5, 0); else if(scan == K_PGDN) me.scrollPos = min(me.scrollPos + 0.5, me.nItems * me.itemHeight - 1); else if(scan == K_UPARROW) me.scrollPos = max(me.scrollPos - me.itemHeight, 0); else if(scan == K_DOWNARROW) me.scrollPos = min(me.scrollPos + me.itemHeight, me.nItems * me.itemHeight - 1); else return keyDownListBox(me, scan, ascii, shift); i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)); i = max(i, ceil(me.scrollPos / me.itemHeight)); me.setSelected(me, i); return 1; } #endif