]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/client/grabber.qc
First part of the predator stomach board; Send the stomach load stat of the predator...
[voretournament/voretournament.git] / data / qcsrc / client / grabber.qc
1 .vector GrabberStart;\r
2 .vector GrabberEnd;\r
3 .float GrabberKillTime;\r
4 \r
5 void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float alpha, float drawflag)\r
6 {\r
7         // I want to draw a quad...\r
8         // from and to are MIDPOINTS.\r
9         \r
10         vector axis, thickdir, A, B, C, D;\r
11         float length_tex;\r
12 \r
13         axis = normalize(to - from);\r
14         length_tex = aspect * vlen(to - from) / thickness;\r
15 \r
16         // direction is perpendicular to the view normal, and perpendicular to the axis\r
17         thickdir = normalize(cross(axis, view_origin - from));\r
18 \r
19         A = from - thickdir * (thickness / 2);\r
20         B = from + thickdir * (thickness / 2);\r
21         C = to + thickdir * (thickness / 2);\r
22         D = to - thickdir * (thickness / 2);\r
23 \r
24         R_BeginPolygon(texture, drawflag);\r
25         R_PolygonVertex(A, '0 0 0' + shift * '1 0 0', rgb, alpha);\r
26         R_PolygonVertex(B, '0 1 0' + shift * '1 0 0', rgb, alpha);\r
27         R_PolygonVertex(C, '0 1 0' + (shift + length_tex) * '1 0 0', rgb, alpha);\r
28         R_PolygonVertex(D, '0 0 0' + (shift + length_tex) * '1 0 0', rgb, alpha);\r
29         R_EndPolygon();\r
30 }\r
31 \r
32 string Draw_Grabber_trace_callback_tex;\r
33 float Draw_Grabber_trace_callback_rnd;\r
34 void Draw_Grabber_trace_callback(vector start, vector hit, vector end)\r
35 {\r
36         Draw_CylindricLine(hit, start, 8, Draw_Grabber_trace_callback_tex, 0.25, Draw_Grabber_trace_callback_rnd, '1 1 1', 1, DRAWFLAG_NORMAL);\r
37         Draw_Grabber_trace_callback_rnd += 0.25 * vlen(hit - start) / 8;\r
38 }\r
39 \r
40 void Draw_Grabber()\r
41 {\r
42         vector a, b;\r
43         string tex;\r
44         vector rgb;\r
45         float t;\r
46 \r
47         if(time >= self.GrabberKillTime)\r
48                 return;\r
49         if(self.sv_entnum == player_localentnum - 1)\r
50                 a = view_origin + view_forward * grabber_shotorigin_x + view_right * grabber_shotorigin_y + view_up * grabber_shotorigin_z;\r
51         else\r
52                 a = self.GrabberStart;\r
53         b = self.GrabberEnd;\r
54 \r
55         t = GetPlayerColorForce(self.sv_entnum);\r
56 \r
57         if(t == COLOR_TEAM1)\r
58         {\r
59                 tex = "particles/grabber_red";\r
60                 rgb = '1 .3 .3';\r
61         }\r
62         else if(t == COLOR_TEAM2)\r
63         {\r
64                 tex = "particles/grabber_blue";\r
65                 rgb = '.3 .3 1';\r
66         }\r
67         else if(t == COLOR_TEAM3)\r
68         {\r
69                 tex = "particles/grabber_yellow";\r
70                 rgb = '1 1 .3';\r
71         }\r
72         else if(t == COLOR_TEAM4)\r
73         {\r
74                 tex = "particles/grabber_pink";\r
75                 rgb = '1 .3 1';\r
76         }\r
77         else\r
78         {\r
79                 tex = "particles/grabber_white";\r
80                 rgb = '1 1 1';\r
81         }\r
82 \r
83         Draw_Grabber_trace_callback_tex = tex;\r
84         Draw_Grabber_trace_callback_rnd = random();\r
85         WarpZone_TraceBox_ThroughZone(a, '0 0 0', '0 0 0', b, MOVE_NOMONSTERS, world, world, Draw_Grabber_trace_callback);\r
86         Draw_Grabber_trace_callback_tex = string_null;\r
87 }\r
88 \r
89 void Net_Grabber()\r
90 {\r
91         float i;\r
92         vector start, end;\r
93         entity p;\r
94 \r
95         i = ReadShort();\r
96         end_x = ReadCoord();\r
97         end_y = ReadCoord();\r
98         end_z = ReadCoord();\r
99         start_x = ReadCoord();\r
100         start_y = ReadCoord();\r
101         start_z = ReadCoord();\r
102 \r
103         if(i <= 0 || i >= 256) // not owned by a client\r
104                 return;\r
105         --i;\r
106 \r
107         p = playerslots[i];\r
108         if(!p)\r
109                 return;\r
110 \r
111         p.GrabberKillTime = time + 0.1;\r
112         p.GrabberStart = start;\r
113         p.GrabberEnd = end;\r
114         p.draw = Draw_Grabber;\r
115 }\r