summaryrefslogtreecommitdiff
path: root/libphysics/event.c
diff options
context:
space:
mode:
Diffstat (limited to 'libphysics/event.c')
-rw-r--r--libphysics/event.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/libphysics/event.c b/libphysics/event.c
new file mode 100644
index 0000000..da836f6
--- /dev/null
+++ b/libphysics/event.c
@@ -0,0 +1,44 @@
+#include <vecmath.h>
+#include <physics.h>
+#include <stdlib.h>
+
+#include "dat.h"
+
+#define EVENT_POOL_SIZE 2048
+
+static CollisionEvent event[EVENT_POOL_SIZE];
+static int eventi, evente, events;
+
+int
+phxenqevent(CollisionEvent *ev)
+{
+ if(events == EVENT_POOL_SIZE)
+ return 0;
+
+ event[evente] = *ev;
+ evente = (evente + 1) % EVENT_POOL_SIZE;
+ events++;
+
+ return 1;
+}
+
+int
+phxdeqevent(CollisionEvent *ev)
+{
+ CollisionEvent *evv;
+ if(events == 0)
+ return 0;
+
+ evv = event + eventi;
+ eventi = (eventi + 1) % EVENT_POOL_SIZE;
+
+ *ev = *evv;
+ events--;
+ return 1;
+}
+
+int
+phxnextcollevent(CollisionEvent *ev)
+{
+ return phxdeqevent(ev);
+}