X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fdefer.qh;h=5d6473080a60d9b470856efb27fc1344056764c3;hb=888995b630e97d6771e268a25b8027b0db607e04;hp=6c495663452c2a0dffe4bf001b450c2c8a01498f;hpb=437d67dbc7631d6c49e922990d96461d3ff4b7b2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/defer.qh b/qcsrc/lib/defer.qh index 6c4956634..5d6473080 100644 --- a/qcsrc/lib/defer.qh +++ b/qcsrc/lib/defer.qh @@ -1,48 +1,38 @@ -#ifndef MENUQC -#ifndef DEFER_H -#define DEFER_H +#pragma once + +#ifdef GAMEQC + + #include "oo.qh" + #include "self.qh" + + entityclass(Defer); + classfield(Defer).entity owner; + classfield(Defer).void(entity) defer_func; + + /** Remove entity */ + void SUB_Remove(entity this) + { + delete(this); + } + + void defer_think(entity this) + { + setthink(this, SUB_Remove); + this.nextthink = time; + this.defer_func(this.owner); + } + + /** + * Execute func() after time + fdelay. + * self when func is executed = self when defer is called + */ + void defer(entity this, float fdelay, void(entity) func) + { + entity e = new_pure(deferred); + e.owner = this; + e.defer_func = func; + setthink(e, defer_think); + e.nextthink = time + fdelay; + } -#include "oo.qh" -#include "self.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 #endif