about summary refs log tree commit diff
path: root/src/game/client/components/maplist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/components/maplist.cpp')
-rw-r--r--src/game/client/components/maplist.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/game/client/components/maplist.cpp b/src/game/client/components/maplist.cpp
new file mode 100644
index 00000000..027ec449
--- /dev/null
+++ b/src/game/client/components/maplist.cpp
@@ -0,0 +1,45 @@
+#include <engine/e_client_interface.h>
+#include <game/generated/g_protocol.hpp>
+
+#include "maplist.hpp"
+
+MAPLIST::MAPLIST()
+{
+	on_reset();
+}
+
+void MAPLIST::on_reset()
+{
+	buffer[0] = 0;
+	num_maps = 0;
+}
+
+static bool is_separator(char c) { return c == ';' || c == ' ' || c == ',' || c == '\t'; }
+
+void MAPLIST::on_message(int msgtype, void *rawmsg)
+{
+	if(msgtype == NETMSGTYPE_SV_MAPLIST)
+	{
+		NETMSG_SV_MAPLIST *msg = (NETMSG_SV_MAPLIST*)rawmsg;
+		str_copy(buffer, msg->names, sizeof(buffer));
+		
+		// parse list
+		num_maps = 0;
+		char *ptr = buffer;
+		while(*ptr)
+		{
+			while(*ptr && is_separator(*ptr))
+			{
+				*ptr = 0;
+				ptr++;
+			}
+
+			if(*ptr)
+			{
+				maps[num_maps++] = ptr;
+				while(*ptr && !is_separator(*ptr))
+					ptr++;
+			}
+		}
+	}
+}