sr2lua/hud_coop_div.lua

  1.  
  2.  
  3. --[[ 
  4. You should be able to just drop 
  5. ]] 
  6.  
  7. Hud_coop_div_audio = { 
  8. 	top_2 = audio_get_audio_id("SYS_COMPLETION_START_2"), 
  9. 	text = audio_get_audio_id("SYS_COMPLETION_TEXT"), 
  10. 	cash = audio_get_audio_id("SYS_COMPLETION_CASH"), 
  11. 	respect = audio_get_audio_id("SYS_COMPLETION_RESPECT"), 
  12. 	image = audio_get_audio_id("SYS_COMPLETION_OBJECT"), 
  13. 	tips = audio_get_audio_id("SYS_COMPLETION_MENU"), 
  14. } 
  15.  
  16. function hud_coop_div_audio_top_2() 
  17. 	audio_play(Hud_coop_div_audio.top_2) 
  18. end 
  19.  
  20. function hud_coop_div_audio_text() 
  21. 	audio_play(Hud_coop_div_audio.text) 
  22. end 
  23.  
  24. function hud_coop_div_audio_cash() 
  25. 	audio_play(Hud_coop_div_audio.cash) 
  26. end 
  27.  
  28. function hud_coop_div_audio_respect() 
  29. 	audio_play(Hud_coop_div_audio.respect) 
  30. end 
  31.  
  32. function hud_coop_div_audio_image() 
  33. 	audio_play(Hud_coop_div_audio.image) 
  34. end 
  35.  
  36. function hud_coop_div_audio_tips() 
  37. 	audio_play(Hud_coop_div_audio.tips) 
  38. end 
  39.  
  40. Hud_coop_div = {} 
  41.  
  42. function hud_coop_div_init() 
  43.  
  44. 	--Find and store objects 
  45. 	Hud_coop_div.handles = {} 
  46. 	Hud_coop_div.handles.title_txt = vint_object_find("title_txt") 
  47. 	Hud_coop_div.handles.subtitle_txt = vint_object_find("subtitle_txt") 
  48. 	 
  49. 	--Player 
  50. 	Hud_coop_div.handles.player_grp = vint_object_find("player_grp") 
  51. 	Hud_coop_div.handles.player_name_txt = vint_object_find("player_name_txt") 
  52. 	Hud_coop_div.handles.player_score_grp = vint_object_find("player_score_grp") 
  53. 	Hud_coop_div.handles.player_score_txt = vint_object_find("player_score_txt") 
  54. 	Hud_coop_div.handles.player_score_type_txt = vint_object_find("player_score_type_txt") 
  55. 	Hud_coop_div.handles.player_score_anim_grp = vint_object_find("player_score_anim_grp") 
  56. 	 
  57. 	--Enemy 
  58. 	Hud_coop_div.handles.enemy_grp = vint_object_find("enemy_grp") 
  59. 	Hud_coop_div.handles.enemy_name_txt = vint_object_find("enemy_name_txt") 
  60. 	Hud_coop_div.handles.enemy_score_grp = vint_object_find("enemy_score_grp") 
  61. 	Hud_coop_div.handles.enemy_score_txt = vint_object_find("enemy_score_txt") 
  62. 	Hud_coop_div.handles.enemy_score_type_txt = vint_object_find("enemy_score_type_txt") 
  63. 	Hud_coop_div.handles.enemy_score_anim_grp = vint_object_find("enemy_score_anim_grp") 
  64. 	 
  65. 	--Cash 
  66. 	Hud_coop_div.handles.cash_grp = vint_object_find("cash_grp") 
  67. 	Hud_coop_div.handles.cash_amount_txt = vint_object_find("cash_amount_txt") 
  68. 	 
  69. 	--Controls 
  70. 	Hud_coop_div.handles.options_grp = vint_object_find("options_grp") 
  71. 	 
  72. 	--Hide for pre-animation 
  73. 	vint_set_property(Hud_coop_div.handles.enemy_grp, "alpha", 0) 
  74. 	vint_set_property(Hud_coop_div.handles.player_grp, "alpha", 0) 
  75. 	 
  76. 	--Hide Cash 
  77. 	vint_set_property(Hud_coop_div.handles.cash_amount_txt, "alpha", 0) 
  78. 	vint_set_property(vint_object_find("cash_txt"), "alpha", 0) 
  79. 	 
  80. 	--Title 
  81. 	vint_set_property(Hud_coop_div.handles.title_txt, "alpha", 0) 
  82. 	vint_set_property(Hud_coop_div.handles.subtitle_txt, "alpha", 0) 
  83. 	 
  84. 	--Hide Ornate 
  85. 	local ornate_left = vint_object_find("ornate_left") 
  86. 	local ornate_right = vint_object_find("ornate_right") 
  87. 	local se_x, se_y = vint_get_property(ornate_left, "source_se") 
  88. 	vint_set_property(ornate_left, "source_se", 0, se_y) 
  89. 	vint_set_property(ornate_right, "source_se", 0, se_y) 
  90. 	 
  91. 	--Misc 
  92. 	vint_set_property(vint_object_find("options_grp"), "alpha", 0) 
  93. 	vint_set_property(vint_object_find("background"), "alpha", 0) 
  94. 		 
  95. 	--Animation Callbacks 
  96. 	local in_anim_twn = vint_object_find("options_grp_alpha_twn_1") 
  97. 	vint_set_property(in_anim_twn, "start_event", "hud_coop_div_in_anim_end") 
  98. 	 
  99. 	--Sound Callbacks 
  100. 	local twn = vint_object_find("title_txt_alpha_twn_1") 
  101. 	vint_set_property(twn, "start_event", "hud_coop_div_audio_top_2") 
  102. 	 
  103. 	twn = vint_object_find("enemy_score_anim_grp_alpha_twn") 
  104. 	vint_set_property(twn, "start_event", "hud_coop_div_audio_text") 
  105. 	 
  106. 	twn = vint_object_find("cash_txt_anchor_twn_1") 
  107. 	vint_set_property(twn, "start_event", "hud_coop_div_audio_cash") 
  108. 	 
  109. 	twn = vint_object_find("cash_amount_txt_scale_twn_1") 
  110. 	vint_set_property(twn, "start_event", "hud_coop_div_audio_respect") 
  111. 	 
  112. 	--General Data 
  113. 	Hud_coop_div.is_host = false 
  114. 	Hud_coop_div.animation_finished = false 
  115. 	 
  116. 	--Animations play 
  117. 	lua_play_anim(vint_object_find("cash_amount_anim"), .25) 
  118. 	lua_play_anim(vint_object_find("options_grp_anim"), .25) 
  119. 	lua_play_anim(vint_object_find("ornate_anim"), .25) 
  120. 	lua_play_anim(vint_object_find("player_score_anim"), .25) 
  121. 	lua_play_anim(vint_object_find("title_anim"), .25) 
  122. 	 
  123. 	vint_dataresponder_request("coop_diversion_success_responder", "hud_coop_div_data_populate", 0, 0) 
  124. 	--hud_coop_div_data_populate(0, 1, true, 0, "JAGERBOMSSS!", 3, "DA", 4, 400000) 
  125. 	 
  126. 	hud_coop_div_input_subscribe() 
  127. 	 
  128. 	--Fade out hud 
  129. 	hud_fade_out() 
  130. end 
  131.  
  132. function hud_coop_div_cleanup() 
  133. 	hud_fade_in() 
  134. 	hud_coop_div_input_unsubscribe() 
  135. end 
  136.  
  137. function hud_coop_div_data_populate(diversion_type, win_status, is_host, points_type, my_name, my_points, enemy_name, enemy_points, reward) 
  138. --[[ 
  139. 	Kevin Hassett: 5/13/08 11:18 PM  
  140. 	The data responder is called coop_diversion_success_responder,  
  141. 	and the vint_document coop_diversion_success_doc.  
  142.  
  143. 	// Param 0: Diversion type (0 = Death Tag, 1 = Cat & Mouse, 2 = Co-op Survival) 
  144. 	// Param 1: Win status (0 = Win, 1 = Lose, 2 = Tie) 
  145. 	// Param 2: Am I the host? (used for determining whether or not to let the player "retry") 
  146. 	// Param 3: Points type (0 = Points, 1 = Kills) 
  147. 	// Param 4: My name 
  148. 	// Param 5: My points 
  149. 	// Param 6: Partner's name 
  150. 	// Param 7: Partner's points 
  151. 	// Param 8: Reward 
  152. 	--]] 
  153.  
  154.  
  155. 	--Set Screen Title 
  156. 	local title_string = "" 
  157. 	if diversion_type == 0 then 
  158. 		-- Death Tag 
  159. 		title_string = "DIVERSION_COOP_DEATH_TAG_TITLE" 
  160. 	elseif diversion_type == 1 then 
  161. 		--Cat And Mouse 
  162. 		title_string = "DIVERSION_COOP_CAT_AND_MOUSE_TITLE" 
  163. 	elseif diversion_type == 2 then 
  164. 		--survivale mode 
  165. 		title_string = "DIVERSION_COOP_SURVIVAL_TITLE" 
  166. 	end 
  167. 	 
  168. 	vint_set_property(Hud_coop_div.handles.title_txt, "text_tag", title_string) 
  169.  
  170. 	--Win Status 
  171. 	if win_status == 0 then 
  172. 		--Win 
  173. 		vint_set_property(Hud_coop_div.handles.subtitle_txt, "text_tag", "MP_WINNERS_YOU_WIN")	--"You Win" 
  174. 	elseif win_status == 1 then 
  175. 		--Lose 
  176. 		vint_set_property(Hud_coop_div.handles.subtitle_txt, "text_tag", "MP_WINNERS_YOU_LOSE")	--"You Lose" 
  177. 		vint_set_property(Hud_coop_div.handles.subtitle_txt, "tint", 0.666, 0, 0.004) 
  178. 	elseif win_status == 2 then 
  179. 		--Tie 
  180. 		vint_set_property(Hud_coop_div.handles.subtitle_txt, "text_tag", "MP_WINNERS_TIE")	--"Game Tie" 
  181. 		vint_set_property(Hud_coop_div.handles.subtitle_txt, "tint", 0.623, 0.635, 0.644) 
  182. 	end 
  183. 	 
  184. 	--Button Input and Controls are different depending on the client/host situation 
  185. 	local option_1_txt = vint_object_find("option_1_txt") 
  186. 	local option_2_txt = vint_object_find("option_2_txt") 
  187. 	if is_host == true then 
  188. 		--Adjust control displays 
  189. 		vint_set_property(option_1_txt, "text_tag", "DIVERSION_COOP_HOST_PLAY_AGAIN")	--"{MENU_SELECT_IMG} Play Another Match" 
  190. 		vint_set_property(option_2_txt, "text_tag", "DIVERSION_COOP_HOST_QUIT")			--"{MENU_ABORT_IMG} Quit Co-op Diversion"		 
  191. 	else 
  192. 		--Client is only (a) Continue 
  193. 		local option_1_txt = vint_object_find("option_1_txt") 
  194. 		local option_2_txt = vint_object_find("option_2_txt") 
  195. 		vint_set_property(option_2_txt, "visible", false) 
  196. 		vint_set_property(option_1_txt, "text_tag", "DIVERSION_COOP_CLIENT_CONTINUE")	--"{MENU_SELECT_IMG} Continue" 
  197. 	end 
  198. 	 
  199. 	Hud_coop_div.is_host = is_host 
  200. 	 
  201. 	--Set points Description string for scores 
  202. 	local points_string = "" 
  203. 	if points_type == 0 then 
  204. 		points_string = "HUD_DIVERSION_POINTS" 
  205. 	elseif points_type == 1 then 
  206. 		points_string = "MULTI_MENU_STATS_KILLS" 
  207. 	end 
  208. 	 
  209. 	vint_set_property(Hud_coop_div.handles.player_score_type_txt, "text_tag", points_string) 
  210. 	vint_set_property(Hud_coop_div.handles.enemy_score_type_txt, "text_tag", points_string) 
  211. 	 
  212. 	--My Points 
  213. 	vint_set_property(Hud_coop_div.handles.player_name_txt, "text_tag", my_name) 
  214. 	vint_set_property(Hud_coop_div.handles.player_score_txt, "text_tag", format_cash(my_points)) 
  215. 	 
  216. 	--Enemy Points 
  217. 	vint_set_property(Hud_coop_div.handles.enemy_name_txt, "text_tag", enemy_name) 
  218. 	vint_set_property(Hud_coop_div.handles.enemy_score_txt, "text_tag", format_cash(enemy_points)) 
  219. 		 
  220. 	--Center Points with names 
  221. 	local largest_width = 0 
  222. 	local center_pad = 20 
  223. 	for i = 0, 1 do  
  224. 		local name_txt 
  225. 		local score_txt 
  226. 		local score_type_txt 
  227. 		local score_grp 
  228. 		 
  229. 		if i == 0 then 
  230. 			name_txt = Hud_coop_div.handles.player_name_txt 
  231. 			score_txt = Hud_coop_div.handles.player_score_txt 
  232. 			score_type_txt = Hud_coop_div.handles.player_score_type_txt 
  233. 			score_grp = Hud_coop_div.handles.player_score_grp 
  234. 			 
  235. 		elseif i == 1 then 
  236. 			score_txt = Hud_coop_div.handles.enemy_score_txt 
  237. 			name_txt = Hud_coop_div.handles.enemy_name_txt 
  238. 			score_type_txt = Hud_coop_div.handles.enemy_score_type_txt 
  239. 			score_grp = Hud_coop_div.handles.enemy_score_grp 
  240. 		end 
  241. 		 
  242. 		--Re-align scores so they are centered with the names 
  243. 		local padding = 10 
  244. 		local x_1, y_1 = vint_get_property(score_txt, "anchor") 
  245. 		local x_2, y_2 = vint_get_property(score_type_txt, "anchor") 
  246. 		local width_1, height_1 = element_get_actual_size(score_txt) 
  247. 		local width_2, height_2 = element_get_actual_size(score_type_txt) 
  248. 		x_2 = padding + width_1  
  249. 		vint_set_property(score_type_txt, "anchor", x_2, y_2) 
  250. 		local new_score_width = x_2 + width_2 
  251. 		local score_grp_x, score_grp_y = vint_get_property(score_grp, "anchor") 
  252. 		score_grp_x = -(new_score_width * .5) 
  253. 		vint_set_property(score_grp, "anchor", score_grp_x, score_grp_y) 
  254. 		 
  255. 		local name_width, name_height = element_get_actual_size(name_txt) 
  256. 		 
  257. 		if largest_width < name_width then 
  258. 			largest_width = name_width 
  259. 		end 
  260. 		if largest_width < new_score_width then 
  261. 			largest_width = new_score_width 
  262. 		end 
  263. 	end 
  264. 	 
  265. 	--Align scores/names vertically so they aren't too far apart 
  266. 	local base_x = (largest_width * .5) + center_pad 
  267. 	local x, y = vint_get_property(Hud_coop_div.handles.player_grp, "anchor") 
  268. 	vint_set_property(Hud_coop_div.handles.player_grp, "anchor", -base_x, y) 
  269. 	x, y = vint_get_property(Hud_coop_div.handles.enemy_grp, "anchor") 
  270. 	vint_set_property(Hud_coop_div.handles.enemy_grp, "anchor", base_x, y) 
  271. 	 
  272. 	--My Reward 
  273. 	if reward > 0 then 
  274. 		vint_set_property(Hud_coop_div.handles.cash_amount_txt, "text_tag", "$" .. format_cash(reward)) 
  275. 	else 
  276. 		--No reward hide it, move button tips and adjust animation timing 
  277. 		vint_set_property(Hud_coop_div.handles.cash_grp, "visible", false) 
  278. 		local x, y = vint_get_property(Hud_coop_div.handles.cash_grp, "anchor") 
  279. 		vint_set_property(Hud_coop_div.handles.options_grp, "anchor", x, y) 
  280. 		 
  281. 		--Destroy cash anim 
  282. 		local anim_h = vint_object_find("cash_amount_anim") 
  283. 		vint_object_destroy(anim_h) 
  284. 		 
  285. 		--Speed up text tag anim_h 
  286. 		local twn_h = vint_object_find("options_grp_alpha_twn_1") 
  287. 		vint_set_property(twn_h, "start_time", 1.33) 
  288. 	end 
  289.  
  290. end 
  291.  
  292. function hud_coop_div_input_subscribe() 
  293. 	Hud_coop_div.input_subs = { 
  294. 		vint_subscribe_to_input_event(nil, "pause",				"hud_coop_div_input_event", 50), 
  295. 		vint_subscribe_to_input_event(nil, "select",			"hud_coop_div_input_event", 50), 
  296. 		vint_subscribe_to_input_event(nil, "back",				"hud_coop_div_input_event", 50), 
  297. 		vint_subscribe_to_input_event(nil, "all_unassigned",	"hud_coop_div_input_event", 50), 
  298. 	}	 
  299. end 
  300.  
  301. function hud_coop_div_input_event(target, event, accelleration) 
  302.  
  303. 	if Hud_coop_div.animation_finished == false then 
  304. 		local current_time = vint_get_time_index() 
  305. 		vint_set_time_index(current_time + 10) 
  306. 		Hud_coop_div.animation_finished = true 
  307. 		return 
  308. 	end 
  309.  
  310. 	if event == "select" then 
  311. 		if Hud_coop_div.is_host == true then 
  312. 			--Retry 
  313. 			vint_dataresponder_request("coop_diversion_success_responder", "hud_coop_div_dummy_cb", 0, 1) 
  314. 		else 
  315. 			--Quit 
  316. 			vint_dataresponder_request("coop_diversion_success_responder", "hud_coop_div_dummy_cb", 0, 2) 
  317. 		end 
  318. 		hud_coop_div_exit() 
  319. 	elseif event == "back" or event == "pause" then 
  320. 		if Hud_coop_div.is_host == true then 
  321. 			--Quit 
  322. 			vint_dataresponder_request("coop_diversion_success_responder", "hud_coop_div_dummy_cb", 0, 2) 
  323. 			hud_coop_div_exit() 
  324. 		end 
  325. 	end 
  326. end 
  327.  
  328. function hud_coop_div_dummy_cb() 
  329. 	--Dummy CB that does nothing 
  330. end 
  331.  
  332. function hud_coop_div_input_unsubscribe() 
  333. 	if Hud_coop_div.input_subs == nil then 
  334. 		return 
  335. 	end 
  336. 	 
  337. 	for idx, val in Hud_coop_div.input_subs do 
  338. 		vint_unsubscribe_to_input_event(val) 
  339. 	end 
  340. 	Hud_coop_div.input_subs = nil 
  341. end 
  342.  
  343. function hud_coop_div_exit() 
  344. 	--When the screen exits, fade in the hud, unsubscribe events, and unload the documnet 
  345. 	vint_document_unload(vint_document_find("hud_coop_div")) 
  346. end 
  347.  
  348. function hud_coop_div_in_anim_end() 
  349. 	Hud_coop_div.animation_finished = true 
  350. 	hud_coop_div_audio_tips() 
  351. end