]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/view.qc
Viewmodels: CSQC rendering
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / view.qc
index c7144372a304b45bdee0cbbcc4036b5681015523..54fefa68e28e16fd251a18c1d8fe0232324c3267 100644 (file)
@@ -10,6 +10,7 @@
 
 #include "mutators/events.qh"
 
+#include "../common/anim.qh"
 #include "../common/constants.qh"
 #include "../common/mapinfo.qh"
 #include "../common/gamemodes/all.qh"
 #include "../lib/warpzone/client.qh"
 #include "../lib/warpzone/common.qh"
 
+void viewmodel_draw(entity this)
+{
+       int c = stof(getplayerkeyvalue(player_localnum, "colors"));
+       vector g = colormapPaletteColor(c & 0x0F, true) * 2;
+       for (entity e = this; e; e = e.weaponchild)
+       {
+               e.colormap = c;
+               e.glowmod = g;
+       }
+}
+
+entity viewmodel;
+STATIC_INIT(viewmodel) {
+       viewmodel = new(viewmodel);
+       viewmodel.drawmask = MASK_NORMAL;
+       viewmodel.draw = viewmodel_draw;
+}
+
 entity porto;
 vector polyline[16];
 void Porto_Draw(entity this)
@@ -1234,6 +1253,17 @@ void CSQC_UpdateView(float w, float h)
 
        WarpZone_FixView();
        //WarpZone_FixPMove();
+       {
+               static string name_last;
+               string name = get_weaponinfo(switchingweapon).mdl;
+               if (name != name_last)
+               {
+                       CL_WeaponEntity_SetModel(viewmodel, name_last = name);
+                       updateanim(viewmodel);
+                       if (!viewmodel.animstate_override)
+                               setanim(viewmodel, viewmodel.anim_idle, true, false, false);
+               }
+       }
 
        vector ov_org = '0 0 0';
        vector ov_mid = '0 0 0';