sr2lua/hud_reticules.lua

  1. Hud_reticules = { 
  2. 	configs = { 
  3. 		["none"] = { 
  4. 			dot = {false, false}, 
  5. 			ring = {false, false}, 
  6. 			ring_split = {false, false}, 
  7. 			cross = {false, false}, 
  8. 			cross_size = nil, 
  9. 			cross_orientation = nil, 
  10. 			spread = false, 
  11. 			spread_style = "default", 
  12. 			sniper = false, 
  13. 			pressure = false, 
  14. 		}, 
  15. 		["pistol"] = { 
  16. 			dot = {true, false}, 
  17. 			ring = {true, true}, 
  18. 			ring_split = {false, false}, 
  19. 			cross = {false, false}, 
  20. 			cross_size = nil, 
  21. 			cross_orientation = nil, 
  22. 			spread = false, 
  23. 			spread_style = "default", 
  24. 			sniper = false, 
  25. 			pressure = false, 
  26. 		}, 
  27. 		["holt_55"] = { 
  28. 			dot = {false, false}, 
  29. 			ring = {true, true}, 
  30. 			ring_split = {false, false}, 
  31. 			cross = {false, false}, 
  32. 			cross_size = nil, 
  33. 			cross_orientation = nil, 
  34. 			spread = true, 
  35. 			spread_style = "default", 
  36. 			sniper = false, 
  37. 			pressure = false, 
  38. 		}, 
  39. 		["shotgun"] = { 
  40. 			dot = {false, false}, 
  41. 			ring = {true, true}, 
  42. 			ring_split = {false, false}, 
  43. 			cross = {false, false}, 
  44. 			cross_size = nil, 
  45. 			cross_orientation = nil, 
  46. 			spread = false, 
  47. 			spread_style = "default", 
  48. 			sniper = false, 
  49. 			pressure = false, 
  50. 		}, 
  51. 		["sub_rifle"] = { 
  52. 			dot = {false, false}, 
  53. 			ring = {true, true}, 
  54. 			ring_split = {false, false}, 
  55. 			cross = {true, true}, 
  56. 			cross_size = "small", 
  57. 			cross_orientation = 0, 
  58. 			spread = true, 
  59. 			spread_style = "smg", 
  60. 			sniper = false, 
  61. 			pressure = false, 
  62. 		}, 
  63. 		["rifle"] = { 
  64. 			dot = {false, false}, 
  65. 			ring = {false, false}, 
  66. 			ring_split = {false, false}, 
  67. 			cross = {true, true}, 
  68. 			cross_size = "large", 
  69. 			cross_orientation = 0, 
  70. 			spread = true, 
  71. 			spread_style = "default", 
  72. 			sniper = false, 
  73. 			pressure = false, 
  74. 		}, 
  75. 		["rpg"] = { 
  76. 			dot = {false, false}, 
  77. 			ring = {false, false}, 
  78. 			ring_split = {false, false}, 
  79. 			cross = {true, true}, 
  80. 			cross_size = "large", 
  81. 			cross_orientation = 1, 
  82. 			spread = false, 
  83. 			spread_style = "default", 
  84. 			sniper = false, 
  85. 			pressure = false, 
  86. 		}, 
  87. 		["rpg_annihilator"] = { 
  88. 			dot = {false, false}, 
  89. 			ring = {false, false}, 
  90. 			ring_split = {false, false}, 
  91. 			cross = {true, true}, 
  92. 			cross_size = "large", 
  93. 			cross_orientation = 1, 
  94. 			spread = false, 
  95. 			spread_style = "default", 
  96. 			sniper = false, 
  97. 			pressure = false, 
  98. 		}, 
  99. 		["thrown"] = { 
  100. 			dot = {false, false}, 
  101. 			ring = {false, false}, 
  102. 			ring_split = {true, true}, 
  103. 			cross = {false, false}, 
  104. 			cross_size = nil, 
  105. 			cross_orientation = nil, 
  106. 			spread = false, 
  107. 			spread_style = "default", 
  108. 			sniper = false, 
  109. 			pressure = false, 
  110. 		}, 
  111. 		["sniper"] = { 
  112. 			dot = {false, false}, 
  113. 			ring = {false, false}, 
  114. 			ring_split = {false, false}, 
  115. 			cross = {true, true}, 
  116. 			cross_size = "large", 
  117. 			cross_orientation = 0, 
  118. 			spread = false, 
  119. 			spread_style = "sniper", 
  120. 			sniper = true, 
  121. 			pressure = false, 
  122. 		}, 
  123. 		["pressure"] = { 
  124. 			dot = {false, false}, 
  125. 			ring = {true, true}, 
  126. 			ring_split = {false, false}, 
  127. 			cross = {false, false}, 
  128. 			cross_size = nil, 
  129. 			cross_orientation = nil, 
  130. 			spread = false, 
  131. 			spread_style = "default", 
  132. 			sniper = false, 
  133. 			pressure = true, 
  134. 		} 
  135. 	}, 
  136. 	categories = { 
  137. 		["WPNCAT_MELEE"] = "none", 
  138. 		["WPNCAT_PISTOL"] = "pistol", 
  139. 		["WPNCAT_SHOTGUN"] = "shotgun", 
  140. 		["WPNCAT_SUB_MACHINE_GUN"] = "sub_rifle", 
  141. 		["WPNCAT_RIFLE"] = "rifle", 
  142. 		["WPNCAT_SPECIAL"] = "shotgun", 
  143. 		["WPNCAT_THROWN"] = "thrown", 
  144. 		["WPNCAT_HAVOK"] = "thrown", 
  145. 	}, 
  146. 	wpn_names = { 
  147. 		["stun_gun"] = "pistol", 
  148. 		["Holt_55"] = "holt_55", 
  149. 		["pepper_spray"] = "shotgun", 
  150. 		["fireext"] = "shotgun", 
  151. 		["minigun"] = "shotgun", 
  152. 		["rpg_annihilator"] = "rpg_annihilator", 
  153. 		["rpg_launcher"] = "rpg", 
  154. 		["mcmanus2010"] = "sniper", 
  155. 		["bean_bag_gun"] = "pistol", 
  156. 		["truck_2dr_septic01_Rear"] = "pressure", 
  157. 		["truck_2dr_septic01_Front"] = "pressure", 
  158. 		["truck_2dr_fire01"] = "pressure", 
  159. 		["sp_novelty01"] = "pressure", 
  160. 	}, 
  161. 	elements = { 
  162. 		reticule_h = -1, 
  163. 		dot_h = -1, 
  164. 		cross_h = -1, 
  165. 		cross_n_h = -1, 
  166. 		cross_e_h = -1, 
  167. 		cross_s_h = -1, 
  168. 		cross_w_h = -1, 
  169. 		ring_small_h = -1, 
  170. 		ring_large_h = -1, 
  171. 		ring_mask_nw_h = -1, 
  172. 		ring_mask_ne_h = -1, 
  173. 		ring_mask_sw_h = -1, 
  174. 		ring_mask_se_h = -1, 
  175. 		ring_split_h = -1, 
  176. 		sniper_h = -1, 
  177. 		sniper_cross_w_h = -1, 
  178. 		sniper_cross_s_h = -1, 
  179. 		sniper_cross_e_h = -1, 
  180. 		sniper_dir_grp_h = -1, 
  181. 		sniper_dir_bmp_h = -1, 
  182. 		friendly_h = -1, 
  183. 		pressure_grp_h = -1, 
  184. 		pressure_fill_h = -1, 
  185. 	}, 
  186. 	status = { 
  187. 		wpn_name = -1, 
  188. 		config = -1, 
  189. 		highlight = -1, 
  190. 		wpn_spread = -1, 
  191. 		fine_aim = -1, 
  192. 		y_screen_coord = -1, 
  193. 	},  
  194. 	spread_style = { 
  195. 		["default"] = { 
  196. 			cross_mag_min = 4, 
  197. 			cross_mag_max = 19, 
  198. 			cross_mag_fineaim_min = -1, 
  199. 			cross_mag_fineaim_max = 16, 
  200. 			ring_alpha = .3,  
  201. 			ring_alpha_highlight = .5, 
  202. 			ring_small_min = 1, 
  203. 			ring_small_max = 2.3, 
  204. 			ring_small_fineaim_min = .85, 
  205. 			ring_small_fineaim_max = 1.8, 
  206. 			ring_large_min = 0.45, 
  207. 			ring_large_max = 1, 
  208. 			ring_large_fineaim_min = .27, 
  209. 			ring_large_fineaim_max = 0.78, 
  210. 			ring_mask_min = 0, 
  211. 			ring_mask_max = 20, 
  212. 			ring_mask_fineaim_min = 0, 
  213. 			ring_mask_fineaim_max = 20, 
  214. 		}, 
  215. 		["smg"] = { 
  216. 			cross_mag_min = 1, 
  217. 			cross_mag_max = 19, 
  218. 			cross_mag_fineaim_min = -1, 
  219. 			cross_mag_fineaim_max = 16, 
  220. 			ring_alpha = .3,  
  221. 			ring_alpha_highlight = .5, 
  222. 			ring_small_min = 1, 
  223. 			ring_small_max = 2.3, 
  224. 			ring_small_fineaim_min = .85, 
  225. 			ring_small_fineaim_max = 1.8, 
  226. 			ring_large_min = 0.45, 
  227. 			ring_large_max = 1, 
  228. 			ring_large_fineaim_min = .27, 
  229. 			ring_large_fineaim_max = 0.78, 
  230. 			ring_mask_min = 0, 
  231. 			ring_mask_max = 20, 
  232. 			ring_mask_fineaim_min = 0, 
  233. 			ring_mask_fineaim_max = 20, 
  234. 		}, 
  235. 		["sniper"] = { 
  236. 			cross_mag_min = 15, 
  237. 			cross_mag_max = 25, 
  238. 			cross_mag_fineaim_min =  15, 
  239. 			cross_mag_fineaim_max =  25, 
  240. 			ring_alpha = .3,  
  241. 			ring_alpha_highlight = .5, 
  242. 			ring_small_min = 1, 
  243. 			ring_small_max = 2.3, 
  244. 			ring_small_fineaim_min = .85, 
  245. 			ring_small_fineaim_max = 1.8, 
  246. 			ring_large_min = 0.45, 
  247. 			ring_large_max = 1, 
  248. 			ring_large_fineaim_min = .27, 
  249. 			ring_large_fineaim_max = 0.78, 
  250. 			ring_mask_min = 0, 
  251. 			ring_mask_max = 20, 
  252. 			ring_mask_fineaim_min = 0, 
  253. 			ring_mask_fineaim_max = 20, 
  254. 		} 
  255. 	}, 
  256. 	pressure = { 
  257. 		cur_value = -1, 
  258. 		start_angle = 3.147, 
  259. 		end_angle = 0 
  260. 	} 
  261. } 
  262.  
  263. Hud_sniper_arrows = {} 
  264.  
  265.  
  266. function hud_reticules_init() 
  267. 	--Reticules 
  268. 	local h = vint_object_find("reticules") 
  269. 	 
  270. 	Hud_reticules.elements.reticule_h = h 
  271. 	Hud_reticules.elements.dot_h = vint_object_find("dot", h) 
  272. 	Hud_reticules.elements.ring_small_h = vint_object_find("ring_small", h) 
  273. 	Hud_reticules.elements.ring_large_h = vint_object_find("ring_large", h) 
  274. 	Hud_reticules.elements.ring_split_h = vint_object_find("ring_split", h) 
  275. 	Hud_reticules.elements.ring_mask_nw_h  = vint_object_find("mask_nw", h) 
  276. 	Hud_reticules.elements.ring_mask_ne_h  = vint_object_find("mask_ne", h) 
  277. 	Hud_reticules.elements.ring_mask_sw_h  = vint_object_find("mask_sw", h) 
  278. 	Hud_reticules.elements.ring_mask_se_h  = vint_object_find("mask_se", h) 
  279. 	Hud_reticules.elements.cross_h = vint_object_find("cross", h) 
  280. 	Hud_reticules.elements.friendly_h = vint_object_find("friendly", h) 
  281. 	 
  282. 	--pressure group 
  283. 	Hud_reticules.elements.pressure_grp_h =  vint_object_find("pressure_grp", h) 
  284. 	Hud_reticules.elements.pressure_fill_h =  vint_object_find("pressure_fill", h) 
  285. 	 
  286. 	h = Hud_reticules.elements.cross_h  
  287. 	Hud_reticules.elements.cross_n_h = vint_object_find("n", h) 
  288. 	Hud_reticules.elements.cross_e_h = vint_object_find("e", h) 
  289. 	Hud_reticules.elements.cross_s_h = vint_object_find("s", h) 
  290. 	Hud_reticules.elements.cross_w_h = vint_object_find("w", h) 
  291. 	 
  292. 	Hud_reticules.elements.sniper_h = vint_object_find("sniper") 
  293. 	Hud_reticules.elements.sniper_dir_grp_h = vint_object_find("sniper_dir_grp") 
  294. 	Hud_reticules.elements.sniper_dir_bmp_h = vint_object_find("sniper_dir_bmp") 
  295. 	 
  296. 	h = Hud_reticules.elements.sniper_h  
  297. 	Hud_reticules.elements.sniper_cross_w_h = vint_object_find("cross_w", h) 
  298. 	Hud_reticules.elements.sniper_cross_s_h = vint_object_find("cross_s", h) 
  299. 	Hud_reticules.elements.sniper_cross_e_h = vint_object_find("cross_e", h) 
  300. 	 
  301. 	--Data subscriptions	 
  302. 	 
  303. 	--Sniper Directional Indicators 
  304. 	vint_datagroup_add_subscription("sniper_dir_arrows", "update", "hud_sniper_dir_update") 
  305. 	vint_datagroup_add_subscription("sniper_dir_arrows", "insert", "hud_sniper_dir_add") 
  306. 	vint_datagroup_add_subscription("sniper_dir_arrows", "remove", "hud_sniper_dir_remove") 
  307. 	 
  308. 	--Hit Indicators 
  309. 	vint_datagroup_add_subscription("sr2_local_player_hit_indicator", "insert", "Hud_hit_add") 
  310. end 
  311.  
  312. --#################################################################### 
  313. --Reticules 
  314. --#################################################################### 
  315. function Hud_reticule_update(wpn_name, wpn_category, reticule_highlight)  
  316. 	 
  317. 	local reticule_layout_type = "none" 
  318. 	 
  319. 	if wpn_name == nil then 
  320. 		--Use default layout type  
  321. 	else 
  322. 		--Check weapon name first 
  323. 		reticule_layout_type = Hud_reticules.wpn_names[wpn_name] 
  324. 	 
  325. 		--If we didn't find a match then use default category 
  326. 		if reticule_layout_type == nil then 
  327. 			reticule_layout_type = Hud_reticules.categories[wpn_category] 
  328. 		end 
  329. 	end 
  330.  
  331. 	local reticule_layout = Hud_reticules.configs[reticule_layout_type] 
  332. 	local spread_style = Hud_reticules.spread_style[Hud_reticules.configs[reticule_layout_type].spread_style] 
  333. 	 
  334. 	--Error Check 
  335.  	if reticule_layout == nil then 
  336. 		return 
  337. 	end 
  338.  
  339. 	--Process reticule highlighting 
  340. 	if reticule_highlight == "friendly" then 
  341.  
  342. 		--Tint Sniper reticules for friendly 
  343. 		vint_set_property(Hud_reticules.elements.sniper_cross_w_h, "tint", .164, .63, .18) 
  344. 		vint_set_property(Hud_reticules.elements.sniper_cross_s_h, "tint", .164, .63, .18) 
  345. 		vint_set_property(Hud_reticules.elements.sniper_cross_e_h, "tint", .164, .63, .18) 
  346. 		 
  347. 	elseif reticule_highlight == "enemy" then 
  348. 		 
  349. 		local r_0 = .89 
  350. 		if reticule_layout.dot[2] == true then 
  351. 			vint_set_property(Hud_reticules.elements.dot_h, "tint", r_0, 0, 0) 
  352. 		else 
  353. 			vint_set_property(Hud_reticules.elements.dot_h, "tint", 1, 1, 1) 
  354. 		end 
  355. 		 
  356. 		if reticule_layout.ring[2] == true then 
  357. 			vint_set_property(Hud_reticules.elements.ring_small_h, "tint", r_0, 0, 0) 
  358. 			vint_set_property(Hud_reticules.elements.ring_large_h, "tint", r_0, 0, 0) 
  359. 			 
  360. 			vint_set_property(Hud_reticules.elements.ring_small_h, "alpha", spread_style.ring_alpha_highlight) 
  361. 			vint_set_property(Hud_reticules.elements.ring_large_h, "alpha", spread_style.ring_alpha_highlight) 
  362. 			 
  363. 		else 
  364. 			vint_set_property(Hud_reticules.elements.ring_small_h, "tint", 1, 1, 1) 
  365. 			vint_set_property(Hud_reticules.elements.ring_large_h, "tint", 1, 1, 1) 
  366. 			 
  367. 			vint_set_property(Hud_reticules.elements.ring_small_h, "alpha", spread_style.ring_alpha) 
  368. 			vint_set_property(Hud_reticules.elements.ring_large_h, "alpha", spread_style.ring_alpha) 
  369. 			 
  370. 		end 
  371. 				 
  372. 		if reticule_layout.ring_split[2] == true then 
  373. 			vint_set_property(Hud_reticules.elements.ring_split_h, "tint", r_0, 0, 0) 
  374. 		else 
  375. 			vint_set_property(Hud_reticules.elements.ring_split_h, "tint", 1, 1, 1) 
  376. 		end 
  377. 		 
  378. 		if reticule_layout.cross[2] == true then 
  379. 			vint_set_property(Hud_reticules.elements.cross_h, "tint", r_0, 0, 0) 
  380. 		else 
  381. 			vint_set_property(Hud_reticules.elements.cross_h, "tint", 1, 1, 1) 
  382. 		end 
  383. 		 
  384. 		--Tint Sniper reticules for Enemy 
  385. 		vint_set_property(Hud_reticules.elements.sniper_cross_w_h, "tint", r_0, 0, 0) 
  386. 		vint_set_property(Hud_reticules.elements.sniper_cross_s_h, "tint", r_0, 0, 0) 
  387. 		vint_set_property(Hud_reticules.elements.sniper_cross_e_h, "tint", r_0, 0, 0) 
  388. 		 
  389. 	elseif reticule_highlight == "none" then 
  390. 	 
  391. 		vint_set_property(Hud_reticules.elements.dot_h, "tint", 1, 1, 1) 
  392. 		vint_set_property(Hud_reticules.elements.ring_small_h, "tint", 1, 1, 1) 
  393. 		vint_set_property(Hud_reticules.elements.ring_large_h, "tint", 1, 1, 1) 
  394. 		vint_set_property(Hud_reticules.elements.ring_split_h, "tint", 1, 1, 1) 
  395. 		vint_set_property(Hud_reticules.elements.cross_h, "tint", 1, 1, 1) 
  396. 		 
  397. 		--Tint Sniper reticules 
  398. 		vint_set_property(Hud_reticules.elements.sniper_cross_w_h, "tint", .25, .25, .25) 
  399. 		vint_set_property(Hud_reticules.elements.sniper_cross_s_h, "tint", .25, .25, .25) 
  400. 		vint_set_property(Hud_reticules.elements.sniper_cross_e_h, "tint", .25, .25, .25) 
  401. 	end	 
  402. 	 
  403. 	--Toggle between friendly reticule and standard reticule parts 
  404. 	if reticule_highlight == "friendly" and reticule_layout_type ~= "none" then 
  405. 		--Display friendly reticule and hide other parts 
  406. 		vint_set_property(Hud_reticules.elements.friendly_h, "visible", true)  
  407. 		vint_set_property(Hud_reticules.elements.dot_h, "visible", false) 
  408. 		vint_set_property(Hud_reticules.elements.ring_small_h, "visible",false) 
  409. 		vint_set_property(Hud_reticules.elements.ring_large_h, "visible", false) 
  410. 		vint_set_property(Hud_reticules.elements.ring_split_h, "visible", false) 
  411. 		vint_set_property(Hud_reticules.elements.cross_h, "visible", false) 
  412. 	 
  413. 	else 
  414. 		--Hide friendly reticule and display the proper parts 
  415. 		vint_set_property(Hud_reticules.elements.friendly_h, "visible", false) 	 
  416. 		vint_set_property(Hud_reticules.elements.dot_h, "visible", reticule_layout.dot[1]) 
  417. 		vint_set_property(Hud_reticules.elements.ring_small_h, "visible", reticule_layout.ring[1]) 
  418. 		vint_set_property(Hud_reticules.elements.ring_large_h, "visible", reticule_layout.ring[1]) 
  419. 		vint_set_property(Hud_reticules.elements.ring_split_h, "visible", reticule_layout.ring_split[1]) 
  420. 		vint_set_property(Hud_reticules.elements.cross_h, "visible", reticule_layout.cross[1]) 
  421.  
  422. 		--Cross Size 
  423. 		if reticule_layout.cross_size == "large" then 
  424. 			--Set all bitmaps to the large size 
  425. 			vint_set_property(Hud_reticules.elements.cross_n_h, "image", "ui_hud_reticule_cross_large") 
  426. 			vint_set_property(Hud_reticules.elements.cross_e_h, "image", "ui_hud_reticule_cross_large") 
  427. 			vint_set_property(Hud_reticules.elements.cross_s_h, "image", "ui_hud_reticule_cross_large") 
  428. 			vint_set_property(Hud_reticules.elements.cross_w_h, "image", "ui_hud_reticule_cross_large") 
  429. 			vint_set_property(Hud_reticules.elements.cross_n_h, "offset", -8, -24) 
  430. 			vint_set_property(Hud_reticules.elements.cross_e_h, "offset", -8, -24) 
  431. 			vint_set_property(Hud_reticules.elements.cross_s_h, "offset", -8, -24) 
  432. 			vint_set_property(Hud_reticules.elements.cross_w_h, "offset", -8, -24) 
  433. 			 
  434. 		elseif reticule_layout.cross_size == "small" then 
  435. 			--Set all bitmaps to small size 
  436. 			vint_set_property(Hud_reticules.elements.cross_n_h, "image", "ui_hud_reticule_cross_small") 
  437. 			vint_set_property(Hud_reticules.elements.cross_e_h, "image", "ui_hud_reticule_cross_small") 
  438. 			vint_set_property(Hud_reticules.elements.cross_s_h, "image", "ui_hud_reticule_cross_small") 
  439. 			vint_set_property(Hud_reticules.elements.cross_w_h, "image", "ui_hud_reticule_cross_small") 
  440. 			vint_set_property(Hud_reticules.elements.cross_n_h, "offset", -8, -19) 
  441. 			vint_set_property(Hud_reticules.elements.cross_e_h, "offset", -8, -19) 
  442. 			vint_set_property(Hud_reticules.elements.cross_s_h, "offset", -8, -19) 
  443. 			vint_set_property(Hud_reticules.elements.cross_w_h, "offset", -8, -19) 
  444. 		end                                                         
  445. 		 
  446. 		--Cross Orientation 
  447. 		if reticule_layout.cross_orientation == 0 then 
  448. 			--Standard Orientation 
  449. 			vint_set_property(Hud_reticules.elements.cross_h, "rotation", 0) 
  450. 		elseif reticule_layout.cross_orientation == 1 then 
  451. 			--45 Degree Rotation 
  452. 			vint_set_property(Hud_reticules.elements.cross_h, "rotation", 0.785398163) 
  453. 		end 
  454. 		 
  455. 	end 
  456.  
  457. 	 
  458. 	--Show pressure gauge? 
  459. 	if reticule_layout.pressure == true then 
  460. 		vint_set_property(Hud_reticules.elements.pressure_grp_h, "visible", true) 
  461. 	else 
  462. 		vint_set_property(Hud_reticules.elements.pressure_grp_h, "visible", false) 
  463. 	end 
  464. 	 
  465. 	--Store reticule status to internal data sets 
  466. 	Hud_reticules.status.wpn_name = wpn_name 
  467. 	Hud_reticules.status.highlight = reticule_highlight 
  468. 	Hud_reticules.status.config = reticule_layout_type 
  469. end 
  470.  
  471. function hud_reticule_spread_update(wpn_spread, show_spread) 
  472.  
  473. 	--debug_print("vint", "show_spread" .. var_to_string(show_spread) .. "\n") 
  474. 	 
  475. 	local fine_aim = Hud_weapon_status.fine_aim_transition 
  476. 	local spread_style = Hud_reticules.spread_style[Hud_reticules.configs[Hud_reticules.status.config].spread_style] 
  477. 	 
  478. 	if spread_style == nil then 
  479. 		--debug_print("vint", "Spread Style \"" .. Hud_reticules.configs[Hud_reticules.status.config].spread_style .. "\" not found in Hud_reticules.spread_style\n") 
  480. 		spread_style = Hud_reticules.spread_style["default"] 
  481. 	end 
  482. 	 
  483. 	--debug_print("vint", "spread_style" .. Hud_reticules.configs[Hud_reticules.status.config].spread_style ..  "\n") 
  484. 	 
  485. 	--Spread for to calculate crosshairs 
  486. 	local pixel_spread 
  487. 	 
  488. 	local cross_mag_min = spread_style.cross_mag_min 
  489. 	local cross_mag_max = spread_style.cross_mag_max 
  490. 	 
  491. 	cross_mag_min = cross_mag_min - ((cross_mag_min - spread_style.cross_mag_fineaim_min) * fine_aim) 
  492. 	cross_mag_max = cross_mag_max - ((cross_mag_max - spread_style.cross_mag_fineaim_max) * fine_aim) 
  493. 	 
  494. 	--debug_print("vint", "fine_aim: " .. fine_aim .. "\n") 
  495. 	--debug_print("vint", "cross_mag_min: " .. cross_mag_min .. "\n") 
  496. 	--debug_print("vint", "cross_mag_max: " .. cross_mag_max .. "\n") 
  497. 	 
  498. 	if show_spread == true then 
  499. 		pixel_spread = wpn_spread * cross_mag_max + cross_mag_min 
  500. 	else 
  501. 		pixel_spread = cross_mag_min 
  502. 	end 
  503. 	 
  504. 	vint_set_property(Hud_reticules.elements.cross_n_h, "anchor", 0, -pixel_spread) 
  505. 	vint_set_property(Hud_reticules.elements.cross_e_h, "anchor", pixel_spread, 0) 
  506. 	vint_set_property(Hud_reticules.elements.cross_s_h, "anchor", 0, pixel_spread) 
  507. 	vint_set_property(Hud_reticules.elements.cross_w_h, "anchor", -pixel_spread, 0) 
  508. 	 
  509. 	--If the reticule is highlighted over an enemy then the ring alpha is stronger 
  510. 	local ring_alpha = 0 
  511. 	if Hud_reticules.status.highlight == "enemy" then 
  512. 		ring_alpha = spread_style.ring_alpha_highlight 
  513. 	else 
  514. 		ring_alpha = spread_style.ring_alpha 
  515. 	end 
  516.  
  517. 	local ring_small_min = spread_style.ring_small_min  
  518. 	local ring_small_max = spread_style.ring_small_max 
  519. 	local ring_large_min = spread_style.ring_large_min 
  520. 	local ring_large_max = spread_style.ring_large_max 
  521. 	local ring_mask_min = spread_style.ring_mask_min 
  522. 	local ring_mask_max = spread_style.ring_mask_max 
  523. 	 
  524. 	local ring_small_min = spread_style.ring_small_min  
  525. 	local ring_small_max = spread_style.ring_small_max 
  526. 	local ring_large_min = spread_style.ring_large_min 
  527. 	local ring_large_max = spread_style.ring_large_max 
  528. 	local ring_mask_min = spread_style.ring_mask_min 
  529. 	local ring_mask_max = spread_style.ring_mask_max 
  530. 	 
  531. 	--Fine aim calculations 
  532. 	ring_small_min = ring_small_min  - ((ring_small_min 	- spread_style.ring_small_fineaim_min) * fine_aim) 
  533. 	ring_small_max = ring_small_max  - ((ring_small_max 	- spread_style.ring_small_fineaim_max) * fine_aim) 
  534. 	ring_large_min = ring_large_min  - ((ring_large_min 	- spread_style.ring_large_fineaim_min) * fine_aim) 
  535. 	ring_large_max = ring_large_max  - ((ring_large_max 	- spread_style.ring_large_fineaim_max) * fine_aim) 
  536. 	ring_mask_min 	= ring_mask_min 	- ((ring_mask_min 	- spread_style.ring_mask_fineaim_min ) * fine_aim) 
  537. 	ring_mask_max 	= ring_mask_max  	- ((ring_mask_max 	- spread_style.ring_mask_fineaim_max ) * fine_aim) 
  538. 	                                                       
  539. 	local ring_small_scale, ring_small_alpha, ring_large_scale, ring_large_alpha, ring_mask_offset 
  540. 	 
  541. 	if show_spread == true then 
  542. 		ring_small_scale = ring_small_min + wpn_spread * (ring_small_max - ring_small_min) 
  543. 		ring_small_alpha = ring_alpha - (wpn_spread * 1.5) * ring_alpha 
  544. 	 
  545. 		if ring_small_alpha < 0 then 
  546. 			ring_small_alpha = 0 
  547. 		end 
  548.  
  549. 		ring_large_scale = ring_large_min + wpn_spread * (ring_large_max - ring_large_min) 
  550. 		ring_large_alpha = (wpn_spread * 1.5) * ring_alpha 
  551. 		 
  552. 		if ring_large_alpha > ring_alpha then 
  553. 			ring_large_alpha = ring_alpha 
  554. 		end 
  555. 		 
  556. 		ring_mask_offset = ring_mask_min + wpn_spread * (ring_mask_max - ring_mask_min) 
  557. 		 
  558. 	else 
  559. 		--No Spread 
  560. 		ring_small_scale = ring_small_min 
  561. 		ring_small_alpha = ring_alpha 
  562. 		ring_large_scale = ring_large_min 
  563. 		ring_large_alpha = 0 
  564. 		ring_mask_offset = 0  
  565. 	end 
  566. 	 
  567. 	--Ring Cropping		 
  568. 	vint_set_property(Hud_reticules.elements.ring_mask_nw_h, "anchor", -ring_mask_offset, -ring_mask_offset) 
  569. 	vint_set_property(Hud_reticules.elements.ring_mask_ne_h, "anchor", ring_mask_offset, -ring_mask_offset) 
  570. 	vint_set_property(Hud_reticules.elements.ring_mask_sw_h, "anchor", -ring_mask_offset, ring_mask_offset) 
  571. 	vint_set_property(Hud_reticules.elements.ring_mask_se_h, "anchor", ring_mask_offset, ring_mask_offset)		 
  572. 	 
  573. 	--Ring Scaling 
  574. 	vint_set_property(Hud_reticules.elements.ring_small_h, "scale", ring_small_scale, ring_small_scale) 
  575. 	vint_set_property(Hud_reticules.elements.ring_small_h, "alpha", ring_small_alpha) 
  576. 	vint_set_property(Hud_reticules.elements.ring_large_h, "scale", ring_large_scale, ring_large_scale) 
  577. 	vint_set_property(Hud_reticules.elements.ring_large_h, "alpha", ring_large_alpha) 
  578. 	 
  579. 	--Dim for fine aim 
  580. 	--No more dimming because the vignette has been altered 
  581. --	local fine_aim_alpha =  fine_aim * .2 + .3 
  582. --	vint_set_property(Hud_vignettes.fine_aim_dim.grp_h, "alpha", fine_aim_alpha) 
  583. 	 
  584. 	Hud_reticules.status.fine_aim = fine_aim 
  585. end 
  586.  
  587. --#####################################################################  
  588. --Sniper Directional Indicators 
  589. --##################################################################### 
  590. function hud_sniper_dir_update(di_h) 
  591. 	local rotation = vint_dataitem_get(di_h) 
  592. 	 
  593. 	--Find the arrow to update 
  594. 	for index, value in Hud_sniper_arrows do 
  595. 		if index == di_h then 
  596. 			--Found now update the rotation 
  597. 			vint_set_property(value.arrow_h, "rotation", rotation) 
  598. 			break 
  599. 		end 
  600. 	end 
  601. end 
  602.  
  603. function hud_sniper_dir_add(di_h) 
  604. 	 
  605. 	--TODO: look through the table to make sure we don't have one already 
  606. 	--Clone bitmap 
  607. 	local arrow_clone_h = vint_object_clone(Hud_reticules.elements.sniper_dir_bmp_h) 
  608. 	 
  609. 	vint_set_property(arrow_clone_h, "visible", true) 
  610. 	 
  611. 	--Add handle to data object 
  612. 	Hud_sniper_arrows[di_h] = { 
  613. 		arrow_h = arrow_clone_h 
  614. 	} 
  615. 	 
  616. 	--update the sniper arrow 
  617. 	hud_sniper_dir_update(di_h) 
  618. end 
  619.  
  620. function hud_sniper_dir_remove(di_h) 
  621. 	--Find the arrow to remove 
  622. 	for index, value in Hud_sniper_arrows do 
  623. 		if index == di_h then 
  624. 			vint_object_destroy(value.arrow_h) 
  625. 			Hud_sniper_arrows[index] = nil 
  626. 			break 
  627. 		end 
  628. 	end 
  629. end 
  630.  
  631. function hud_reticule_update_pressure(pressure_value) 
  632. 	if pressure_value == nil then 
  633. 		return 
  634. 	end 
  635. 	--invert value 
  636. 	pressure_value = 1 - pressure_value 
  637. 	--TODO: Update pressure 
  638. 	if pressure_value ~= Hud_reticules.pressure.cur_value then 
  639. 		--calculate angle and set property 
  640. 		local angle = Hud_reticules.pressure.start_angle * pressure_value 
  641. 		vint_set_property(Hud_reticules.elements.pressure_fill_h, "start_angle", angle) 
  642. 		Hud_reticules.pressure.cur_value = pressure_value 
  643. 	end 
  644. end 
  645.  
  646. function hud_reticule_change_position(y_screen_coord) 
  647. 	--Change the y screen anchor of the reticule 
  648. 	if Hud_reticules.status.y_screen_coord ~= y_screen_coord then 
  649. 		local x, y = vint_get_property(Hud_reticules.elements.reticule_h, "anchor") 
  650. 		vint_set_property(Hud_reticules.elements.reticule_h, "anchor", x, y_screen_coord) 
  651. 		hud_cruise_control_update_pos(y_screen_coord) 
  652. 		hud_hits_updates_pos(y_screen_coord) 
  653. 		Hud_reticules.status.y_screen_coord = y_screen_coord  
  654. 	end 
  655. end