sr2lua/mp_server_browser.lua

  1. -- Variable section 
  2. Mp_server_browser_data = { 
  3. 	handles = { 
  4. 					buttons = {}, 
  5. 					button_shine = {}, 
  6. 					button_fade_in = {}, 
  7. 					button_fade_out = {}, 
  8. 					}, 
  9. 	input_subscriptions = {}, 
  10. 	current_tab = 1, 
  11. 	is_360 = false, 
  12. 	refresh = false, 
  13. } 
  14.  
  15. Mp_server_browser_colors = { 
  16. 	yellow = { r = 229/255, g = 191/255, b = 13/255} 
  17. } 
  18.  
  19. Mp_server_browser_refresh_thread = true 
  20.  
  21. -- Init and cleanup functions 
  22. function mp_server_browser_init() 
  23.  
  24. 	-- Set up object handles 
  25. 	Mp_server_browser_data.handles.tab_group_h = vint_object_find("tab_group") 
  26. 	Mp_server_browser_data.handles.tab_text_h = vint_object_find("tab_text") 
  27. 	Mp_server_browser_data.handles.stat_headings_h = vint_object_find("stat_headings") 
  28. 	Mp_server_browser_data.handles.user_row_h = vint_object_find("user_row") 
  29. 	Mp_server_browser_data.handles.spreadsheet_row_h = vint_object_find("spreadsheet_row") 
  30. 	Mp_server_browser_data.heading_stat1_h = vint_object_find("heading_stat1") 
  31. 	Mp_server_browser_data.heading_stat2_h = vint_object_find("heading_stat2") 
  32. 	Mp_server_browser_data.heading_stat3_h = vint_object_find("heading_stat3") 
  33. 	Mp_server_browser_data.scroll_group_h = vint_object_find("scroll_group") 
  34. 	Mp_server_browser_data.scroll_bar_h = vint_object_find("scroll_bar") 
  35.  
  36. 	local header_text = vint_object_find("heading_player") 
  37. 	vint_set_property(header_text, "text_tag", "MP_SERVER_NAME") 
  38. 	 
  39. 	-- Set up animation handles 
  40. 	Mp_server_browser_data.handles.tab_slide_h = vint_object_find("tab_slide") 
  41. 	vint_set_property(Mp_server_browser_data.handles.tab_slide_h, "is_paused", true) 
  42. 	 
  43. 	Mp_server_browser_data.handles.highlight_shine_anim_h = vint_object_find("highlight_shine_anim") 
  44. 	vint_set_property(Mp_server_browser_data.handles.highlight_shine_anim_h, "is_paused", true) 
  45. 	 
  46. 	Mp_server_browser_data.handles.columns_fade_h = vint_object_find("columns_fade") 
  47. 	vint_set_property(Mp_server_browser_data.handles.columns_fade_h, "is_paused", true) 
  48.  
  49. 	Mp_server_browser_data.visible_row = {} 
  50. 	Mp_server_browser_data.current_tab = 1 
  51. 	 
  52. 	local left_trigger_h = vint_object_find("left_trigger") 
  53. 	vint_set_property(left_trigger_h, "image", get_left_trigger()) 
  54. 	local right_trigger_h = vint_object_find("right_trigger") 
  55. 	vint_set_property(right_trigger_h, "image", get_right_trigger()) 
  56. 	 
  57. 	Mp_server_browser_data.top100 = true 
  58. 	Mp_server_browser_data.num_tabs = 0 
  59. 	Mp_server_browser_data.current_column = 3 
  60. 	Mp_server_browser_data.can_move = true 
  61.  
  62.  
  63. 	if Main_menu_searching_LAN_games == true then 
  64. 		-- LAN 
  65. 		Mp_server_browser_data.tabs = {	[1] =	{ 	title = "ALL", -- Gangsta Brawl 
  66. 											column_1 = "MP_SERVER_IP", -- IP servera 
  67. 											column_2 = "MP_SERVER_PING", -- Ping do servera 
  68. 											column_3 = "", -- Game mode and players count 
  69. 											num_columns = 0, 
  70. 											data = {[3] = "MP_GB"}, 
  71. 											conversion = Mp_server_browser_format_commas, 
  72. 											default_column = 1, 
  73. 											show_badge = false, 
  74. 											game_mode = -1 
  75. 										}, 
  76. 									} 
  77. 	else 
  78. 		if Main_menu_is_coop_game == true then 
  79. 		-- ONLINE COOP 
  80. 			Mp_server_browser_data.tabs = {	[1] =	{ 	title = "ALL", -- All coop games 
  81. 												column_1 = "MP_SERVER_IP", -- IP servera 
  82. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  83. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  84. 												num_columns = 0, 
  85. 												data = {[3] = "MP_GB"}, 
  86. 												conversion = Mp_server_browser_format_commas, 
  87. 												default_column = 1, 
  88. 												show_badge = true, 
  89. 												game_mode = -1, 
  90. 											}, 
  91. 												 
  92. 											[2] =	{ 	title = "PUBLIC",  -- Coop games without password 
  93. 												column_1 = "MP_SERVER_IP", -- IP servera 
  94. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  95. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  96. 												num_columns = 0, 
  97. 												data = {[3] = "MP_TGB"}, 
  98. 												conversion = Mp_server_browser_format_commas, 
  99. 												default_column = 1, 
  100. 												show_badge = true, 
  101. 												game_mode = -2, 
  102. 											}, 
  103. 										} 
  104. 		else 
  105. 			-- ONLINE 
  106. 			Mp_server_browser_data.tabs = { 
  107. 											[1] =	{ 	title = "ALL", -- Gangsta Brawl 
  108. 												column_1 = "MP_SERVER_IP", -- IP servera 
  109. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  110. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  111. 												num_columns = 0, 
  112. 												data = {[3] = "MP_GB"}, 
  113. 												conversion = Mp_server_browser_format_commas, 
  114. 												default_column = 1, 
  115. 												show_badge = true, 
  116. 												game_mode = -1 
  117. 											}, 
  118.  
  119. 											[2] =	{ 	title = "MULTI_MODE_13", -- Gangsta Brawl 
  120. 												column_1 = "MP_SERVER_IP", -- IP servera 
  121. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  122. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  123. 												num_columns = 0, 
  124. 												data = {[3] = "MP_GB"}, 
  125. 												conversion = Mp_server_browser_format_commas, 
  126. 												default_column = 1, 
  127. 												show_badge = true, 
  128. 												game_mode = 11, 
  129. 											}, 
  130. 												 
  131. 											[3] =	{ 	title = "MULTI_MODE_14",  -- Team Gangsta Brawl 
  132. 												column_1 = "MP_SERVER_IP", -- IP servera 
  133. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  134. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  135. 												num_columns = 0, 
  136. 												data = {[3] = "MP_TGB"}, 
  137. 												conversion = Mp_server_browser_format_commas, 
  138. 												default_column = 1, 
  139. 												show_badge = true, 
  140. 												game_mode = 12, 
  141. 											},	 
  142. 														 
  143. 											[4] =	{	title = "MULTI_MODE_STRONGARM", -- Strong Arm 
  144. 												column_1 = "MP_SERVER_IP", -- IP servera 
  145. 												column_2 = "MP_SERVER_PING", -- Ping do servera 
  146. 												column_3 = "MP_GAME_MODE", -- Game mode and players count 
  147. 												num_columns = 0, 
  148. 												data = {[3] = "MP_SA"}, 
  149. 												conversion = Mp_server_browser_format_commas, 
  150. 												default_column = 1, 
  151. 												show_badge = true, 
  152. 												game_mode = 13, 
  153. 											}, 
  154.  
  155. 										} 
  156. 			end 
  157. 	end	 
  158. 	local tab_divider = 20 
  159. 	local tab_left_placer = 0 
  160. 	 
  161. 	for idx, val in Mp_server_browser_data.tabs do 
  162. 		-- Make a  clone of the tab heading 
  163. 		Mp_server_browser_data.tabs[idx].heading_h = vint_object_clone(Mp_server_browser_data.handles.tab_text_h) 
  164. 		 
  165. 		-- Put the title name in the tab 
  166. 		vint_set_property(Mp_server_browser_data.tabs[idx].heading_h, "text_tag", Mp_server_browser_data.tabs[idx].title) 
  167. 		 
  168. 		-- Get the size of the tab 
  169. 		local x_size, y_size, x_anchor, y_anchor 
  170. 		x_size, y_size = element_get_actual_size(Mp_server_browser_data.tabs[idx].heading_h) 
  171. 		Mp_server_browser_data.tabs[idx].center = tab_left_placer + x_size/2 
  172. 	 
  173. 		-- Move the tab to the end of the list 
  174. 		x_anchor, y_anchor = vint_get_property(Mp_server_browser_data.tabs[idx].heading_h, "anchor") 
  175. 		vint_set_property(Mp_server_browser_data.tabs[idx].heading_h, "anchor", tab_left_placer, y_anchor) 
  176. 		vint_set_property(Mp_server_browser_data.tabs[idx].heading_h, "visible", true) 
  177. 		 
  178. 		-- Save the full size of the whole list of tabs 
  179. 		Mp_server_browser_data.tab_range = tab_left_placer + x_size 
  180. 		 
  181. 		-- Set up the positioning for the next space 
  182. 		tab_left_placer = tab_left_placer + x_size + tab_divider 
  183. 		Mp_server_browser_data.num_tabs = Mp_server_browser_data.num_tabs + 1 
  184. 	end 
  185. 	 
  186. 	--Subscribe to input 
  187. 	Mp_server_browser_data.input_subscriptions = {	 
  188. 		vint_subscribe_to_input_event(nil, "nav_up",				"Mp_server_browser_input", 50), 
  189. 		vint_subscribe_to_input_event(nil, "nav_down",			"Mp_server_browser_input", 50), 
  190. 		vint_subscribe_to_input_event(nil, "nav_left",			"Mp_server_browser_input", 50), 
  191. 		vint_subscribe_to_input_event(nil, "nav_right",			"Mp_server_browser_input", 50), 
  192. 		vint_subscribe_to_input_event(nil, "scroll_left",		"Mp_server_browser_input", 50), 
  193. 		vint_subscribe_to_input_event(nil, "scroll_right",		"Mp_server_browser_input", 50), 
  194. 		vint_subscribe_to_input_event(nil, "select",				"Mp_server_browser_input", 50), 
  195. 		vint_subscribe_to_input_event(nil, "back",				"Mp_server_browser_input", 50), 
  196. 		vint_subscribe_to_input_event(nil, "alt_select",		"Mp_server_browser_input", 50), 
  197. 		vint_subscribe_to_input_event(nil, "exit",				"Mp_server_browser_input", 50), 
  198. 		vint_subscribe_to_input_event(nil, "map",					"Mp_server_browser_input", 50), 
  199. 		vint_subscribe_to_input_event(nil, "pause",				"Mp_server_browser_input", 50), 
  200. 	} 
  201. 	 
  202. 	-- Start first spreadsheet lookup 
  203. 	Mp_server_browser_change_spreadsheet(0) 
  204. 	 
  205. 	--Hijack button tips from previous menu 
  206. 	if vint_document_find("main_menu") ~= 0 then 
  207. 		--Hide previous menu 
  208. 		vint_set_property(Menu_option_labels.frame, "visible", false) 
  209. 		 
  210. 		--Set button tips previous menu and update tips 
  211. 		Menu_active.btn_tips = Mp_server_browser_btn_tips 
  212. 		Mp_server_browser_update_btn_tips() 
  213. 	end 
  214.  
  215. 	if Main_menu_searching_LAN_games == true then 
  216. 		start_find_syslink_servers() 
  217. 	else 
  218. 		if Main_menu_is_coop_game == true then 
  219. 			start_coop_matchmaking() 
  220. 		else 
  221. 			start_find_online_servers(Multi_ranked) 
  222. 		end 
  223. 	end 
  224.  
  225. 	Mp_server_browser_refresh_thread = true 
  226. 	thread_new( "Mp_server_browser_refresh_data" ) -- one thread per all columns 
  227. end 
  228.  
  229. function mp_server_browser_cleanup() 
  230.  
  231. 	-- Blow away all the objects and animations 
  232. 	for idx, val in Mp_server_browser_data.visible_row do 
  233. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].pulsate) 
  234. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].line_h) 
  235. 	end 
  236. 	 
  237. 	-- Blow away all the data 
  238. 	for idx, val in Mp_server_browser_data.list_data do 
  239. 		Mp_server_browser_data.list_data[idx] = nil 
  240. 	end 
  241. 	 
  242. 	-- Kill subscriptions 
  243. 	for idx, val in Mp_server_browser_data.input_subscriptions do 
  244. 		vint_unsubscribe_to_input_event(idx) 
  245. 	end 
  246. 	Mp_server_browser_data.input_subscriptions = nil 
  247. 	 
  248. 	 
  249. 	--Show button tips on main menu 
  250. 	if vint_document_find("main_menu") ~= 0 and Menu_active ~= 0 then 
  251. 		--reset button tips 
  252. 		Menu_active.btn_tips = nil 
  253. 		btn_tips_update() 
  254. 		vint_set_property(Menu_option_labels.frame, "visible", true) 
  255. 	end	 
  256. end 
  257.  
  258. function Mp_server_browser_input(target, event, accelleration) 
  259.  
  260. 	-- Make sure button presses are ok first 
  261. 	if Mp_server_browser_data.can_move == true then 
  262. 	 
  263. 		if event == "nav_up" then 
  264. 			-- Up button pressed 
  265. 			audio_play(Menu_sound_item_nav) 
  266. 			Mp_server_browser_change_row(-1) 
  267. 			 
  268. 		elseif event == "nav_down" then 
  269. 			-- Down button presses 
  270. 			audio_play(Menu_sound_item_nav) 
  271. 			Mp_server_browser_change_row(1) 
  272. 			 
  273. 		elseif event == "scroll_left" then 
  274. 			-- Left button pressed 
  275. 			audio_play(Menu_sound_scroll) 
  276. 			if Mp_server_browser_data.num_tabs > 1 then 
  277. 				Mp_server_browser_change_spreadsheet(-1) 
  278. 				Mp_server_browser_change_row(0) 
  279. 			end 
  280. 			 
  281. 		elseif event == "scroll_right" then 
  282. 			-- Right button presses 
  283. 			audio_play(Menu_sound_scroll) 
  284. 			if Mp_server_browser_data.num_tabs > 1 then 
  285. 				Mp_server_browser_change_spreadsheet(1) 
  286. 				Mp_server_browser_change_row(0) 
  287. 			end 
  288. 			 
  289. 		elseif event == "nav_left" then 
  290. 			-- Resort 
  291. 			if Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].num_columns > 1 then 
  292. 				audio_play(Menu_sound_value_nav) 
  293. 				Mp_server_browser_change_column(-1) 
  294. 			end 
  295. 			 
  296. 		elseif event == "nav_right" then 
  297. 			-- Resort 
  298. 			if Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].num_columns > 1 then 
  299. 				audio_play(Menu_sound_value_nav) 
  300. 				Mp_server_browser_change_column(1) 
  301. 			end 
  302. 			 
  303. 		elseif event == "select" then 
  304. 			if Mp_server_browser_data.list_data[Mp_server_browser_data.current_virtual_row] ~= nil then 
  305. 				audio_play(Menu_sound_back) 
  306. 				menu_input_block(false) 
  307. 				--main_menu_restore() 
  308. 				--dialog_box_force_close_all() 
  309. 				local server_id = Mp_server_browser_data.list_data[Mp_server_browser_data.current_virtual_row].server_id 
  310. 				 
  311. 				-- enter the server 
  312. 				if Main_menu_searching_LAN_games == true then 
  313. 					join_syslink_game( server_id ) 
  314. 				else 
  315. 					if Main_menu_is_coop_game == true then 
  316. 						join_online_coop_game( server_id ) 
  317. 					else 
  318. 						join_online_game( server_id, Multi_ranked ) 
  319. 					end 
  320. 				end 
  321. 				 
  322. 				if Main_menu_searching_LAN_games == true then 
  323. 					stop_find_syslink_servers() 
  324. 				else 
  325. 					--stop_find_online_servers() 
  326. 				end 
  327. 				 
  328. 				vint_datagroup_remove_subscription("sr2_syslink_servers_group", "update", "mp_server_browser_list_update") 
  329. 				vint_datagroup_remove_subscription("sr2_syslink_servers_group", "insert", "mp_server_browser_list_update") 
  330. 				vint_datagroup_remove_subscription("sr2_syslink_servers_group", "remove", "mp_server_browser_list_update") 
  331. 				 
  332. 				Mp_server_browser_refresh_thread = false 
  333. 				 
  334. 				vint_document_unload(vint_document_find("mp_server_browser")) 
  335. 			end 
  336.  
  337. 		elseif event == "back" then 
  338. 			-- Animate out 
  339. 			vint_datagroup_remove_subscription("sr2_syslink_servers_group", "update", "mp_server_browser_list_update") 
  340. 			vint_datagroup_remove_subscription("sr2_syslink_servers_group", "insert", "mp_server_browser_list_update") 
  341. 			vint_datagroup_remove_subscription("sr2_syslink_servers_group", "remove", "mp_server_browser_list_update") 
  342. 			if Main_menu_searching_LAN_games == true then 
  343. 				stop_find_syslink_servers() 
  344. 			else 
  345. 				stop_find_online_servers() 
  346. 			end 
  347. 			 
  348. 			Mp_server_browser_refresh_thread = false 
  349. 			 
  350. 			vint_document_unload(vint_document_find("mp_server_browser")) 
  351. 			audio_play(Menu_sound_back) 
  352. 			menu_input_block(false) 
  353. 		 
  354. 		elseif event == "alt_select" then 
  355. 			if Main_menu_searching_LAN_games == false then 
  356. 				if Main_menu_is_coop_game == true then 
  357. 					stop_find_online_servers() 
  358. 					clear_sb_list(); 
  359. 					start_coop_matchmaking() 
  360. 				else 
  361. 					stop_find_online_servers() 
  362. 					clear_sb_list(); 
  363. 					start_find_online_servers(Multi_ranked) 
  364. 				end 
  365. 			end 
  366. 		elseif event == "exit" then 
  367. 			-- Do nothing, just block menu base from seeing this 
  368. 		end 
  369. 	end 
  370. end 
  371.  
  372. function mp_server_browser_cleanup_hints() 
  373. 	local bx = 17 
  374. 	local gap = 36 
  375. 	 
  376. 	-- Clean up their positions (lots of nasty magic numbers here because I copy/pasted it - jhg) 
  377. 	local t1a, t1b = vint_get_property(Mp_server_browser_data.handles.A_text_h, "anchor") 
  378. 	local t1x, t1y = element_get_actual_size(Mp_server_browser_data.handles.A_text_h) 
  379. 	vint_set_property(Mp_server_browser_data.handles.X_btn_h, "anchor", t1a + t1x + gap, 498.0) 
  380. 	 
  381. 	local b2a, b2b = vint_get_property(Mp_server_browser_data.handles.X_btn_h, "anchor") 
  382. 	vint_set_property(Mp_server_browser_data.handles.X_text_h, "anchor", bx + b2a + 16, t1b) 
  383. 	 
  384. 	local t2x, t2y = element_get_actual_size(Mp_server_browser_data.handles.X_text_h) 
  385. 	local t2a, t2b = vint_get_property(Mp_server_browser_data.handles.X_text_h, "anchor") 
  386. 	vint_set_property(Mp_server_browser_data.handles.B_btn_h, "anchor", t2a + t2x + gap, 498.0)	 
  387.  
  388. 	local b3a, b3b = vint_get_property(Mp_server_browser_data.handles.B_btn_h, "anchor") 
  389. 	vint_set_property(Mp_server_browser_data.handles.B_text_h, "anchor", b3a + bx + 16, t1b) 
  390. 	 
  391. end 
  392.  
  393. function Mp_server_browser_change_spreadsheet(idir) 
  394.  
  395. 	-- Set up new tab index 
  396. 	Mp_server_browser_data.current_tab = Mp_server_browser_data.current_tab + idir 
  397. 	 
  398. 	-- Wrap index if necessary 
  399. 	if Mp_server_browser_data.current_tab < 1 then 
  400. 		Mp_server_browser_data.current_tab = Mp_server_browser_data.num_tabs 
  401. 		 
  402. 	elseif Mp_server_browser_data.current_tab > Mp_server_browser_data.num_tabs then 
  403. 		Mp_server_browser_data.current_tab = 1 
  404. 	end 
  405.  
  406. 	-- Blank out colors on all tabs 
  407. 	for idx, val in Mp_server_browser_data.tabs do 
  408. 		local clear_tab = Mp_server_browser_data.tabs[idx].heading_h 
  409. 		vint_set_property(clear_tab, "tint",95/255,95/255,95/255) 
  410. 	end 
  411. 	 
  412. 	-- Make new tab yellow 
  413. 	local new_tab_h = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].heading_h 
  414. 	vint_set_property(new_tab_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  415.  
  416. 	-- Set up animation to move the tabs 
  417. 	local tab_tween_h = vint_object_find("tab_text_translate",Mp_server_browser_data.handles.tab_slide_h) 
  418. 	local x, y = vint_get_property(Mp_server_browser_data.handles.tab_group_h,"anchor") 
  419. 	vint_set_property(tab_tween_h, "start_value", x, 0.0) 
  420. 	vint_set_property(Mp_server_browser_data.handles.stat_headings_h, "alpha", 0.0) 
  421. 	 
  422. 	if Mp_server_browser_data.num_tabs == 0 then 
  423. 		debug_print("vint", "Should not be changing the spreadsheet when there are no tabs set!\n") 
  424. 	else 
  425. 		local frame_size = vint_get_property(vint_object_find("tab_clip"),"clip_size") 
  426. 		frame_size = frame_size - 4 -- Safety buffer to make sure we don't accidentally cut the edges of any text 
  427. 		local destination = 0 
  428. 		 
  429. 		-- Are we already showing all options to the left? 
  430. 		if Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].center < frame_size/2 then 
  431. 			destination = 0 
  432. 		-- Are we already showing all options to the right? 
  433. 		elseif Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].center > Mp_server_browser_data.tab_range - frame_size/2 then 
  434. 			destination = - Mp_server_browser_data.tab_range + frame_size 
  435. 		-- We're somewhere in the middle, just peg the current selection in the center 
  436. 		else 
  437. 			destination = - Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].center + frame_size/2 
  438. 		end 
  439.  
  440. 		vint_set_property(tab_tween_h, "end_value", destination, 0.0) 
  441. 	end 
  442. 	 
  443. 	-- Move the tabs 
  444. 	lua_play_anim(Mp_server_browser_data.handles.tab_slide_h,0) 
  445. 	lua_play_anim(Mp_server_browser_data.handles.columns_fade_h,0) 
  446. 	 
  447. 	-- Set the column texts 
  448. 	local heading_1 = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].column_1 
  449. 	local heading_2 = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].column_2 
  450. 	local heading_3 = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].column_3 
  451. 	 
  452. 	if heading_2 == nil then 
  453. 		heading_2 = " " 
  454. 	end 
  455. 	 
  456. 	if heading_3 == nil then 
  457. 		heading_3 = " " 
  458. 	end 
  459. 	 
  460. 	vint_set_property(Mp_server_browser_data.heading_stat1_h, "text_tag", heading_1) 
  461. 	vint_set_property(Mp_server_browser_data.heading_stat2_h, "text_tag", heading_2) 
  462. 	vint_set_property(Mp_server_browser_data.heading_stat3_h, "text_tag", heading_3) 
  463.  
  464. 	-- Zero out the spreadsheet cursors 
  465. 	Mp_server_browser_data.current_virtual_row = 1 
  466. 	Mp_server_browser_data.current_column = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].default_column 
  467. 	 
  468. 	-- Refresh the column (which automatically refreshes the spreadsheet) 
  469. 	Mp_server_browser_change_column(0) 
  470.  
  471. end 
  472.  
  473. function Mp_server_browser_change_row(idir) 
  474.  
  475. 	-- Set up virtual row 
  476. 	Mp_server_browser_data.current_virtual_row = Mp_server_browser_data.current_virtual_row + idir 
  477. 	 
  478. 	-- Wrap virtual row 
  479. 	if Mp_server_browser_data.current_virtual_row < 1 then 
  480. 		Mp_server_browser_data.current_virtual_row = Mp_server_browser_data.num_virtual_rows 
  481. 	elseif Mp_server_browser_data.current_virtual_row > Mp_server_browser_data.num_virtual_rows then 
  482. 		Mp_server_browser_data.current_virtual_row = 1 
  483. 	end 
  484. 	 
  485. 	-- Set up visible row 
  486. 	if Mp_server_browser_data.num_virtual_rows > 10 then 
  487.  
  488. 		-- If we're at the top of the list, clamp things down and move the highlight toward the top 
  489. 		if Mp_server_browser_data.current_virtual_row <= 5 then 
  490. 			Mp_server_browser_data.top_virtual_row = 1 
  491. 			Mp_server_browser_data.current_visible_row = Mp_server_browser_data.current_virtual_row 
  492. 			 
  493. 		-- If we're at the bottom of the list, clamp things and move the highlight toward the bottom 
  494. 		elseif Mp_server_browser_data.current_virtual_row > Mp_server_browser_data.num_virtual_rows - 5 then 
  495. 			Mp_server_browser_data.top_virtual_row = Mp_server_browser_data.num_virtual_rows - 9 
  496. 			Mp_server_browser_data.current_visible_row = Mp_server_browser_data.current_virtual_row - Mp_server_browser_data.num_virtual_rows + 10 
  497. 			 
  498. 		-- We're scrolling somewhere in the middle, clamp the highlight and move the virtual list around it 
  499. 		else 
  500. 			Mp_server_browser_data.top_virtual_row = Mp_server_browser_data.current_virtual_row - 4 
  501. 			Mp_server_browser_data.current_visible_row = 5 
  502. 		end 
  503. 		 
  504. 		-- Redraw the row text 
  505. 		Mp_server_browser_redraw_rows() 
  506. 	 
  507. 	else 
  508. 		-- No chance of scrolling, so just modify the highlight 
  509. 		Mp_server_browser_data.current_visible_row = Mp_server_browser_data.current_virtual_row 
  510. 	end 
  511. 	 
  512. 	-- Draw in the highlight 
  513. 	for i = 1, Mp_server_browser_data.num_visible_rows do 
  514. 		if i == Mp_server_browser_data.current_visible_row then 
  515. 			vint_set_property(Mp_server_browser_data.visible_row[i].highlight_h, "visible", true) 
  516. 		else 
  517. 			vint_set_property(Mp_server_browser_data.visible_row[i].highlight_h, "visible", false) 
  518. 		end 
  519. 	end 
  520. 	 
  521. end 
  522.  
  523. function Mp_server_browser_change_column(idir) 
  524.  
  525. 	local num_columns = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].num_columns 
  526.  
  527. 	-- Blank out old column 
  528. 	vint_set_property(Mp_server_browser_data.heading_stat1_h, "tint",160/255,160/255,160/255) 
  529. 	vint_set_property(Mp_server_browser_data.heading_stat2_h, "tint",160/255,160/255,160/255) 
  530. 	vint_set_property(Mp_server_browser_data.heading_stat3_h, "tint",160/255,160/255,160/255) 
  531. 	 
  532. 	if num_columns ~= 0 then 
  533. 		-- Set up new column index 
  534. 		Mp_server_browser_data.current_column = Mp_server_browser_data.current_column + idir 
  535. 		 
  536. 		-- Wrap if necessary 
  537. 		if Mp_server_browser_data.current_column < 1 then 
  538. 			Mp_server_browser_data.current_column = num_columns 
  539. 		elseif Mp_server_browser_data.current_column > num_columns then 
  540. 			Mp_server_browser_data.current_column = 1 
  541. 		end 
  542. 		 
  543. 		-- Color in new column 
  544. 		if Mp_server_browser_data.current_column == 1 then 
  545. 			vint_set_property(Mp_server_browser_data.heading_stat1_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  546. 		elseif Mp_server_browser_data.current_column == 2 then 
  547. 			vint_set_property(Mp_server_browser_data.heading_stat2_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  548. 		elseif Mp_server_browser_data.current_column == 3 then 
  549. 			vint_set_property(Mp_server_browser_data.heading_stat3_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  550. 		end 
  551. 	end 
  552. 	Mp_server_browser_data.refresh = true 
  553. end 
  554.  
  555. function Mp_server_browser_new_record( server_id, name, stat1, stat2, stat3, mode, pass ) 
  556.  
  557. 	-- Increment the virtual row 
  558. 	local i = Mp_server_browser_data.num_virtual_rows_all + 1 
  559. 	 
  560. 	-- Format the values (commas, $, distance) 
  561. 	 
  562. 	if stat2 == nil then 
  563. 		stat2 = " " 
  564. 	end 
  565.  
  566. 	if stat3 == nil then 
  567. 		stat3 = " " 
  568. 	end 
  569.  
  570. 	-- Format data 
  571. 	local d = { 
  572. 		rank = 1, 
  573. 		badge = pass, -- holding pass/no pass here 
  574. 		name = name, 
  575. 		stat1 = stat1, 
  576. 		stat2 = stat2, 
  577. 		stat3 = stat3,  
  578. 		is_friend = 0, -- Throw away friend variable because we couldn't use it the way we wanted to 
  579. 		is_player = false, 
  580. 		index = 0, 
  581. 		server_id = server_id, 
  582. 		game_mode = mode, 
  583. 	} 
  584. 	 
  585. 	-- Assign the data to the local variable 
  586. 	Mp_server_browser_data.list_data_all[i] = d 
  587. 	Mp_server_browser_data.num_virtual_rows_all = i 
  588. 	Mp_server_browser_data.refresh = true 
  589.  
  590. end 
  591.  
  592. -- Formats a distance string given an initial value in meters 
  593. function Mp_server_browser_format_distance(value) 
  594.  
  595. 	if use_imperial_units() then 
  596. 		-- Convert to feet 
  597. 		value = floor(value * 3.2808399) 
  598. 		 
  599. 		-- Format the feet string and display 
  600. 		value = Mp_server_browser_format_commas(value) 
  601. 		value = {[0] = value} 
  602. 		return vint_insert_values_in_string("LUA_DISTANCE_FEET", value) 
  603. 	else 
  604. 		-- Format the meters string and display 
  605. 		value = Mp_server_browser_format_commas(value) 
  606. 		value = {[0] = value} 
  607. 		return vint_insert_values_in_string("LUA_DISTANCE_METERS", value) 
  608. 	end 
  609. end 
  610.  
  611. -- Formats a time string given an intial value in seconds 
  612. function Mp_server_browser_format_time(time_in_seconds) 
  613. 	 
  614. 	-- Pull out hours, minutes, and seconds 
  615. 	local hours = floor(time_in_seconds / 3600) 
  616. 	local minutes = floor(time_in_seconds / 60) - (hours * 60) 
  617. 	local seconds =  mod(time_in_seconds, 60) 
  618.  
  619. 	-- Pad minutes if less than 10 and there are hours 
  620. 	if hours > 0 and minutes < 10 then 
  621. 		minutes = "0" .. minutes 
  622. 	end 
  623. 	 
  624. 	-- Pad seconds if needed 
  625. 	if seconds < 10 then 
  626. 		seconds = "0" .. seconds 
  627. 	end 
  628. 	 
  629. 	-- Build the string 
  630. 	if hours > 0 then 
  631. 		return hours .. ":" .. minutes .. ":" .. seconds 
  632. 	else 
  633. 		return minutes .. ":" .. seconds 
  634. 	end 
  635. end 
  636.  
  637. -- Formats a given value into money with commas 
  638. function Mp_server_browser_format_money(value) 
  639. 	return "$" .. format_cash(value) 
  640. end 
  641.  
  642. -- Adds commas to a numerical value 
  643. function Mp_server_browser_format_commas(value) 
  644. 	return format_cash(value) 
  645. end 
  646.  
  647. function sort_server_table(table, size) 
  648. 	if sort_by == 0 then --sort by name 
  649. 		local temp_server = table[0]; 
  650. 		i = 0 
  651. 		while i < size do 
  652. 			j = 0 
  653. 			while j < size do 
  654. 				if table[i].name > table[j].name then 
  655. 					temp_server = table[i] 
  656. 					table[i] = table[j] 
  657. 					table[j] = temp_server 
  658. 				end 
  659. 				j = j + 1 
  660. 			end 
  661. 			i = i + 1 
  662. 		end 
  663. 	end 
  664. end 
  665.  
  666. function Mp_server_browser_refresh_data() 
  667. 	-- Lock out changing 
  668. 	--Mp_server_browser_data.can_move = false 
  669.  
  670. 	-- Blow away old physical lines 
  671. 	for idx, val in Mp_server_browser_data.visible_row do 
  672. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].pulsate) 
  673. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].line_h) 
  674. 	end 
  675. 	 
  676. 	-- Hide the player data 
  677. 	vint_set_property(Mp_server_browser_data.handles.user_row_h, "visible", false) 
  678. 	 
  679. 	-- Get rid of the scroll bar 
  680. 	vint_set_property(Mp_server_browser_data.scroll_group_h, "visible", false) 
  681.  
  682. 	Mp_server_browser_data.refresh = false	 
  683.  
  684. 	vint_datagroup_add_subscription("sr2_syslink_servers_group", "update", "mp_server_browser_list_update") 
  685. 	vint_datagroup_add_subscription("sr2_syslink_servers_group", "insert", "mp_server_browser_list_update") 
  686. 	vint_datagroup_add_subscription("sr2_syslink_servers_group", "remove", "mp_server_browser_list_update") 
  687.  
  688. 	-- Blow away any old player data 
  689. 	-- Zero out the number of vitual rows 
  690. 	Mp_server_browser_data.top_virtual_row = 1 
  691. 	Mp_server_browser_data.current_virtual_row = 1 
  692. 	Mp_server_browser_data.current_visible_row = 1 
  693. 	Mp_server_browser_data.num_virtual_rows = 0 
  694. 	Mp_server_browser_data.num_virtual_rows_all = 0 
  695. 	Mp_server_browser_data.list_data = { } 
  696. 	Mp_server_browser_data.list_data_all = { } 
  697.  
  698. 	--Mp_server_browser_new_record( 0, "test", "IP_TEST", ">10ms", nil, 3 ) 
  699.  
  700. 	while Mp_server_browser_refresh_thread == true do 
  701. 		if Mp_server_browser_data.refresh == true then 
  702. 			Mp_server_browser_data.refresh = false 
  703.  
  704. 			-- Blow away old physical lines 
  705. 			for idx, val in Mp_server_browser_data.visible_row do 
  706. 				vint_object_destroy(Mp_server_browser_data.visible_row[idx].pulsate) 
  707. 				vint_object_destroy(Mp_server_browser_data.visible_row[idx].line_h) 
  708. 			end 
  709. 			Mp_server_browser_data.list_data = { } 
  710.  
  711. 			local sheet_game_mode = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].game_mode 
  712. 			local servers_count = 0 
  713. 			for idx, server in Mp_server_browser_data.list_data_all do 
  714. 				if sheet_game_mode == -1 or server.game_mode == sheet_game_mode then 
  715. 					Mp_server_browser_data.list_data[servers_count+1] = server 
  716. 					servers_count = servers_count + 1 
  717. 				else 
  718. 					if sheet_game_mode == -2 and server.badge == 0 then -- coop, public games only 
  719. 						Mp_server_browser_data.list_data[servers_count+1] = server 
  720. 						servers_count = servers_count + 1 
  721. 					end 
  722. 				end 
  723. 			end 
  724. 			Mp_server_browser_data.num_virtual_rows = servers_count 
  725.  
  726. 			--sort_server_table(Mp_server_browser_data.list_data, servers_count) 
  727.  
  728. 			-- Get the data name we're using 
  729. 			local data = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].data[Mp_server_browser_data.current_column] 
  730. 			 
  731. 			-- Set up number of visible rows 
  732. 			Mp_server_browser_data.num_visible_rows = Mp_server_browser_data.num_virtual_rows 
  733. 			 
  734. 			-- We have more virtual rows than we can display 
  735. 			if Mp_server_browser_data.num_visible_rows > 10 then 
  736. 			 
  737. 				-- Clamp visible rows to 10 
  738. 				Mp_server_browser_data.num_visible_rows = 10 
  739. 				 
  740. 				-- Set up scroll bar translation scaler 
  741. 				Mp_server_browser_data.scroll_bar_scaler =  18 + 185 * ((Mp_server_browser_data.num_virtual_rows - 11)/89) 
  742. 				 
  743. 				-- Set up scroll bar size 
  744. 				local scale_y = 65 + 185 * ((100 - Mp_server_browser_data.num_virtual_rows)/89) 
  745. 				local bar_h = vint_object_find("scroll_bar", Mp_server_browser_data.scroll_group_h) 
  746. 				local bottom_h = vint_object_find("scroll_bar_bottom", bar_h) 
  747. 				vint_set_property(bar_h, "source_se", 32.0, scale_y) 
  748. 				vint_set_property(bottom_h, "anchor", 0.0, scale_y) 
  749.  
  750. 				-- Display the scroll bar 
  751. 				vint_set_property(Mp_server_browser_data.scroll_group_h, "visible", true) 
  752. 			else 
  753. 				-- Declare anyway just in case 
  754. 				Mp_server_browser_data.scroll_bar_scaler =  0 
  755. 			end 
  756. 			 
  757. 			-- Hang on to position of top row 
  758. 			local x,y = vint_get_property(Mp_server_browser_data.handles.spreadsheet_row_h, "anchor") 
  759.  
  760. 			-- Make all the new visible rows and set them up for code reference 
  761. 			for i = 1, Mp_server_browser_data.num_visible_rows do 
  762. 			 
  763. 				-- Clone row and animation 
  764. 				local line_h = vint_object_clone(Mp_server_browser_data.handles.spreadsheet_row_h) 
  765. 				local pulsate = vint_object_clone(Mp_server_browser_data.handles.highlight_shine_anim_h) 
  766. 				 
  767. 				-- Apply animation 
  768. 				local pulsate_tween = vint_object_find("highlight_shine_fade", pulsate) 
  769. 				vint_set_property(pulsate_tween, "target_handle", vint_object_find("highlight_back_shine", line_h)) 
  770. 				 
  771. 				-- Set all new handles 
  772. 				local highlight_h = vint_object_find("highlight", line_h) 
  773. 				local highlight_name_h = vint_object_find("highlight_name", line_h) 
  774. 				local highlight_stat1_h = vint_object_find("highlight_stat1", line_h) 
  775. 				local highlight_stat2_h = vint_object_find("highlight_stat2", line_h) 
  776. 				local highlight_stat3_h = vint_object_find("highlight_stat3", line_h) 
  777. 				local normal_rank_h = vint_object_find("normal_rank", line_h) 
  778. 				local normal_badge_h = vint_object_find("normal_badge", line_h) 
  779. 				local normal_name_h = vint_object_find("normal_name", line_h) 
  780. 				local normal_stat1_h = vint_object_find("normal_stat1", line_h) 
  781. 				local normal_stat2_h = vint_object_find("normal_stat2", line_h) 
  782. 				local normal_stat3_h = vint_object_find("normal_stat3", line_h) 
  783. 				 
  784. 				-- Save everything in a nice table 
  785. 				Mp_server_browser_data.visible_row[i] = {line_h = line_h, 
  786. 																	pulsate = pulsate, 
  787. 																	highlight_h = highlight_h, 
  788. 																	highlight_name_h = highlight_name_h, 
  789. 																	highlight_stat1_h = highlight_stat1_h, 
  790. 																	highlight_stat2_h = highlight_stat2_h, 
  791. 																	highlight_stat3_h = highlight_stat3_h, 
  792. 																	normal_rank_h = normal_rank_h, 
  793. 																	normal_badge_h = normal_badge_h, 
  794. 																	normal_name_h = normal_name_h, 
  795. 																	normal_stat1_h = normal_stat1_h, 
  796. 																	normal_stat2_h = normal_stat2_h, 
  797. 																	normal_stat3_h = normal_stat3_h, 
  798. 																	} 
  799. 				 
  800. 				-- Draw the row 
  801. 				vint_set_property(Mp_server_browser_data.visible_row[i].line_h, "anchor", x, y + (32 * (i - 1))) 
  802. 				vint_set_property(Mp_server_browser_data.visible_row[i].line_h, "visible", true) 
  803. 			end 
  804. 			-- Fill in the lines based on position 
  805. 			Mp_server_browser_redraw_rows() 
  806.  
  807. 			-- Return the cursor 
  808. 			Mp_server_browser_change_row(0) 
  809. 		end 
  810.  
  811. 		thread_yield() 
  812.  
  813. 	end 
  814. 	 
  815. 	-- Unlock changing 
  816. 	--Mp_server_browser_data.can_move = true 
  817. end 
  818.  
  819. function Mp_server_browser_redraw_rows() 
  820.  
  821. 	-- Fill data into all the spreadsheet based on how many visible rows there are 
  822. 	for i = 1, Mp_server_browser_data.num_visible_rows do 
  823. 		-- Hang on to virtualized number of the row 
  824. 		local virtual = Mp_server_browser_data.top_virtual_row + i - 1 
  825. 	 
  826. 		-- Set all the graphics 
  827. 		vint_set_property(Mp_server_browser_data.visible_row[i].highlight_name_h, "text_tag", Mp_server_browser_data.list_data[virtual].name) 
  828. 		vint_set_property(Mp_server_browser_data.visible_row[i].highlight_stat1_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat1) 
  829. 		vint_set_property(Mp_server_browser_data.visible_row[i].highlight_stat2_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat2) 
  830. 		vint_set_property(Mp_server_browser_data.visible_row[i].highlight_stat3_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat3) 
  831. 		--vint_set_property(Mp_server_browser_data.visible_row[i].normal_rank_h, "text_tag", Mp_server_browser_data.list_data[virtual].rank) 
  832. 		vint_set_property(Mp_server_browser_data.visible_row[i].normal_badge_h, "image", "ui_pc_server_locked" ) 
  833. 		vint_set_property(Mp_server_browser_data.visible_row[i].normal_name_h, "text_tag", Mp_server_browser_data.list_data[virtual].name) 
  834. 		vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat1_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat1) 
  835. 		vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat2_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat2) 
  836. 		vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat3_h, "text_tag", Mp_server_browser_data.list_data[virtual].stat3) 
  837. 		 
  838. 		-- Set badge visibility 
  839. 		if Mp_server_browser_data.list_data[virtual].badge == 1 then 
  840. 			vint_set_property( Mp_server_browser_data.visible_row[i].normal_badge_h, "visible",  true ) 
  841. 		else 
  842. 			vint_set_property( Mp_server_browser_data.visible_row[i].normal_badge_h, "visible",  false ) 
  843. 		end 
  844. 		 
  845. 		vint_set_property( Mp_server_browser_data.visible_row[i].normal_rank_h, "visible", false ) 
  846. 		 
  847. 		-- Set name and badge colors 
  848. --		if Mp_server_browser_data.list_data[virtual].is_player == true then 
  849. --			vint_set_property(Mp_server_browser_data.visible_row[i].normal_rank_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  850. --			vint_set_property(Mp_server_browser_data.visible_row[i].normal_name_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  851. --		else 
  852. --			vint_set_property(Mp_server_browser_data.visible_row[i].normal_rank_h, "tint", 95/255,95/255,95/255) 
  853. --			vint_set_property(Mp_server_browser_data.visible_row[i].normal_name_h, "tint", 95/255,95/255,95/255) 
  854. --		end 
  855. 		 
  856. 		-- Start with blank column colors 
  857. 		if Mp_server_browser_data.list_data[virtual].is_player == true then 
  858. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat1_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  859. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat2_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  860. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat3_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  861. 			 
  862. 		else 
  863. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat1_h, "tint", 95/255,95/255,95/255) 
  864. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat2_h, "tint", 95/255,95/255,95/255) 
  865. 			vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat3_h, "tint", 95/255,95/255,95/255) 
  866. 		end 
  867. 	 
  868. 		local num_columns = Mp_server_browser_data.tabs[Mp_server_browser_data.current_tab].num_columns 
  869. 		 
  870. 		if num_columns > 0 then 
  871. 			-- Add column highlight color 
  872. 			if Mp_server_browser_data.current_column == 1 then 
  873. 				vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat1_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  874. 			elseif Mp_server_browser_data.current_column == 2 then 
  875. 				vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat2_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b) 
  876. 			elseif Mp_server_browser_data.current_column == 3 then 
  877. 				vint_set_property(Mp_server_browser_data.visible_row[i].normal_stat3_h, "tint", Mp_server_browser_colors.yellow.r, Mp_server_browser_colors.yellow.g, Mp_server_browser_colors.yellow.b 
  878. ) 
  879. 			end 
  880. 		end 
  881. 	end 
  882. 	 
  883. 	-- Set up destination for scroll bar 
  884. 	local bar_y = 202 + (Mp_server_browser_data.scroll_bar_scaler * (Mp_server_browser_data.current_virtual_row - 1)/(Mp_server_browser_data.num_virtual_rows - 1)) 
  885. 	vint_set_property(Mp_server_browser_data.scroll_bar_h, "anchor", 991.0, bar_y) 
  886. end 
  887.  
  888.  
  889. function Mp_server_browser_update_btn_tips() 
  890.  
  891. 	--Call to menubase to update the button tips 
  892. 	btn_tips_update() 
  893. end 
  894.  
  895. function Mp_server_browser_btn_x_is_active() 
  896. 	return true 
  897. end 
  898.  
  899. Mp_server_browser_btn_tips = { 
  900. 	a_button 	= 	{ label = "CONTROL_SELECT", 	enabled = Mp_server_browser_btn_x_is_active}, 
  901. 	x_button 	= 	{ label = "REFRESH", 			enabled = Mp_server_browser_btn_x_is_active}, 
  902. 	b_button 	= 	{ label = "MENU_BACK", 			enabled = Mp_server_browser_btn_x_is_active}, 
  903. } 
  904.  
  905. Mp_server_browser_btn_temp_tips = {} 
  906.  
  907. function mp_server_browser_list_update( di_h, event ) 
  908.  
  909. 	local display_string, is_mp, id, ip_str, ping_str, mode, pass, mode_str = vint_dataitem_get(di_h) 
  910. 	 
  911. 	if Main_menu_showing_coop_games == true then 
  912. 		if is_mp == true then 
  913. 			mp_player_has_favorite_match_settings() 
  914. 			return 
  915. 		end 
  916. 	elseif is_mp == false then 
  917. 		mp_load_custom_match_settings_from_favorite() 
  918. 		return 
  919. 	end 
  920.  
  921. 	if event == "insert" then  
  922. 		Mp_server_browser_new_record( id, display_string, ip_str, ping_str, mode_str, mode, pass ) 
  923. 	elseif event == "remove" then 
  924.  
  925. 	elseif event == "update" then 
  926.  
  927. 	end 
  928.  
  929. end 
  930.  
  931. function clear_sb_list() 
  932.  
  933. 	-- Blow away old physical lines 
  934. 	for idx, val in Mp_server_browser_data.visible_row do 
  935. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].pulsate) 
  936. 		vint_object_destroy(Mp_server_browser_data.visible_row[idx].line_h) 
  937. 	end 
  938. 	 
  939. 	-- Hide the player data 
  940. 	vint_set_property(Mp_server_browser_data.handles.user_row_h, "visible", false) 
  941. 	 
  942. 	-- Get rid of the scroll bar 
  943. 	vint_set_property(Mp_server_browser_data.scroll_group_h, "visible", false) 
  944.  
  945. 	Mp_server_browser_data.top_virtual_row = 1 
  946. 	Mp_server_browser_data.current_virtual_row = 1 
  947. 	Mp_server_browser_data.current_visible_row = 1 
  948. 	Mp_server_browser_data.num_virtual_rows = 0 
  949. 	Mp_server_browser_data.num_virtual_rows_all = 0 
  950. 	Mp_server_browser_data.list_data = { } 
  951. 	Mp_server_browser_data.list_data_all = { } 
  952. 	--Mp_server_browser_data.refresh = true 
  953. end 
  954.  
  955.