]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/vehicles/collision.qc
Merge master
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / vehicles / collision.qc
1 vector collision_force;
2 vector collision_angle;
3
4 vector bb1[9];
5 vector bb2[9];
6
7 float collision_run()
8 {
9     vector vtmp, vmin, vmax, vrot, vforce;
10     float i, fvel, bcol;
11
12
13     // Extract the 8 bbox corners from mins/maxs for self
14     vmax = self.maxs;
15     vmin = self.mins;
16     bb1[0] = vmax;
17     vtmp   = vmax; vtmp_x = vmin_x; bb1[1] = vtmp;
18     vtmp   = vmax; vtmp_y = vmin_y; bb1[2] = vtmp;
19     vtmp   = vmin; vtmp_z = vmax_z; bb1[3] = vtmp;
20     bb1[4] = vmin;
21     vtmp   = vmin; vtmp_x = vmax_x; bb1[5] = vtmp;
22     vtmp   = vmin; vtmp_y = vmax_y; bb1[6] = vtmp;
23     vtmp   = vmax; vtmp_z = vmin_z; bb1[7] = vtmp;
24
25     makevectors(self.angles + '-2 0 0' * self.angles_x);
26     bcol = FALSE;
27     // Pass1: Transform by rotation, ajust points by impact/s
28     for(i = 8; i >= 0; --i)
29     {
30         vtmp = bb1[i];
31         vtmp = self.origin + vtmp_x * v_forward - vtmp_y * v_right + vtmp_z * v_up;
32         traceline(self.origin, vtmp, MOVE_WORLDONLY, self);
33         te_lightning1(world,self.origin,vtmp);
34         if(trace_fraction != 1.0)
35         {
36             //bb2[i] = trace_endpos;
37             vforce += (trace_endpos - vtmp);
38             bcol = TRUE;
39         }
40         else
41             bb2[i] = bb1[i];
42     }
43
44     if(bcol)
45     {
46         //self.angles   += vectoangles(vrot) * frametime;
47         //self.angles   -= (self.velocity - vectoangles(normalize(vforce))) * frametime;
48
49         vtmp = self.origin + self.velocity * frametime;
50         vrot = self.origin + vforce * frametime;
51         //self.angles += vectoangles(normalize(vtmp - vrot)) * frametime;
52         self.velocity += vforce * frametime;
53
54     }
55
56
57 // Extract the 8 bbox corners from mins/maxs for self
58 /*
59     bb1[0] = self.absmax;
60     vtmp   = self.absmax; vtmp_x = self.absmin_x; bb1[1] = vtmp;
61     vtmp   = self.absmax; vtmp_y = self.absmin_y; bb1[2] = vtmp;
62     vtmp   = self.absmin; vtmp_z = self.absmax_z; bb1[3] = vtmp;
63     bb1[4] = self.absmin;
64     vtmp   = self.absmin; vtmp_x = self.absmax_x; bb1[5] = vtmp;
65     vtmp   = self.absmin; vtmp_y = self.absmax_y; bb1[6] = vtmp;
66     vtmp   = self.absmax; vtmp_z = self.absmin_z; bb1[7] = vtmp;
67
68
69 // Extract the 8 bbox corners from mins/maxs for other
70     bb1[0] = other.absmax;
71     vtmp   = other.absmax; vtmp_x = other.absmin_x; bb2[1] = vtmp;
72     vtmp   = other.absmax; vtmp_y = other.absmin_y; bb2[2] = vtmp;
73     vtmp   = other.absmin; vtmp_z = other.absmax_z; bb2[3] = vtmp;
74     bb2[4] = other.absmin;
75     vtmp   = other.absmin; vtmp_x = other.absmax_x; bb2[5] = vtmp;
76     vtmp   = other.absmin; vtmp_y = other.absmax_y; bb2[6] = vtmp;
77     vtmp   = other.absmax; vtmp_z = other.absmin_z; bb2[7] = vtmp;
78 */
79 }
80