]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/modeleffects.qc
Merge branch 'master' into terencehill/string_prefixes_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / modeleffects.qc
1 #include "modeleffects.qh"
2
3 void ModelEffect_Draw()
4 {
5         self.angles = self.angles + frametime * self.avelocity;
6         setorigin(self, self.origin + frametime * self.velocity);
7         self.scale = self.scale1 + (self.scale2 - self.scale1) * (time - self.teleport_time) / (self.lifetime + self.fadetime - self.teleport_time);
8         self.alpha = self.cnt * bound(0, 1 - (time - self.lifetime) / self.fadetime, 1);
9         if(self.alpha < ALPHA_MIN_VISIBLE)
10         {
11                 remove(self);
12                 return;
13         }
14         self.drawmask = MASK_NORMAL;
15         if(self.scale <= 0)
16         {
17                 self.drawmask = 0;
18                 return;
19         }
20 }
21
22 void Ent_ModelEffect(bool isNew)
23 {
24         self.classname = "modeleffect_spawner";
25
26         int f = ReadByte();
27
28         entity e = spawn();
29         e.classname = "modeleffect";
30         e.model = "from network";
31         e.modelindex = ReadShort();
32         e.skin = ReadByte();
33         e.frame = ReadByte();
34         e.frame1time = time;
35         e.origin_x = ReadCoord();
36         e.origin_y = ReadCoord();
37         e.origin_z = ReadCoord();
38         setorigin(e, e.origin);
39         if(f & 1)
40         {
41                 e.velocity_x = ReadCoord();
42                 e.velocity_y = ReadCoord();
43                 e.velocity_z = ReadCoord();
44         }
45         if(f & 2)
46         {
47                 e.angles_x = ReadAngle();
48                 e.angles_y = ReadAngle();
49                 e.angles_z = ReadAngle();
50         }
51         if(f & 4)
52         {
53                 e.avelocity_x = ReadAngle();
54                 e.avelocity_y = ReadAngle();
55                 e.avelocity_z = ReadAngle();
56         }
57         e.scale1 = ReadShort() / 256.0;
58         e.scale2 = ReadShort() / 256.0;
59         e.lifetime = time + ReadByte() * 0.01;
60         e.fadetime = ReadByte() * 0.01;
61         e.teleport_time = time;
62         e.cnt = ReadByte() / 255.0; // actually alpha
63
64         e.draw = ModelEffect_Draw;
65
66         if(!isNew)
67                 remove(e); // yes, this IS stupid, but I don't need to duplicate all the read* stuff then
68 }