about summary refs log tree commit diff
path: root/src/game/server/eventhandler.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-14 18:42:47 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-14 18:42:47 +0000
commit78c089c0eae503822c7f1025aefcf02529b13723 (patch)
tree10c8767ef1006a09c9ca228770f1ce86b45cbccb /src/game/server/eventhandler.cpp
parenta420eb543f8206730aebb80e60a625f7204694e4 (diff)
downloadzcatch-78c089c0eae503822c7f1025aefcf02529b13723.tar.gz
zcatch-78c089c0eae503822c7f1025aefcf02529b13723.zip
last of the game server clean up. now it's done
Diffstat (limited to 'src/game/server/eventhandler.cpp')
-rw-r--r--src/game/server/eventhandler.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/game/server/eventhandler.cpp b/src/game/server/eventhandler.cpp
new file mode 100644
index 00000000..8f50da1e
--- /dev/null
+++ b/src/game/server/eventhandler.cpp
@@ -0,0 +1,49 @@
+#include "eventhandler.hpp"
+#include "gamecontext.hpp"
+
+//////////////////////////////////////////////////
+// Event handler
+//////////////////////////////////////////////////
+EVENTHANDLER::EVENTHANDLER()
+{
+	clear();
+}
+
+void *EVENTHANDLER::create(int type, int size, int mask)
+{
+	if(num_events == MAX_EVENTS)
+		return 0;
+	if(current_offset+size >= MAX_DATASIZE)
+		return 0;
+
+	void *p = &data[current_offset];
+	offsets[num_events] = current_offset;
+	types[num_events] = type;
+	sizes[num_events] = size;
+	client_masks[num_events] = mask;
+	current_offset += size;
+	num_events++;
+	return p;
+}
+
+void EVENTHANDLER::clear()
+{
+	num_events = 0;
+	current_offset = 0;
+}
+
+void EVENTHANDLER::snap(int snapping_client)
+{
+	for(int i = 0; i < num_events; i++)
+	{
+		if(cmask_is_set(client_masks[i], snapping_client))
+		{
+			NETEVENT_COMMON *ev = (NETEVENT_COMMON *)&data[offsets[i]];
+			if(distance(game.players[snapping_client].view_pos, vec2(ev->x, ev->y)) < 1500.0f)
+			{
+				void *d = snap_new_item(types[i], i, sizes[i]);
+				mem_copy(d, &data[offsets[i]], sizes[i]);
+			}
+		}
+	}
+}