-#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 me;
void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me)
{
- float sortbuf, glob, i;
+ 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);
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);
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)
{
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')
void XonoticPlayerModelSelector_showNotify(entity me)
{
- me.configureXonoticPlayerModelSelector(me);
+ // Reinitialize self.
+ me.destroy(me);
+ me.loadModels(me);
}
-#endif