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