]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/client/sortlist.qc
(experimental) CSQC Hud - can be turned off with "sbar_usecsqc 0"
[divverent/nexuiz.git] / data / qcsrc / client / sortlist.qc
1
2
3 .float(entity,entity) sort_cmp;
4 .entity sort_next, sort_prev;
5
6 entity Sort_New(float(entity,entity) cmp)
7 {
8         entity sort;
9         sort = spawn();
10         sort.sort_cmp = cmp;
11         sort.sort_next = NULL;
12         return sort;
13 }
14
15 void Sort_Remove(entity sort)
16 {
17         entity next;
18         while(sort.sort_next)
19         {
20                 next = sort.sort_next;
21                 remove(sort);
22                 sort = next;
23         }
24         remove(sort);
25 }
26
27 void Sort_Add(entity sort, entity ent)
28 {
29         entity next, parent;
30         parent = sort;
31         next = sort.sort_next;
32         while(next && sort.sort_cmp(next, ent))
33         {
34                 parent = next;
35                 next = next.sort_next;
36         }
37         ent.sort_next = next;
38         ent.sort_prev = parent;
39         parent.sort_next = ent;
40         if(next)
41                 next.sort_prev = ent;
42 }
43
44 entity Sort_Get(entity sort, float i)
45 {
46         for(; sort.sort_next && i > 0; --i)
47                 sort = sort.sort_next;
48         return sort;
49 }
50
51 void Sort_DoSort(entity sort)
52 {
53         entity newsort, next, tmp;
54         newsort = Sort_New(sort.sort_cmp);
55         next = sort.sort_next;
56         while(next)
57         {
58                 tmp = next.sort_next;
59                 Sort_Add(newsort, next);
60                 next = tmp;
61         }
62         sort.sort_next = newsort.sort_next;
63 }