]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/playermodel.qc
Change indentation from spaces to tabs
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / playermodel.qc
index 3af8238ddd1812f7b56c28f87309eb9fdee24de5..d53369b449644b5ac8fbd6c22c6101527529be5b 100644 (file)
@@ -1,41 +1,10 @@
-#ifndef PLAYERMODEL_H
-#define PLAYERMODEL_H
-#include "image.qc"
-CLASS(XonoticPlayerModelSelector, XonoticImage)
-       METHOD(XonoticPlayerModelSelector, configureXonoticPlayerModelSelector, void(entity));
-       METHOD(XonoticPlayerModelSelector, loadModels, 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;
 }
 
@@ -48,8 +17,10 @@ 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)
 {
+       me.skinCvar = theSkinCvar;
+       me.modelCvar = theModelCvar;
        me.configureXonoticImage(me, string_null, -1);
 }
 
@@ -58,7 +29,7 @@ void XonoticPlayerModelSelector_loadModels(entity me)
        int i;
        string fn;
 
-       float 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;
 
@@ -69,6 +40,8 @@ void XonoticPlayerModelSelector_loadModels(entity me)
                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);
@@ -80,6 +53,8 @@ void XonoticPlayerModelSelector_loadModels(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);
@@ -122,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;
@@ -140,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')
@@ -183,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)
@@ -232,4 +198,3 @@ void XonoticPlayerModelSelector_showNotify(entity me)
        me.destroy(me);
        me.loadModels(me);
 }
-#endif