]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/csqcmodel_hooks.qc
Merge branch 'master' into divVerent/csqcmodel
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / csqcmodel_hooks.qc
1 .vector glowmod;
2 .float lodmodelindex0;
3 .float lodmodelindex1;
4 .float lodmodelindex2;
5
6 void CSQCModel_Hook_PreDraw()
7 {
8         // auto glowmod from colormap
9         self.glowmod = colormapPaletteColor(((self.colormap >= 1024) ? (self.colormap & 0xFF) : stof(getplayerkey(self.entnum - 1, "colors"))), TRUE) * 2;
10
11         if(self.modelindex != 0)
12         {
13                 // LOD
14                 if(self.lodmodelindex0 != self.modelindex)
15                 {
16                         string modelname = self.model;
17                         string s;
18
19                         // set modelindex
20                         self.lodmodelindex0 = self.modelindex;
21                         self.lodmodelindex1 = self.modelindex;
22                         self.lodmodelindex2 = self.modelindex;
23
24                         // FIXME: this only supports 3-letter extensions
25                         s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod1", substring(modelname, -4, 4));
26                         if(fexists(s))
27                         {
28                                 precache_model(s);
29                                 setmodel(self, s);
30                                 if(self.modelindex > 0)
31                                         self.lodmodelindex1 = self.modelindex;
32                         }
33
34                         s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod2", substring(modelname, -4, 4));
35                         if(fexists(s))
36                         {
37                                 precache_model(s);
38                                 setmodel(self, s);
39                                 if(self.modelindex > 0)
40                                         self.lodmodelindex2 = self.modelindex;
41                         }
42
43                         setmodel(self, modelname); // make everything normal again
44                 }
45
46                 if(autocvar_cl_playerdetailreduction <= 0)
47                 {
48                         if(autocvar_cl_playerdetailreduction <= -2)
49                                 self.modelindex = self.lodmodelindex2;
50                         else if(autocvar_cl_playerdetailreduction <= -1)
51                                 self.modelindex = self.lodmodelindex1;
52                         else
53                                 self.modelindex = self.lodmodelindex0;
54                 }
55                 else
56                 {
57                         float distance = vlen(self.origin - other.origin);
58                         float f = (distance + 100.0) * autocvar_cl_playerdetailreduction;
59                         if(f > autocvar_cl_loddistance2)
60                                 self.modelindex = self.lodmodelindex2;
61                         else if(f > autocvar_cl_loddistance1)
62                                 self.modelindex = self.lodmodelindex1;
63                         else
64                                 self.modelindex = self.lodmodelindex0;
65                 }
66         }
67 }
68