]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/defer.qh
Fix the use of self, activator and other globals in .use
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / defer.qh
1 #pragma once
2
3 #ifndef MENUQC
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         class(Defer).void() defer_func;
13
14         /** Remove self */
15         void SUB_Remove(entity this)
16         {
17                 remove(this);
18         }
19
20         /** Remove self */
21         void SUB_Remove_self()
22         {
23                 SELFPARAM();
24                 remove(this);
25         }
26
27         void defer_think()
28         {
29                 SELFPARAM();
30                 this.think     = SUB_Remove_self;
31                 this.nextthink = time;
32                 WITHSELF(this.owner, this.defer_func());
33         }
34
35 /*
36     Execute func() after time + fdelay.
37     self when func is executed = self when defer is called
38 */
39         void defer(entity this, float fdelay, void() func)
40         {
41                 entity e    = new_pure(deferred);
42                 e.owner     = this;
43                 e.defer_func  = func;
44                 e.think     = defer_think;
45                 e.nextthink = time + fdelay;
46         }
47
48 #endif