float sortbuf, glob, i;
string fn;
+ glob = search_begin(language_filename(get_model_datafilename(string_null, -1, "txt")), TRUE, TRUE);
+ if (glob < 0)
+ return;
+
me.configureXonoticImage(me, string_null, -1);
sortbuf = buf_create();
- glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE);
for(i = 0; i < search_getsize(glob); ++i)
{
// select model #i!
bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN, ftos(get_model_parameters_modelskin));
get_model_parameters_desc = strcat(get_model_parameters_desc, "\n");
if(get_model_parameters_sex)
- get_model_parameters_desc = strcat(get_model_parameters_desc, "\nSex: ", get_model_parameters_sex);
+ get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nSex: %s", get_model_parameters_sex));
if(get_model_parameters_weight)
- get_model_parameters_desc = strcat(get_model_parameters_desc, "\nWeight: ", ftos(get_model_parameters_weight), " kg");
+ get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nWeight: %g kg", get_model_parameters_weight));
if(get_model_parameters_age)
- get_model_parameters_desc = strcat(get_model_parameters_desc, "\nAge: ", ftos(get_model_parameters_age));
+ get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nAge: %g", get_model_parameters_age));
while(substring(get_model_parameters_desc, -1, 1) == "\n")
get_model_parameters_desc = substring(get_model_parameters_desc, 0, -2);
bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_DESC, get_model_parameters_desc);
}
buf_del(sortbuf);
get_model_parameters(string_null, 0);
- me.loadCvars(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)
{
void XonoticPlayerModelSelector_loadCvars(entity me)
{
+ string skin, modelname;
float i;
- if(me.currentModel)
- strunzone(me.currentModel);
- me.currentSkin = cvar("_cl_playerskin");
- me.currentModel = strzone(cvar_string("_cl_playermodel"));
+
+ skin = cvar_string("_cl_playerskin");
+ modelname = cvar_string("_cl_playermodel");
+
for(i = 0; i < me.numModels; ++i)
{
- if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == me.currentModel)
- if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == ftos(me.currentSkin))
+ if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == modelname)
+ if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == skin)
break;
}
if(i >= me.numModels) // fail
i = 0;
me.idxModels = i;
- me.go(me, 0); // this will set the other vars for currentSkin and currentModel
}
void XonoticPlayerModelSelector_go(entity me, float d)
me.currentModelDescription = strzone(bufstr_get(me.bufModels, BUFMODELS_COUNT*me.idxModels+BUFMODELS_DESC));
// fix the image
- me.src = me.currentModelImage;
+ if(draw_PictureSize(me.currentModelImage) == '0 0 0')
+ me.src = "nopreview_player";
+ else
+ me.src = me.currentModelImage;
me.updateAspect(me);
}
void PlayerModelSelector_Next_Click(entity btn, entity me)
{
+ if (me.numModels <= 0)
+ return;
me.go(me, +1);
me.saveCvars(me);
}
void PlayerModelSelector_Prev_Click(entity btn, entity me)
{
+ if (me.numModels <= 0)
+ return;
me.go(me, -1);
me.saveCvars(me);
}
float i, n;
vector o;
- SUPER(XonoticPlayerModelSelector).draw(me);
+ if (me.numModels <= 0)
+ {
+ draw_CenterText('0.5 0.5 0', _("<no model found>"), me.realFontSize, '1 1 1', 0.6, FALSE);
+ return;
+ }
+ SUPER(XonoticPlayerModelSelector).draw(me);
// draw text on the image, handle \n in the description
+
+ draw_beginBoldFont();
+
draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
+ draw_endBoldFont();
+
o = '0.5 1 0' - eY * me.realFontSize_y * ((n = tokenizebyseparator(me.currentModelDescription, "\n")) + 0.5);
for(i = 0; i < n; ++i)
{