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-03-01 20:03:04 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-03-01 20:03:04 +0000
commit08c4c8e0b71b577835eb9476ffc17626c94266ec (patch)
tree97c6386956b483248e564ccd2b6538d233d5e721 /src/game/client/gc_hooks.cpp
parent0747c2dff9289db6204b82501d03447f3ec6cc99 (diff)
downloadzcatch-08c4c8e0b71b577835eb9476ffc17626c94266ec.tar.gz
zcatch-08c4c8e0b71b577835eb9476ffc17626c94266ec.zip
redone the input system so you can know do keybindings with say etc
Diffstat (limited to 'src/game/client/gc_hooks.cpp')
-rw-r--r--src/game/client/gc_hooks.cpp59
1 files changed, 34 insertions, 25 deletions
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp
index d8863be7..e85a7e7f 100644
--- a/src/game/client/gc_hooks.cpp
+++ b/src/game/client/gc_hooks.cpp
@@ -31,6 +31,8 @@ extern "C" void modc_console_init()
 	client_console_init();
 }
 
+//binds_save()
+
 static void load_sounds_thread(void *)
 {
 	// load sounds
@@ -112,6 +114,11 @@ extern "C" void modc_init()
 	dbg_msg("", "%f.2ms", ((end-start)*1000)/(float)time_freq());
 }
 
+extern "C" void modc_save_config()
+{
+	binds_save();
+}
+
 extern "C" void modc_entergame()
 {
 }
@@ -355,6 +362,31 @@ extern "C" void modc_rcon_line(const char *line)
 
 extern "C" int modc_snap_input(int *data)
 {
+	static NETOBJ_PLAYER_INPUT last_data = {0};
+	
+	// update player state
+	if(chat_mode != CHATMODE_NONE)
+		input_data.player_state = PLAYERSTATE_CHATTING;
+	else if(menu_active)
+		input_data.player_state = PLAYERSTATE_IN_MENU;
+	else
+		input_data.player_state = PLAYERSTATE_PLAYING;
+	last_data.player_state = input_data.player_state;
+	
+	// we freeze the input if chat or menu is activated
+	if(menu_active || chat_mode != CHATMODE_NONE || console_active())
+	{
+		last_data.left = 0;
+		last_data.right = 0;
+		last_data.hook = 0;
+		last_data.jump = 0;
+		
+		input_data = last_data;
+			
+		mem_copy(data, &input_data, sizeof(input_data));
+		return sizeof(input_data);
+	}
+	
 	picked_up_weapon = -1;
 
 	if(!input_target_lock)
@@ -365,32 +397,8 @@ extern "C" int modc_snap_input(int *data)
 		if(!input_data.target_x && !input_data.target_y)
 			input_data.target_y = 1;
 	}
-	input_target_lock = 0;
-
-	if(chat_mode != CHATMODE_NONE)
-		input_data.player_state = PLAYERSTATE_CHATTING;
-	else if(menu_active)
-		input_data.player_state = PLAYERSTATE_IN_MENU;
-	else
-	{
-		input_data.player_state = PLAYERSTATE_PLAYING;
 
-		// TODO: this doesn't feel too pretty... look into it?
-		if (console_active())
-		{
-			input_data.left = 0;
-			input_data.right = 0;
-			input_data.hook = 0;
-			input_data.jump = 0;
-		}
-		else
-		{
-			input_data.left = inp_key_state(config.key_move_left);
-			input_data.right = inp_key_state(config.key_move_right);
-			input_data.hook = inp_key_state(config.key_hook);
-			input_data.jump  = inp_key_state(config.key_jump);
-		}
-	}
+	input_target_lock = 0;
 
 	// stress testing
 	if(config.dbg_stress)
@@ -409,6 +417,7 @@ extern "C" int modc_snap_input(int *data)
 	}
 
 	// copy and return size	
+	last_data = input_data;
 	mem_copy(data, &input_data, sizeof(input_data));
 	return sizeof(input_data);
 }