X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fdefer.qh;h=070c0927592a0ccfb6b4f1e83218d388b61f7078;hb=cafdc69255ce3a4bb5fa7f9d341689e33c814e1c;hp=6c495663452c2a0dffe4bf001b450c2c8a01498f;hpb=437d67dbc7631d6c49e922990d96461d3ff4b7b2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/defer.qh b/qcsrc/lib/defer.qh index 6c4956634..070c09275 100644 --- a/qcsrc/lib/defer.qh +++ b/qcsrc/lib/defer.qh @@ -1,48 +1,48 @@ -#ifndef MENUQC -#ifndef DEFER_H -#define DEFER_H - -#include "oo.qh" -#include "self.qh" +#pragma once -entityclass(Defer); -class(Defer) .entity owner; -class(Defer) .void() think; -class(Defer) .float nextthink; - -/* -================== -SUB_Remove +#ifndef MENUQC -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()); -} + #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; + WITH(entity, self, this.owner, this.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; + void defer(entity this, float fdelay, void() func) + { + entity e = new(deferred); + make_pure(e); + e.owner = this; + e.use = func; + e.think = defer_think; + e.nextthink = time + fdelay; + } - e = spawn(); - e.owner = self; - e.use = func; - e.think = defer_think; - e.nextthink = time + fdelay; -} - -#endif #endif