about summary refs log tree commit diff
path: root/src/game/client/gc_hooks.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-04-05 14:50:43 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-04-05 14:50:43 +0000
commit34c3a1c1426e6443ba30b8e2852b73bf92757dff (patch)
treec804647d311bfcf2627c5a519a15888c6e396b93 /src/game/client/gc_hooks.cpp
parentf713ad20288800e8a74160ba390ddefb47841033 (diff)
downloadzcatch-34c3a1c1426e6443ba30b8e2852b73bf92757dff.tar.gz
zcatch-34c3a1c1426e6443ba30b8e2852b73bf92757dff.zip
new network code. not perfect. connectionless packets is missing so no server discovery is possible. reduced network traffic by A LOT
Diffstat (limited to 'src/game/client/gc_hooks.cpp')
-rw-r--r--src/game/client/gc_hooks.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp
index 33b9ba91..72c94abc 100644
--- a/src/game/client/gc_hooks.cpp
+++ b/src/game/client/gc_hooks.cpp
@@ -361,6 +361,7 @@ extern "C" void modc_rcon_line(const char *line)
 extern "C" int modc_snap_input(int *data)
 {
 	static NETOBJ_PLAYER_INPUT last_data = {0};
+	static int64 last_send_time = 0;
 	
 	// update player state
 	if(chat_mode != CHATMODE_NONE)
@@ -414,8 +415,28 @@ extern "C" int modc_snap_input(int *data)
 		input_data.target_y = (int)(cosf(t*3)*100.0f);
 	}
 
-	// copy and return size	
+	// check if we need to send input
+	bool send = false;
+	if(input_data.left != last_data.left) send = true;
+	else if(input_data.left != last_data.left) send = true;
+	else if(input_data.right != last_data.right) send = true;
+	else if(input_data.jump != last_data.jump) send = true;
+	else if(input_data.fire != last_data.fire) send = true;
+	else if(input_data.hook != last_data.hook) send = true;
+	else if(input_data.player_state != last_data.player_state) send = true;
+	else if(input_data.wanted_weapon != last_data.wanted_weapon) send = true;
+	else if(input_data.next_weapon != last_data.next_weapon) send = true;
+	else if(input_data.prev_weapon != last_data.prev_weapon) send = true;
+
+	if(time_get() > last_send_time + time_freq()/5)
+		send = true;
+
 	last_data = input_data;
+	if(!send)
+		return 0;
+		
+	// copy and return size	
+	last_send_time = time_get();
 	mem_copy(data, &input_data, sizeof(input_data));
 	return sizeof(input_data);
 }