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