about summary refs log tree commit diff
path: root/src/game/client/components
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-20 23:38:23 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-20 23:38:23 +0000
commit6224fc776364fb47286c950a2aa7c568d3dc0b17 (patch)
treef0f96058cc1797618f1a8f3b1529d05c0120a012 /src/game/client/components
parent15217d84585fd6aaacfc75ac36961398bf74e693 (diff)
downloadzcatch-6224fc776364fb47286c950a2aa7c568d3dc0b17.tar.gz
zcatch-6224fc776364fb47286c950a2aa7c568d3dc0b17.zip
fixed sending of new player info when player changes something in the info
Diffstat (limited to 'src/game/client/components')
-rw-r--r--src/game/client/components/menus.cpp29
-rw-r--r--src/game/client/components/menus.hpp2
-rw-r--r--src/game/client/components/menus_ingame.cpp10
-rw-r--r--src/game/client/components/menus_settings.cpp16
4 files changed, 42 insertions, 15 deletions
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index a3ee6762..311e70cc 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -86,6 +86,7 @@ MENUS::MENUS()
 	game_page = PAGE_GAME;
 	
 	need_restart = false;
+	need_sendinfo = false;
 	menu_active = true;
 	
 	escape_pressed = false;
@@ -245,6 +246,7 @@ int MENUS::ui_do_edit_box(void *id, const RECT *rect, char *str, int str_size, f
 					memmove(str + at_index + 1, str + at_index, len - at_index + 1);
 					str[at_index] = c;
 					at_index++;
+					r = 1;
 				}
 			}
 			
@@ -254,9 +256,13 @@ int MENUS::ui_do_edit_box(void *id, const RECT *rect, char *str, int str_size, f
 				{
 					memmove(str + at_index - 1, str + at_index, len - at_index + 1);
 					at_index--;
+					r = 1;
 				}
 				else if (k == KEY_DEL && at_index < len)
+				{
 					memmove(str + at_index, str + at_index + 1, len - at_index);
+					r = 1;
+				}
 				else if (k == KEY_ENTER)
 					ui_clear_last_active_item();
 				else if (k == KEY_LEFT && at_index > 0)
@@ -269,8 +275,6 @@ int MENUS::ui_do_edit_box(void *id, const RECT *rect, char *str, int str_size, f
 					at_index = len;
 			}
 		}
-		
-		r = 1;
 	}
 
 	bool just_got_active = false;
@@ -889,6 +893,17 @@ int MENUS::render()
 	return 0;
 }
 
+
+void MENUS::set_active(bool active)
+{
+	menu_active = active;
+	if(!menu_active && need_sendinfo)
+	{
+		gameclient.send_info(false);
+		need_sendinfo = false;
+	}
+}
+
 void MENUS::on_reset()
 {
 }
@@ -920,7 +935,7 @@ bool MENUS::on_input(INPUT_EVENT e)
 		if(e.key == KEY_ESC)
 		{
 			escape_pressed = true;
-			menu_active	= !menu_active;
+			set_active(!is_active());
 			return true;
 		}
 		else if(e.key == KEY_ENTER)
@@ -930,7 +945,7 @@ bool MENUS::on_input(INPUT_EVENT e)
 		}
 	}
 	
