]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/oo/classes.qc
Sort menu classes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / oo / classes.qc
1 #include "base.qh"
2
3 #ifdef CLASS
4 #undef CLASS
5 #undef METHOD
6 #undef ATTRIB
7 #undef ATTRIBARRAY
8 #undef ENDCLASS
9 #undef SUPER
10 #endif
11
12 #define CLASS(cname, base)                                          \
13 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) {  \
14     this = NEW(base); basevtbl = base##_vtbl;                       \
15 }
16
17 #define METHOD(cname, name, prototype)                              \
18 prototype cname##_##name;                                           \
19 .prototype name;                                                    \
20 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) {  \
21     this.name = cname##_##name;                                     \
22 }
23
24 #define ATTRIB(cname, name, type, val)                              \
25 .type name;                                                         \
26 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) {  \
27     this.name = val;                                                \
28 }
29
30 #define ATTRIBARRAY(cname, name, type, cnt)                         \
31 .type name[cnt];
32
33 #define ENDCLASS(cname)                                             \
34 .bool instanceOf##cname;                                            \
35 entity cname##_vtbl;                                                \
36 [[last]] entity spawn##cname(entity this, entity basevtbl) {        \
37     this.instanceOf##cname = true;                                  \
38     this.classname = #cname;                                        \
39     if (!cname##_vtbl) cname##_vtbl = spawnVtbl(this, basevtbl);    \
40     return this;                                                    \
41 }
42
43 #define SUPER(cname) (cname##_vtbl.vtblbase)
44
45 #ifdef IMPLEMENTATION
46 #undef IMPLEMENTATION
47 #endif
48
49 #include "../classes.inc"
50
51 #ifndef IMPLEMENTATION
52 #define IMPLEMENTATION
53 #endif
54
55 #include "../classes.inc"