]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/defer.qh
Step 5: complete
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / defer.qh
index 0fa29747543a8aa0da3fd74935e7dfd1a5971b0c..3e7e020c67a5fea2ea7368fb3444a30f9fbebea2 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef DEFER_H
-#define DEFER_H
+#pragma once
+
 #ifndef MENUQC
 
        #include "oo.qh"
@@ -7,45 +7,32 @@
 
        entityclass(Defer);
        class(Defer).entity owner;
-       class(Defer).void() think;
-       class(Defer).float nextthink;
+       class(Defer).void(entity) defer_func;
 
-       /** Remove self */
+       /** Remove entity */
        void SUB_Remove(entity this)
        {
                remove(this);
        }
 
-       /** Remove self */
-       void SUB_Remove_self()
+       void defer_think(entity this)
        {
-               SELFPARAM();
-               remove(this);
+               setthink(this, SUB_Remove);
+               this.nextthink = time;
+               this.defer_func(this.owner);
        }
 
-       void defer_think()
+    /**
+     * Execute func() after time + fdelay.
+     * self when func is executed = self when defer is called
+     */
+       void defer(entity this, float fdelay, void(entity) func)
        {
-               SELFPARAM();
-               self.think     = SUB_Remove_self;
-               self.nextthink = time;
-               WITH(entity, self, self.owner, self.use());
-       }
-
-/*
-    Execute func() after time + fdelay.
-    self when func is executed = self when defer is called
-*/
-       void defer(float fdelay, void() func)
-       {
-               SELFPARAM();
-
-               entity e    = new(deferred);
-               make_pure(e);
+               entity e    = new_pure(deferred);
                e.owner     = this;
-               e.use       = func;
-               e.think     = defer_think;
+               e.defer_func = func;
+               setthink(e, defer_think);
                e.nextthink = time + fdelay;
        }
 
 #endif
-#endif