]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/static.qh
Merge branch 'master' into Mario/stats_eloranking
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / static.qh
1 #pragma once
2
3 #define GETTIME_REALTIME 1
4 #ifdef MENUQC
5 float(int tmr) _gettime = #67;
6 #else
7 float(int tmr) _gettime = #519;
8 #endif
9
10 ERASEABLE
11 void profile(string s)
12 {
13         static float g_starttime;
14         float rt = _gettime(GETTIME_REALTIME);
15         if (!g_starttime) g_starttime = rt;
16         LOG_TRACEF("[%f] %s", rt - g_starttime, s);
17 }
18
19 #define _STATIC_INIT(func, where) \
20         ACCUMULATE void _static_##func##profile() { profile(#func); } \
21         ACCUMULATE_FUNCTION(where, _static_##func##profile) \
22         ACCUMULATE void _static_##func(); \
23         ACCUMULATE_FUNCTION(where, _static_##func) \
24         void _static_##func()
25
26 /** before worldspawn */
27 #define STATIC_INIT_EARLY(func) _STATIC_INIT(func##_0,    __static_init_0)
28 #define static_init_early()     CALL_ACCUMULATED_FUNCTION(__static_init_0)
29 void __static_init_0() {}
30
31 /** during worldspawn */
32 #define STATIC_INIT(func)       _STATIC_INIT(func##_1,    __static_init_1)
33 #define static_init()           CALL_ACCUMULATED_FUNCTION(__static_init_1)
34 void __static_init_1() {}
35
36 /** directly after STATIC_INIT */
37 #define STATIC_INIT_LATE(func)  _STATIC_INIT(func##_2,    __static_init_2)
38 #define static_init_late()      CALL_ACCUMULATED_FUNCTION(__static_init_2)
39 void __static_init_2() {}
40
41 /** directly after STATIC_INIT_LATE */
42 #define PRECACHE(func)          _STATIC_INIT(func##_3,    __static_init_3)
43 #define static_init_precache()  CALL_ACCUMULATED_FUNCTION(__static_init_3)
44 void __static_init_3() {}
45
46 /* other map entities spawn now */
47
48 /** before shutdown */
49 #define SHUTDOWN(func)          _STATIC_INIT(func##_shutdown, __shutdown)
50 #define shutdownhooks()         CALL_ACCUMULATED_FUNCTION(    __shutdown)
51 void __shutdown() {}