]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/Defer.qh
ce12478b57cb8832a12abb4b842eaae3232726c8
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / Defer.qh
1 #ifndef MENUQC
2 #ifndef DEFER_H
3 #define DEFER_H
4 #include "OO.qh"
5
6 entityclass(Defer);
7 class(Defer) .entity owner;
8 class(Defer) .void() think;
9 class(Defer) .float nextthink;
10
11 /*
12 ==================
13 SUB_Remove
14
15 Remove self
16 ==================
17 */
18 void SUB_Remove()
19 {SELFPARAM();
20         remove (self);
21 }
22
23 void defer_think()
24 {SELFPARAM();
25     self.think     = SUB_Remove;
26     self.nextthink = time;
27     SELFCALL(self.owner, self.use());
28     SELFCALL_DONE();
29 }
30
31 /*
32     Execute func() after time + fdelay.
33     self when func is executed = self when defer is called
34 */
35 void defer(float fdelay, void() func)
36 {SELFPARAM();
37     entity e;
38
39     e           = spawn();
40     e.owner     = self;
41     e.use       = func;
42     e.think     = defer_think;
43     e.nextthink = time + fdelay;
44 }
45
46 #endif
47 #endif