]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/client/sortlist.qc
Grabber casing sounds
[voretournament/voretournament.git] / data / qcsrc / client / sortlist.qc
1 //.float(entity,entity) sort_cmp;\r
2 .entity sort_next, sort_prev;\r
3 \r
4 entity Sort_Spawn()\r
5 {\r
6         entity sort;\r
7         sort = spawn();\r
8         sort.sort_next = NULL;\r
9         sort.chain = sort;\r
10         return sort;\r
11 }\r
12 /*\r
13 entity Sort_New(float(entity,entity) cmp)\r
14 {\r
15         entity sort;\r
16         sort = spawn();\r
17         sort.sort_cmp = cmp;\r
18         sort.sort_next = NULL;\r
19         sort.chain = sort;\r
20         return sort;\r
21 }\r
22 \r
23 void Sort_Remove(entity sort)\r
24 {\r
25         entity next;\r
26         while(sort.sort_next)\r
27         {\r
28                 next = sort.sort_next;\r
29                 remove(sort);\r
30                 sort = next;\r
31         }\r
32         remove(sort);\r
33 }\r
34 \r
35 void Sort_Add(entity sort, entity ent)\r
36 {\r
37         entity next, parent;\r
38         parent = sort;\r
39         next = sort.sort_next;\r
40         while(next)\r
41         {\r
42                 if(!sort.sort_cmp(next, ent))\r
43                         break;\r
44                 parent = next;\r
45                 next = next.sort_next;\r
46         }\r
47         ent.sort_next = next;\r
48         ent.sort_prev = parent;\r
49         parent.sort_next = ent;\r
50         if(next)\r
51                 next.sort_prev = ent;\r
52 }\r
53 \r
54 void Sort_Reset(entity sort)\r
55 {\r
56         sort.chain = sort;\r
57 }\r
58 \r
59 float Sort_HasNext(entity sort)\r
60 {\r
61         return (sort.chain.sort_next != NULL);\r
62 }\r
63 \r
64 entity Sort_Next(entity sort)\r
65 {\r
66         entity next;\r
67         next = sort.chain.sort_next;\r
68         if(!next) {\r
69                 next = spawn();\r
70                 sort.chain.sort_next = next;\r
71                 next.sort_prev = sort.chain;\r
72                 next.sort_next = NULL;\r
73         }\r
74         sort.chain = next;\r
75         return next;\r
76 }\r
77 \r
78 void Sort_Finish(entity sort)\r
79 {\r
80         entity next;\r
81         next = sort.chain;\r
82         if(!next)\r
83                 return;\r
84 \r
85         while(next.sort_next)\r
86         {\r
87                 sort = next.sort_next;\r
88                 next.sort_next = sort.sort_next;\r
89                 remove(sort);\r
90         }\r
91 }\r
92 \r
93 entity Sort_Get(entity sort, float i)\r
94 {\r
95         for(; sort.sort_next && i > 0; --i)\r
96                 sort = sort.sort_next;\r
97         return sort;\r
98 }\r
99 */\r
100 \r
101 /**\r
102  * Swap two neighbours in a sortlist.\r
103  * @param a FIRST entity\r
104  * @param b entity after a\r
105  */\r
106 #define SORT_SWAP(a,b)                                                                  \\r
107         b.sort_prev = a.sort_prev;                                                      \\r
108         a.sort_next = b.sort_next;                                                      \\r
109         if(b.sort_next) b.sort_next.sort_prev = a;                      \\r
110         if(a.sort_prev) a.sort_prev.sort_next = b;                      \\r
111         a.sort_prev = b;                                                                        \\r
112         b.sort_next = a\r
113 \r
114 /*\r
115 void Sort_Erase(entity ent)\r
116 {\r
117         ent.sort_prev.sort_next = ent.sort_next;\r
118         if(ent.sort_next)\r
119                 ent.sort_next.sort_prev = ent.sort_prev;\r
120         remove(ent);\r
121 }\r
122 \r
123 void Sort_RemoveOld(entity sort)\r
124 {\r
125         entity tmp;\r
126         for(tmp = sort.sort_next; tmp; tmp = tmp.sort_next)\r
127         {\r
128                 if(tmp.frame < time)\r
129                 {\r
130                         tmp = tmp.sort_prev;\r
131                         Sort_Erase(tmp.sort_next);\r
132                 }\r
133         }\r
134 }\r
135 */\r