about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-12 12:08:26 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-12 12:08:26 +0000
commit1c1677f02300e5ab10bca9c74ce7f49d4605b9d6 (patch)
tree1601d291fd6c531d5b8dcb6f0ca95829c31b0c76 /src/engine/server
parent24e17b41a8a5d600e0f116bc059ba121ac21bad5 (diff)
downloadzcatch-1c1677f02300e5ab10bca9c74ce7f49d4605b9d6.tar.gz
zcatch-1c1677f02300e5ab10bca9c74ce7f49d4605b9d6.zip
merged 0.3.3 changes over to trunk
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/es_server.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/engine/server/es_server.c b/src/engine/server/es_server.c
index 7cdaa0dc..fda4b5d5 100644
--- a/src/engine/server/es_server.c
+++ b/src/engine/server/es_server.c
@@ -89,6 +89,7 @@ typedef struct
 	int last_acked_snapshot;
 	SNAPSTORAGE snapshots;
 	
+	CLIENT_INPUT latestinput;
 	CLIENT_INPUT inputs[200]; /* TODO: handle input better */
 	int current_input;
 	
@@ -184,6 +185,13 @@ void snap_free_id(int id)
 	}
 }
 
+int *server_latestinput(int client_id, int *size)
+{
+	if(client_id < 0 || client_id > MAX_CLIENTS || clients[client_id].state < SRVCLIENT_STATE_READY)
+		return 0;
+	return clients[client_id].latestinput.data;
+}
+
 const char *server_clientname(int client_id)
 {
 	if(client_id < 0 || client_id > MAX_CLIENTS || clients[client_id].state < SRVCLIENT_STATE_READY)
@@ -489,6 +497,8 @@ static int new_client_callback(int cid, void *user)
 	}
 	clients[cid].current_input = 0;
 	
+	mem_zero(&clients[cid].latestinput, sizeof(clients[cid].latestinput));
+	
 	snapstorage_purge_all(&clients[cid].snapshots);
 	clients[cid].last_acked_snapshot = -1;
 	clients[cid].snap_rate = SRVCLIENT_SNAPRATE_INIT;
@@ -624,7 +634,9 @@ static void server_process_client_packet(NETPACKET *packet)
 			
 			for(i = 0; i < size/4; i++)
 				input->data[i] = msg_unpack_int();
-				
+			
+			mem_copy(clients[cid].latestinput.data, input->data, MAX_INPUT_SIZE*sizeof(int));
+			
 			clients[cid].current_input++;
 			clients[cid].current_input %= 200;
 		}