]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/Defer.qh
fd2619d6fb0be4b93ac667d490551bd483297fd2
[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 {
20         remove (self);
21 }
22
23 void defer_think()
24 {
25     entity oself;
26
27     oself           = self;
28     self            = self.owner;
29     oself.think     = SUB_Remove;
30     oself.nextthink = time;
31
32     oself.use();
33 }
34
35 /*
36     Execute func() after time + fdelay.
37     self when func is executed = self when defer is called
38 */
39 void defer(float fdelay, void() func)
40 {
41     entity e;
42
43     e           = spawn();
44     e.owner     = self;
45     e.use       = func;
46     e.think     = defer_think;
47     e.nextthink = time + fdelay;
48 }
49
50 #endif
51 #endif