X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Fplayermodel.qc;h=d53369b449644b5ac8fbd6c22c6101527529be5b;hb=4aa29e204495aa03aa90a82956acc7712c19b837;hp=8e0e9ecd27705909a249bc5d1ac8ef972251c09d;hpb=50db7ae6bd2b87d7d7d06792985ec5219a8a5969;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/playermodel.qc b/qcsrc/menu/xonotic/playermodel.qc index 8e0e9ecd2..d53369b44 100644 --- a/qcsrc/menu/xonotic/playermodel.qc +++ b/qcsrc/menu/xonotic/playermodel.qc @@ -1,39 +1,10 @@ -#ifndef PLAYERMODEL_H -#define PLAYERMODEL_H -CLASS(XonoticPlayerModelSelector, XonoticImage) - METHOD(XonoticPlayerModelSelector, configureXonoticPlayerModelSelector, void(entity)) - METHOD(XonoticPlayerModelSelector, loadCvars, void(entity)) - METHOD(XonoticPlayerModelSelector, saveCvars, void(entity)) - METHOD(XonoticPlayerModelSelector, draw, void(entity)) - METHOD(XonoticPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector)) - METHOD(XonoticPlayerModelSelector, showNotify, void(entity)) - ATTRIB(XonoticPlayerModelSelector, currentModel, string, string_null) - ATTRIB(XonoticPlayerModelSelector, currentSkin, float, 0) - ATTRIB(XonoticPlayerModelSelector, currentModelImage, string, string_null) - ATTRIB(XonoticPlayerModelSelector, currentModelTitle, string, string_null) - ATTRIB(XonoticPlayerModelSelector, currentModelDescription, string, string_null) - METHOD(XonoticPlayerModelSelector, go, void(entity, float)) - METHOD(XonoticPlayerModelSelector, destroy, void(entity)) - ATTRIB(XonoticPlayerModelSelector, origin, vector, '0 0 0') - ATTRIB(XonoticPlayerModelSelector, size, vector, '0 0 0') - ATTRIB(XonoticPlayerModelSelector, realFontSize, vector, '0 0 0') - ATTRIB(XonoticPlayerModelSelector, fontSize, float, SKINFONTSIZE_NORMAL) - ATTRIB(XonoticPlayerModelSelector, titleFontSize, float, SKINFONTSIZE_TITLE) - ATTRIB(XonoticPlayerModelSelector, bufModels, float, -1) - ATTRIB(XonoticPlayerModelSelector, numModels, float, -1) - ATTRIB(XonoticPlayerModelSelector, idxModels, float, -1) -ENDCLASS(XonoticPlayerModelSelector) -entity makeXonoticPlayerModelSelector(); -void PlayerModelSelector_Next_Click(entity btn, entity me); -void PlayerModelSelector_Prev_Click(entity btn, entity me); -#endif +#include "playermodel.qh" -#ifdef IMPLEMENTATION -entity makeXonoticPlayerModelSelector() +entity makeXonoticPlayerModelSelector(string theSkinCvar, string theModelCvar) { entity me; me = NEW(XonoticPlayerModelSelector); - me.configureXonoticPlayerModelSelector(me); + me.configureXonoticPlayerModelSelector(me, theSkinCvar, theModelCvar); return me; } @@ -46,24 +17,31 @@ const float BUFMODELS_COUNT = 5; #define XONVOTE186 1 // (nyov) removal of model text description -void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me) +void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me, string theSkinCvar, string theModelCvar) { - float sortbuf, glob, i; + me.skinCvar = theSkinCvar; + me.modelCvar = theModelCvar; + me.configureXonoticImage(me, string_null, -1); +} + +void XonoticPlayerModelSelector_loadModels(entity me) +{ + int i; string fn; - glob = search_begin(language_filename(get_model_datafilename(string_null, -1, "txt")), true, true); + float glob = search_begin(get_model_datafilename(string_null, -1, "txt"), true, true); if (glob < 0) return; - me.configureXonoticImage(me, string_null, -1); - - sortbuf = buf_create(); + float sortbuf = buf_create(); for(i = 0; i < search_getsize(glob); ++i) { // select model #i! fn = search_getfilename(glob, i); if(!get_model_parameters(fn, -1)) continue; + if(get_model_parameters_hidden) + continue; bufstr_add(sortbuf, sprintf("%-128s%s", get_model_parameters_name, fn), 1); } search_end(glob); @@ -75,6 +53,8 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me) fn = substring(bufstr_get(sortbuf, i), 128, -1); if(!get_model_parameters(fn, -1)) error("But it JUST worked!"); + if(get_model_parameters_hidden) + continue; bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_TITLE, get_model_parameters_name); bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_IMAGE, strcat("/", substring(get_model_datafilename(get_model_parameters_modelname, get_model_parameters_modelskin, "tga"), 0, -5))); bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL, get_model_parameters_modelname); @@ -102,10 +82,14 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me) me.loadCvars(me); // this will select the initial model, depending on the current cvars me.go(me, 0); // this will set the vars for the selected model } + void XonoticPlayerModelSelector_destroy(entity me) { - buf_del(me.bufModels); - me.bufModels = -1; + if(me.bufModels >= 0) + { + buf_del(me.bufModels); + me.bufModels = -1; + } } void XonoticPlayerModelSelector_loadCvars(entity me) @@ -113,14 +97,14 @@ void XonoticPlayerModelSelector_loadCvars(entity me) string skin, modelname; float i; - skin = cvar_string("_cl_playerskin"); - modelname = cvar_string("_cl_playermodel"); + skin = cvar_string(me.skinCvar); + modelname = cvar_string(me.modelCvar); for(i = 0; i < me.numModels; ++i) { if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == modelname) - if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == skin) - break; + if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == skin) + break; } if(i >= me.numModels) // fail i = 0; @@ -131,21 +115,12 @@ void XonoticPlayerModelSelector_go(entity me, float d) { me.idxModels = mod(me.idxModels + d + me.numModels, me.numModels); - if(me.currentModel) - strunzone(me.currentModel); - if(me.currentModelTitle) - strunzone(me.currentModelTitle); - if(me.currentModelImage) - strunzone(me.currentModelImage); - if(me.currentModelDescription) - strunzone(me.currentModelDescription); - // select model #i! - me.currentModelTitle = strzone(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_TITLE)); - me.currentModelImage = strzone(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_IMAGE)); + strcpy(me.currentModelTitle, bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_TITLE)); + strcpy(me.currentModelImage, bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_IMAGE)); me.currentSkin = stof(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_SKIN)); - me.currentModel = strzone(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_MODEL)); - me.currentModelDescription = strzone(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_DESC)); + strcpy(me.currentModel, bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_MODEL)); + strcpy(me.currentModelDescription, bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_DESC)); // fix the image if(draw_PictureSize(me.currentModelImage) == '0 0 0') @@ -174,8 +149,8 @@ void PlayerModelSelector_Prev_Click(entity btn, entity me) void XonoticPlayerModelSelector_saveCvars(entity me) { // we can't immediately apply here because of flood control - cvar_set("_cl_playermodel", me.currentModel); - cvar_set("_cl_playerskin", ftos(me.currentSkin)); + cvar_set(me.modelCvar, me.currentModel); + cvar_set(me.skinCvar, ftos(me.currentSkin)); } void XonoticPlayerModelSelector_draw(entity me) @@ -219,6 +194,7 @@ void XonoticPlayerModelSelector_resizeNotify(entity me, vector relOrigin, vector void XonoticPlayerModelSelector_showNotify(entity me) { - me.configureXonoticPlayerModelSelector(me); + // Reinitialize self. + me.destroy(me); + me.loadModels(me); } -#endif