-#ifndef DEFER_H
-#define DEFER_H
-#ifndef MENUQC
+#pragma once
+
+#ifdef GAMEQC
#include "oo.qh"
#include "self.qh"
entityclass(Defer);
- class(Defer).entity owner;
- class(Defer).void() think;
- class(Defer).float nextthink;
-
-/*
-==================
-SUB_Remove
+ classfield(Defer).entity owner;
+ classfield(Defer).void(entity) defer_func;
-Remove self
-==================
-*/
- void SUB_Remove()
+ /** Remove entity */
+ void SUB_Remove(entity this)
{
- SELFPARAM();
- remove(self);
+ delete(this);
}
- void defer_think()
+ void defer_think(entity this)
{
- SELFPARAM();
- self.think = SUB_Remove;
- self.nextthink = time;
- WITH(entity, self, self.owner, self.use());
+ 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(float fdelay, void() func)
+ /**
+ * 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();
-
- 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