MerchantUi2.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace SoftKitty.InventoryEngine
  6. {
  7. public class MerchantUi2 : UiWindow
  8. {
  9. #region Variables
  10. public RectTransform HoverInfoAnchorPlayer;
  11. public RectTransform HoverInfoAnchorMerchant;
  12. public RawImage MerchantAvatar;
  13. public InventoryItem PlayerItemPrefab;
  14. public InventoryItem MerchantItemPrefab;
  15. public InventoryItem [] PlayerTradeItems;
  16. public InventoryItem [] MerchantTradeItems;
  17. public InventoryHolder PlayerTradeHolder;
  18. public InventoryHolder NpcTradeHolder;
  19. public CurrenyInfo PlayerCurrencyPrefab;
  20. public CurrenyInfo MerchantCurrencyPrefab;
  21. public CurrenyInfo PlayerTradeCurrencyPrefab;
  22. public CurrenyInfo MerchantTradeCurrencyPrefab;
  23. public InputField SearchInput;
  24. public GameObject ClearFilterButton;
  25. public GameObject FavActiveIcon;
  26. public Text MerchantNameText;
  27. public Text SubtitleText;
  28. private InventoryItem[] playerItems;
  29. private InventoryItem[] merchantItems;
  30. private InventoryHolder playerHolder;
  31. private InventoryHolder merchantHolder;
  32. public Button TradeButton;
  33. private bool filterFav = false;
  34. private bool inited = false;
  35. private InventorySnapShot playerSnapshot;
  36. private InventorySnapShot merchantSnapshot;
  37. private List<CurrenyInfo> playerCurrencyItems = new List<CurrenyInfo>();
  38. private List<CurrenyInfo> merchantCurrencyItems = new List<CurrenyInfo>();
  39. private List<CurrenyInfo> playerTradeCurrencyItems = new List<CurrenyInfo>();
  40. private List<CurrenyInfo> merchantTradeCurrencyItems = new List<CurrenyInfo>();
  41. public Image BlockImage;
  42. #endregion
  43. #region MonoBehaviour
  44. void Start()
  45. {
  46. FavActiveIcon.GetComponent<Image>().color = InventorySkin.instance.FavoriteColor;
  47. }
  48. public override void Update()
  49. {
  50. if (!inited) return;
  51. base.Update();
  52. FilterItems();
  53. CheckBlock();
  54. }
  55. #endregion
  56. public void SetMerchantAvatar(Texture _avatar) //Set the avatar image of the merchant to display on the top right of the window
  57. {
  58. MerchantAvatar.texture = _avatar;
  59. }
  60. public override void Initialize(InventoryHolder _playerHolder, InventoryHolder _merchantHolder, string _merchantName = "Merchant")//Initialize this interface
  61. {
  62. playerHolder = _playerHolder;
  63. merchantHolder = _merchantHolder;
  64. MerchantNameText.text = _merchantName;
  65. SubtitleText.text = " " + _merchantName.ToUpper();
  66. PlayerItemPrefab.Outline.color = InventorySkin.instance.ItemSelectedColor;
  67. PlayerItemPrefab.Hover.color = InventorySkin.instance.ItemHoverColor;
  68. PlayerItemPrefab.Fav.GetComponent<Image>().color = InventorySkin.instance.FavoriteColor;
  69. MerchantItemPrefab.Outline.color = InventorySkin.instance.ItemSelectedColor;
  70. MerchantItemPrefab.Hover.color = InventorySkin.instance.ItemHoverColor;
  71. MerchantItemPrefab.Fav.GetComponent<Image>().color = InventorySkin.instance.FavoriteColor;
  72. playerHolder.RegisterItemChangeCallback(OnItemChange);
  73. merchantHolder.RegisterItemChangeCallback(OnItemChange);
  74. PlayerTradeHolder.RegisterItemChangeCallback(OnItemChange);
  75. NpcTradeHolder.RegisterItemChangeCallback(OnItemChange);
  76. PlayerTradeHolder.RefreshItemData();
  77. NpcTradeHolder.RefreshItemData();
  78. ShowList();
  79. for (int i = 0; i < playerHolder.Currency.Count; i++)
  80. {
  81. GameObject _newItem = Instantiate(PlayerCurrencyPrefab.gameObject, PlayerCurrencyPrefab.transform.parent);
  82. _newItem.transform.localScale = Vector3.one;
  83. _newItem.SetActive(true);
  84. _newItem.GetComponent<CurrenyInfo>().AutoCalculateChanges = false;
  85. _newItem.GetComponent<CurrenyInfo>().Initialize(i, playerHolder);
  86. playerCurrencyItems.Add(_newItem.GetComponent<CurrenyInfo>());
  87. }
  88. for (int i = 0; i < merchantHolder.Currency.Count; i++)
  89. {
  90. GameObject _newItem = Instantiate(MerchantCurrencyPrefab.gameObject, MerchantCurrencyPrefab.transform.parent);
  91. _newItem.transform.localScale = Vector3.one;
  92. _newItem.SetActive(true);
  93. _newItem.GetComponent<CurrenyInfo>().AutoCalculateChanges = false;
  94. _newItem.GetComponent<CurrenyInfo>().Initialize(i, merchantHolder);
  95. merchantCurrencyItems.Add(_newItem.GetComponent<CurrenyInfo>());
  96. }
  97. for (int i = 0; i < PlayerTradeHolder.Currency.Count; i++)
  98. {
  99. GameObject _newItem = Instantiate(PlayerTradeCurrencyPrefab.gameObject, PlayerTradeCurrencyPrefab.transform.parent);
  100. _newItem.transform.localScale = Vector3.one;
  101. _newItem.SetActive(true);
  102. _newItem.GetComponent<CurrenyInfo>().AutoCalculateChanges = false;
  103. _newItem.GetComponent<CurrenyInfo>().Initialize(i, PlayerTradeHolder);
  104. playerTradeCurrencyItems.Add(_newItem.GetComponent<CurrenyInfo>());
  105. }
  106. for (int i = 0; i < NpcTradeHolder.Currency.Count; i++)
  107. {
  108. GameObject _newItem = Instantiate(MerchantTradeCurrencyPrefab.gameObject, MerchantTradeCurrencyPrefab.transform.parent);
  109. _newItem.transform.localScale = Vector3.one;
  110. _newItem.SetActive(true);
  111. _newItem.GetComponent<CurrenyInfo>().AutoCalculateChanges = false;
  112. _newItem.GetComponent<CurrenyInfo>().Initialize(i, NpcTradeHolder);
  113. merchantTradeCurrencyItems.Add(_newItem.GetComponent<CurrenyInfo>());
  114. }
  115. playerSnapshot = playerHolder.GetSnapShot();
  116. merchantSnapshot = merchantHolder.GetSnapShot();
  117. playerHolder.AutoSave = false;
  118. merchantHolder.BlockAutoSave = true;
  119. playerHolder.BlockAutoSave = true;
  120. inited = true;
  121. }
  122. private void ShowList()//Show item list for both side
  123. {
  124. playerItems = new InventoryItem[playerHolder.Stacks.Count];
  125. for (int i = 0; i < playerHolder.Stacks.Count; i++)
  126. {
  127. GameObject _newItem = Instantiate(PlayerItemPrefab.gameObject, PlayerItemPrefab.transform.parent);
  128. _newItem.transform.localScale = Vector3.one;
  129. _newItem.GetComponent<InventoryItem>().Initialize(playerHolder.Stacks[i]);
  130. _newItem.GetComponent<InventoryItem>().SetHolder(playerHolder);
  131. _newItem.GetComponent<InventoryItem>().HoverInfoAnchorPoint = HoverInfoAnchorPlayer;
  132. _newItem.GetComponent<InventoryItem>().RegisterClickCallback(i, OnPlayerItemClick);
  133. _newItem.GetComponent<InventoryItem>().PriceMultiplier = merchantHolder.BuyPriceMultiplier;
  134. _newItem.GetComponent<InventoryItem>().LimitedByOwner = PlayerTradeHolder;
  135. _newItem.gameObject.SetActive(true);
  136. playerItems[i] = _newItem.GetComponent<InventoryItem>();
  137. }
  138. merchantItems = new InventoryItem[merchantHolder.Stacks.Count];
  139. for (int i = 0; i < merchantHolder.Stacks.Count; i++)
  140. {
  141. GameObject _newItem = Instantiate(MerchantItemPrefab.gameObject, MerchantItemPrefab.transform.parent);
  142. _newItem.transform.localScale = Vector3.one;
  143. _newItem.GetComponent<InventoryItem>().Initialize(merchantHolder.Stacks[i]);
  144. _newItem.GetComponent<InventoryItem>().SetHolder(merchantHolder);
  145. _newItem.GetComponent<InventoryItem>().HoverInfoAnchorPoint = HoverInfoAnchorMerchant;
  146. _newItem.GetComponent<InventoryItem>().RegisterClickCallback(i, OnMerchantItemClick);
  147. _newItem.GetComponent<InventoryItem>().PriceMultiplier = merchantHolder.SellPriceMultiplier;
  148. _newItem.GetComponent<InventoryItem>().RecieveUntradeable = false;
  149. _newItem.GetComponent<InventoryItem>().LimitedByOwner = NpcTradeHolder;
  150. _newItem.gameObject.SetActive(true);
  151. merchantItems[i] = _newItem.GetComponent<InventoryItem>();
  152. }
  153. for (int i = 0; i < PlayerTradeHolder.Stacks.Count; i++)
  154. {
  155. PlayerTradeItems[i].Initialize(PlayerTradeHolder.Stacks[i]);
  156. PlayerTradeItems[i].SetHolder(PlayerTradeHolder);
  157. PlayerTradeItems[i].HoverInfoAnchorPoint = HoverInfoAnchorPlayer;
  158. PlayerTradeItems[i].RegisterClickCallback(i, OnPlayerTradeItemClick);
  159. PlayerTradeItems[i].PriceMultiplier = merchantHolder.BuyPriceMultiplier;
  160. PlayerTradeItems[i].LimitedByOwner = playerHolder;
  161. PlayerTradeItems[i].RecieveUntradeable = false;
  162. PlayerTradeItems[i].Outline.color = InventorySkin.instance.ItemSelectedColor;
  163. PlayerTradeItems[i].Hover.color = InventorySkin.instance.ItemHoverColor;
  164. PlayerTradeItems[i].Fav.GetComponent<Image>().color = InventorySkin.instance.FavoriteColor;
  165. }
  166. for (int i = 0; i < NpcTradeHolder.Stacks.Count; i++)
  167. {
  168. MerchantTradeItems[i].Initialize(NpcTradeHolder.Stacks[i]);
  169. MerchantTradeItems[i].SetHolder(NpcTradeHolder);
  170. MerchantTradeItems[i].HoverInfoAnchorPoint = HoverInfoAnchorMerchant;
  171. MerchantTradeItems[i].RegisterClickCallback(i, OnMerchantTradeItemClick);
  172. MerchantTradeItems[i].PriceMultiplier = merchantHolder.SellPriceMultiplier;
  173. MerchantTradeItems[i].LimitedByOwner = merchantHolder;
  174. MerchantTradeItems[i].RecieveUntradeable = false;
  175. MerchantTradeItems[i].Outline.color = InventorySkin.instance.ItemSelectedColor;
  176. MerchantTradeItems[i].Hover.color = InventorySkin.instance.ItemHoverColor;
  177. MerchantTradeItems[i].Fav.GetComponent<Image>().color = InventorySkin.instance.FavoriteColor;
  178. }
  179. }
  180. private bool isKeyMatch(AlterKeys _key)
  181. {
  182. switch (_key)
  183. {
  184. case AlterKeys.None:
  185. return true;
  186. case AlterKeys.LeftCtrl:
  187. return InputProxy.GetKey(KeyCode.LeftControl);
  188. case AlterKeys.LeftAlt:
  189. return InputProxy.GetKey(KeyCode.LeftAlt);
  190. case AlterKeys.LeftShift:
  191. return InputProxy.GetKey(KeyCode.LeftShift);
  192. }
  193. return false;
  194. }
  195. public void OnPlayerTradeItemClick(int _index, int _button)//Callback for when player click an item in player's trading area.
  196. {
  197. if (PlayerTradeItems[_index].isTradeable() && !PlayerTradeItems[_index].isEmpty()) {
  198. foreach (var setting in ItemManager.instance.clickSettings)
  199. {
  200. if (_button == (int)setting.mouseButton && isKeyMatch(setting.key))
  201. {
  202. if (setting.function == ClickFunctions.Use)
  203. {
  204. PlayerTradeHolder.RemoveItem(PlayerTradeItems[_index].GetItemId(), 1 - playerHolder.AddItem(PlayerTradeItems[_index].GetItem(), 1).Number, _index);
  205. SoundManager.Play2D("ItemDrop");
  206. }
  207. }
  208. }
  209. }
  210. }
  211. public void OnMerchantTradeItemClick(int _index, int _button)//Callback for when player click an item in merchant's trading area.
  212. {
  213. if (MerchantTradeItems[_index].isTradeable() && !MerchantTradeItems[_index].isEmpty())
  214. {
  215. foreach (var setting in ItemManager.instance.clickSettings)
  216. {
  217. if (_button == (int)setting.mouseButton && isKeyMatch(setting.key))
  218. {
  219. if (setting.function == ClickFunctions.Use)
  220. {
  221. NpcTradeHolder.RemoveItem(MerchantTradeItems[_index].GetItemId(), 1 - merchantHolder.AddItem(MerchantTradeItems[_index].GetItem(), 1).Number, _index);
  222. SoundManager.Play2D("ItemDrop");
  223. }
  224. }
  225. }
  226. }
  227. }
  228. public void OnPlayerItemClick(int _index, int _button)//Callback for when player click an item in player's inventory.
  229. {
  230. if (playerItems[_index].isTradeable() && !playerItems[_index].isEmpty()
  231. && (merchantHolder.TradeAllItems || merchantHolder.TradeList.Contains(playerItems[_index].GetItemId()) || merchantHolder.TradeCategoryList.Contains(playerItems[_index].GetCategory()))) {
  232. foreach (var setting in ItemManager.instance.clickSettings)
  233. {
  234. if (_button == (int)setting.mouseButton && isKeyMatch(setting.key))
  235. {
  236. if (setting.function == ClickFunctions.Use)
  237. {
  238. playerHolder.RemoveItem(playerItems[_index].GetItemId(), 1 - PlayerTradeHolder.AddItem(playerItems[_index].GetItem(), 1).Number, _index);
  239. SoundManager.Play2D("ItemDrop");
  240. }
  241. else if (setting.function == ClickFunctions.MarkFavorite)
  242. {
  243. playerItems[_index].MarkFav();
  244. }
  245. }
  246. }
  247. }
  248. }
  249. public void OnMerchantItemClick(int _index, int _button)//Callback for when player click an item in merchant's inventory.
  250. {
  251. if (merchantItems[_index].isTradeable() && !merchantItems[_index].isEmpty())
  252. {
  253. foreach (var setting in ItemManager.instance.clickSettings)
  254. {
  255. if (_button == (int)setting.mouseButton && isKeyMatch(setting.key))
  256. {
  257. if (setting.function == ClickFunctions.Use)
  258. {
  259. merchantHolder.RemoveItem(merchantItems[_index].GetItemId(), 1 - NpcTradeHolder.AddItem(merchantItems[_index].GetItem(), 1).Number, _index);
  260. SoundManager.Play2D("ItemDrop");
  261. }
  262. }
  263. }
  264. }
  265. }
  266. private void OnDestroy()//UnRegisterI all callbacks
  267. {
  268. playerHolder.UnRegisterItemChangeCallback(OnItemChange);
  269. merchantHolder.UnRegisterItemChangeCallback(OnItemChange);
  270. merchantHolder.BlockAutoSave = false;
  271. playerHolder.BlockAutoSave = false;
  272. }
  273. public void OnItemChange(Dictionary<Item, int> _changedItems)//Callback for when items in player's inventory has changed.
  274. {
  275. GetCurrencyChange();
  276. }
  277. private void GetCurrencyChange()//Compare the items with the snapeshot, calculate the difference by their cost.
  278. {
  279. int[] _playerTradeValue = new int[ItemManager.instance.currencies.Count];
  280. int[] _merchantTradeValue = new int[ItemManager.instance.currencies.Count];
  281. foreach (var obj in PlayerTradeHolder.Stacks)
  282. {
  283. if (!obj.isEmpty())
  284. {
  285. _playerTradeValue[ItemManager.itemDic[obj.GetItemId()].currency] += Mathf.CeilToInt(ItemManager.itemDic[obj.GetItemId()].price * merchantHolder.BuyPriceMultiplier * obj.Number);
  286. }
  287. }
  288. foreach (var obj in NpcTradeHolder.Stacks)
  289. {
  290. if (!obj.isEmpty())
  291. {
  292. _merchantTradeValue[ItemManager.itemDic[obj.GetItemId()].currency] += Mathf.CeilToInt(ItemManager.itemDic[obj.GetItemId()].price * merchantHolder.SellPriceMultiplier * obj.Number);
  293. }
  294. }
  295. int[] _currencyChange = new int[ItemManager.instance.currencies.Count];
  296. for (int i = 0; i < _currencyChange.Length; i++)
  297. {
  298. _currencyChange[i] = _playerTradeValue[i] - _merchantTradeValue[i];
  299. }
  300. bool _lackOfCurrency = false;
  301. for (int i = 0; i < _currencyChange.Length; i++)
  302. {
  303. playerHolder.SetCurrency(i, playerSnapshot.GetCurrency(i, false) + _currencyChange[i]);
  304. merchantHolder.SetCurrency(i, merchantSnapshot.GetCurrency(i, false) - _currencyChange[i]);
  305. PlayerTradeHolder.SetCurrency(i, _playerTradeValue[i]);
  306. NpcTradeHolder.SetCurrency(i, _merchantTradeValue[i]);
  307. if (playerHolder.GetCurrency(i, true) < 0 || merchantHolder.GetCurrency(i, true) < 0) _lackOfCurrency = true;
  308. }
  309. TradeButton.interactable = !_lackOfCurrency;
  310. TradeButton.GetComponent<CanvasGroup>().alpha = _lackOfCurrency ? 0.2F : 1F;
  311. List<int> _playerCurrencyDifference = playerHolder.GetCurrencyDifference(playerSnapshot.CurrencyValue);
  312. for (int i = 0; i < playerCurrencyItems.Count; i++) playerCurrencyItems[i].SetChangeText(_playerCurrencyDifference[i]);
  313. List<int> _merchantCurrencyDifference = merchantHolder.GetCurrencyDifference(merchantSnapshot.CurrencyValue);
  314. for (int i = 0; i < merchantCurrencyItems.Count; i++) merchantCurrencyItems[i].SetChangeText(_merchantCurrencyDifference[i]);
  315. }
  316. public override void Close()//Revert to the snapshot for both side if the window is closed.
  317. {
  318. playerHolder.RevertSnapShot(playerSnapshot);
  319. merchantHolder.RevertSnapShot(merchantSnapshot);
  320. base.Close();
  321. }
  322. public void Cancel()//Revert to the snapshot for both side
  323. {
  324. SoundManager.Play2D("Sort");
  325. foreach (var obj in PlayerTradeHolder.Stacks)
  326. {
  327. obj.Delete();
  328. }
  329. foreach (var obj in NpcTradeHolder.Stacks)
  330. {
  331. obj.Delete();
  332. }
  333. for (int i = 0; i < ItemManager.instance.currencies.Count; i++)
  334. {
  335. PlayerTradeHolder.SetCurrency(i, 0);
  336. NpcTradeHolder.SetCurrency(i, 0);
  337. }
  338. playerHolder.RevertSnapShot(playerSnapshot);
  339. merchantHolder.RevertSnapShot(merchantSnapshot);
  340. foreach (var obj in playerCurrencyItems)
  341. {
  342. obj.SetChangeText(0);
  343. }
  344. foreach (var obj in merchantCurrencyItems)
  345. {
  346. obj.SetChangeText(0);
  347. }
  348. }
  349. public void Purchase()//Confirm the purchase and close the window
  350. {
  351. foreach (var obj in PlayerTradeHolder.Stacks)
  352. {
  353. if (!obj.isEmpty())
  354. {
  355. merchantHolder.AddItem(obj.Item,obj.Number);
  356. }
  357. }
  358. foreach (var obj in NpcTradeHolder.Stacks)
  359. {
  360. if (!obj.isEmpty())
  361. {
  362. playerHolder.AddItem(obj.Item, obj.Number);
  363. }
  364. }
  365. foreach (var obj in PlayerTradeHolder.Stacks)
  366. {
  367. obj.Delete();
  368. }
  369. foreach (var obj in NpcTradeHolder.Stacks)
  370. {
  371. obj.Delete();
  372. }
  373. for (int i = 0; i < ItemManager.instance.currencies.Count; i++)
  374. {
  375. PlayerTradeHolder.SetCurrency(i, 0);
  376. NpcTradeHolder.SetCurrency(i, 0);
  377. }
  378. SoundManager.Play2D("Trade");
  379. SoundManager.Play2D("DoneDeal");
  380. merchantHolder.BlockAutoSave = false;
  381. playerHolder.BlockAutoSave = false;
  382. playerHolder.Save();
  383. merchantHolder.Save();
  384. playerSnapshot = playerHolder.GetSnapShot();
  385. merchantSnapshot = merchantHolder.GetSnapShot();
  386. foreach (var obj in playerCurrencyItems)
  387. {
  388. obj.SetChangeText(0);
  389. }
  390. foreach (var obj in merchantCurrencyItems)
  391. {
  392. obj.SetChangeText(0);
  393. }
  394. }
  395. public void FilterItems()//Filter the items by their name and "isTradeable" mark
  396. {
  397. for (int i = 0; i < playerItems.Length; i++)
  398. {
  399. playerItems[i].SetVisible(playerItems[i].isNameMatch(SearchInput.text) && (!filterFav || playerItems[i].Fav.activeSelf) && playerItems[i].isTradeable(true)
  400. && (merchantHolder.TradeAllItems || merchantHolder.TradeList.Contains(playerItems[i].GetItemId()) || merchantHolder.TradeCategoryList.Contains(playerItems[i].GetCategory())));
  401. }
  402. for (int i = 0; i < merchantItems.Length; i++)
  403. {
  404. merchantItems[i].SetVisible(merchantItems[i].isNameMatch(SearchInput.text));
  405. }
  406. for (int i = 0; i < MerchantTradeItems.Length; i++)
  407. {
  408. MerchantTradeItems[i].SetVisible(MerchantTradeItems[i].isNameMatch(SearchInput.text));
  409. }
  410. for (int i = 0; i < PlayerTradeItems.Length; i++)
  411. {
  412. PlayerTradeItems[i].SetVisible(PlayerTradeItems[i].isNameMatch(SearchInput.text));
  413. }
  414. ClearFilterButton.SetActive(SearchInput.text != "");
  415. }
  416. public void ClearFilter()//Clear all filters.
  417. {
  418. SearchInput.text = "";
  419. ClearFilterButton.SetActive(false);
  420. filterFav = false;
  421. for (int i = 0; i < playerItems.Length; i++)
  422. {
  423. playerItems[i].SetVisible(true);
  424. }
  425. for (int i = 0; i < merchantItems.Length; i++)
  426. {
  427. merchantItems[i].SetVisible(true);
  428. }
  429. for (int i = 0; i < MerchantTradeItems.Length; i++)
  430. {
  431. MerchantTradeItems[i].SetVisible(true);
  432. }
  433. for (int i = 0; i < PlayerTradeItems.Length; i++)
  434. {
  435. PlayerTradeItems[i].SetVisible(true);
  436. }
  437. }
  438. public void ShowFavItems()//Only show favorite items
  439. {
  440. SoundManager.Play2D("Tab");
  441. filterFav = !filterFav;
  442. FavActiveIcon.SetActive(filterFav);
  443. FilterItems();
  444. }
  445. private void CheckBlock()//Check if the interface should be blocked.
  446. {
  447. if (NumberInput.instance != null)
  448. {
  449. BlockImage.gameObject.SetActive(true);
  450. BlockImage.color = new Color(0F, 0F, 0F, Mathf.Lerp(BlockImage.color.a, 0.94F, Time.deltaTime * 3F));
  451. }
  452. else
  453. {
  454. if (BlockImage.color.a > 0F)
  455. {
  456. BlockImage.color = new Color(0F, 0F, 0F, Mathf.MoveTowards(BlockImage.color.a, 0F, Time.deltaTime * 2F));
  457. }
  458. else
  459. {
  460. if (BlockImage.gameObject.activeSelf) BlockImage.gameObject.SetActive(false);
  461. }
  462. }
  463. }
  464. }
  465. }