]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/defer.qh
Improve QCC compatibility
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / defer.qh
1 #pragma once
2
3 #ifdef GAMEQC
4
5         #include "oo.qh"
6         #include "self.qh"
7
8         entityclass(Defer);
9         classfield(Defer).entity owner;
10         classfield(Defer).void(entity) defer_func;
11
12         /** Remove entity */
13         void SUB_Remove(entity this)
14         {
15                 delete(this);
16         }
17
18         void defer_think(entity this)
19         {
20                 setthink(this, SUB_Remove);
21                 this.nextthink = time;
22                 this.defer_func(this.owner);
23         }
24
25     /**
26      * Execute func() after time + fdelay.
27      * self when func is executed = self when defer is called
28      */
29         void defer(entity this, float fdelay, void(entity) func)
30         {
31                 entity e    = new_pure(deferred);
32                 e.owner     = this;
33                 e.defer_func = func;
34                 setthink(e, defer_think);
35                 e.nextthink = time + fdelay;
36         }
37
38 #endif