-	if(menu_active)
+	if(is_active())
 	{
 		if(num_inputevents < MAX_INPUTEVENTS)
 			inputevents[num_inputevents++] = e;
@@ -962,14 +977,14 @@ void MENUS::on_statechange(int new_state, int old_state)
 	else if (new_state == CLIENTSTATE_ONLINE || new_state == CLIENTSTATE_DEMOPLAYBACK)
 	{
 		popup = POPUP_NONE;
-		menu_active = false;
+		set_active(false);
 	}
 }
 
 void MENUS::on_render()
 {
 	if(client_state() != CLIENTSTATE_ONLINE && client_state() != CLIENTSTATE_DEMOPLAYBACK)
-		menu_active = true;
+		set_active(true);
 
 	if(client_state() == CLIENTSTATE_DEMOPLAYBACK)
 	{
@@ -978,7 +993,7 @@ void MENUS::on_render()
 		render_demoplayer(screen);
 	}
 	
-	if(!menu_active)
+	if(!is_active())
 	{
 		escape_pressed = false;
 		enter_pressed = false;
diff --git a/src/game/client/components/menus.hpp b/src/game/client/components/menus.hpp
index bc733fb6..6b72195e 100644
--- a/src/game/client/components/menus.hpp
+++ b/src/game/client/components/menus.hpp
@@ -106,6 +106,7 @@ class MENUS : public COMPONENT
 	
 	// for graphic settings
 	bool need_restart;
+	bool need_sendinfo;
 	
 	//
 	bool escape_pressed;
@@ -161,6 +162,7 @@ class MENUS : public COMPONENT
 	void render_settings_sound(RECT main_view);
 	void render_settings(RECT main_view);
 	
+	void set_active(bool active);
 public:
 	static MENUS_KEYBINDER binder;
 	
diff --git a/src/game/client/components/menus_ingame.cpp b/src/game/client/components/menus_ingame.cpp
index 8b28b47e..d4b2b609 100644
--- a/src/game/client/components/menus_ingame.cpp
+++ b/src/game/client/components/menus_ingame.cpp
@@ -44,7 +44,7 @@ void MENUS::render_game(RECT main_view)
 			if(ui_do_button(&spectate_button, "Spectate", 0, &button, ui_draw_menu_button, 0))
 			{
 				gameclient.send_switch_team(-1);
-				menu_active = false;
+				set_active(false);
 			}
 		}
 		
@@ -58,7 +58,7 @@ void MENUS::render_game(RECT main_view)
 				if(ui_do_button(&spectate_button, "Join Red", 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(0);
-					menu_active = false;
+					set_active(false);
 				}
 			}
 
@@ -70,7 +70,7 @@ void MENUS::render_game(RECT main_view)
 				if(ui_do_button(&spectate_button, "Join Blue", 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(1);
-					menu_active = false;
+					set_active(false);
 				}
 			}
 		}
@@ -84,7 +84,7 @@ void MENUS::render_game(RECT main_view)
 				if(ui_do_button(&spectate_button, "Join Game", 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(0);
-					menu_active = false;
+					set_active(false);
 				}
 			}
 		}
@@ -390,7 +390,7 @@ void MENUS::render_servercontrol(RECT main_view)
 					gameclient.snap.player_infos[callvote_selectedplayer])
 				{
 					gameclient.voting->callvote_kick(callvote_selectedplayer);
-					menu_active = false;
+					set_active(false);
 				}
 			}
 		}
diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp
index 2e7a6912..5f080d05 100644
--- a/src/game/client/components/menus_settings.cpp
+++ b/src/game/client/components/menus_settings.cpp
@@ -57,7 +57,8 @@ void MENUS::render_settings_player(RECT main_view)
 		ui_do_label(&button, "Name:", 14.0, -1);
 		ui_vsplit_l(&button, 80.0f, 0, &button);
 		ui_vsplit_l(&button, 180.0f, &button, 0);
-		ui_do_edit_box(config.player_name, &button, config.player_name, sizeof(config.player_name), 14.0f);
+		if(ui_do_edit_box(config.player_name, &button, config.player_name, sizeof(config.player_name), 14.0f))
+			need_sendinfo = true;
 
 		static int dynamic_camera_button = 0;
 		ui_hsplit_t(&main_view, 20.0f, &button, &main_view);
@@ -98,7 +99,10 @@ void MENUS::render_settings_player(RECT main_view)
 		
 		ui_hsplit_t(&main_view, 20.0f, &button, &main_view);
 		if (ui_do_button(&config.player_color_body, "Custom colors", config.player_use_custom_color, &button, ui_draw_checkbox, 0))
+		{
 			config.player_use_custom_color = config.player_use_custom_color?0:1;
+			need_sendinfo = true;
+		}
 		
 		if(config.player_use_custom_color)
 		{
@@ -136,7 +140,10 @@ void MENUS::render_settings_player(RECT main_view)
 					ui_do_label(&text, labels[s], 15.0f, -1);
 					 
 				}
-				
+		
+				if(*colors[i] != color)
+					need_sendinfo = true;
+					
 				*colors[i] = color;
 				ui_hsplit_t(&main_view, 5.0f, 0, &main_view);
 			}
@@ -208,8 +215,11 @@ void MENUS::render_settings_player(RECT main_view)
 		ui_vsplit_l(&button, 50.0f, &icon, &text);
 		
 		if(ui_do_button(s, "", selected, &button, ui_draw_list_row, 0))
+		{
 			config_set_player_skin(&config, s->name);
-		
+			need_sendinfo = true;
+		}
+
 		ui_hsplit_t(&text, 12.0f, 0, &text); // some margin from the top
 		ui_do_label(&text, buf, 18.0f, 0);