]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/defer.qh
Merge branch 'sev/luma_update' into 'master'
[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(entity) 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                 this.defer_func(this.owner);
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(entity) 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