]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/defer.qh
Propagate this
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / defer.qh
index 2a13611168fd806382b42b069897591d6582b1f0..d4c1eadac75db7a4dbbd87a738892b7e0f039565 100644 (file)
@@ -1,46 +1,47 @@
+#pragma once
+
 #ifndef MENUQC
-#ifndef DEFER_H
-#define DEFER_H
-#include "oo.qh"
-
-entityclass(Defer);
-class(Defer) .entity owner;
-class(Defer) .void() think;
-class(Defer) .float nextthink;
-
-/*
-==================
-SUB_Remove
-
-Remove self
-==================
-*/
-void SUB_Remove()
-{SELFPARAM();
-       remove (self);
-}
-
-void defer_think()
-{SELFPARAM();
-    self.think     = SUB_Remove;
-    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;
-
-    e           = spawn();
-    e.owner     = self;
-    e.use       = func;
-    e.think     = defer_think;
-    e.nextthink = time + fdelay;
-}
 
-#endif
+       #include "oo.qh"
+       #include "self.qh"
+
+       entityclass(Defer);
+       class(Defer).entity owner;
+       class(Defer).void() think;
+       class(Defer).float nextthink;
+
+       /** Remove self */
+       void SUB_Remove(entity this)
+       {
+               remove(this);
+       }
+
+       /** Remove self */
+       void SUB_Remove_self()
+       {
+               SELFPARAM();
+               remove(this);
+       }
+
+       void defer_think()
+       {
+               SELFPARAM();
+               this.think     = SUB_Remove_self;
+               this.nextthink = time;
+               WITHSELF(this.owner, this.selfthink(this));
+       }
+
+    /**
+     * Execute func() after time + fdelay.
+     * self when func is executed = self when defer is called
+     */
+       void defer(entity this, float fdelay, void(entity this) func)
+       {
+               entity e    = new_pure(deferred);
+               e.owner     = this;
+               setthink(e, func);
+               e.think     = defer_think;
+               e.nextthink = time + fdelay;
+       }
+
 #endif