Files
2026-03-04 10:03:45 +08:00

393 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ShopItem : MonoBehaviour, IPointerClickHandler, IEventSystemHandler
{
public Image itemImage;
public Text itemName;
public Text itemPrice;
public Text itemPriceOff;
public Text itemDesc;
public Button buyButton;
public Button addToBasketButton;
public Text levelText;
public Text colorText;
public Image brandLogo;
public Image ownedImage;
[Header("FishList")]
public GameObject baitTakeFishList;
public GameObject baitTakeFishListContent;
public GameObject fishListItemPrefab;
public Scrollbar fishListItemScrollBar;
[Header("Other")]
[SerializeField]
private Image isnewImage;
public ShopManager.Categories category;
public int itemID = -1;
public string sortName = "ALL";
public float itemPriceValue;
public Color overPriceColor = Color.red;
public bool isCommingSoon;
private ShopManager shopManager;
public int levelReq;
public static event Action OnUIBuyGlobal;
public static event Action OnUIAddBasketGlobal;
private void Start()
{
shopManager = UnityEngine.Object.FindObjectOfType<ShopManager>();
if (itemID == -1)
{
return;
}
if (category == ShopManager.Categories.Homepage)
{
if (itemPriceValue == 0f)
{
itemPrice.text = "FREE";
}
SetButtonsByLevelAndPrice();
return;
}
GameManager.ItemType itemType = shopManager.CastItemCategoryToType(category);
int gameItemIndexByItemId = GameManager.Instance._playerData.GetGameItemIndexByItemId(itemType, itemID);
levelReq = shopManager.GetLevelReq(itemType, gameItemIndexByItemId);
if (itemPriceValue == 0f)
{
itemPrice.text = "FREE";
}
SetButtonsByLevelAndPrice();
itemDesc.gameObject.SetActive(value: true);
baitTakeFishList.SetActive(value: false);
switch (itemType)
{
case GameManager.ItemType.Rod:
{
if (GameManager.Instance.gameRods[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = LanguageManager.Instance.GetText(GameManager.Instance.gameRods[gameItemIndexByItemId].type.ToString().ToUpper());
itemDesc.text = LanguageManager.Instance.GetText("LENGTH") + ": <b>" + GameManager.Instance.gameRods[gameItemIndexByItemId].length + "m</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("STRENGTH") + ": <b>" + GameManager.Instance.ConvertWeight(GameManager.Instance.gameRods[gameItemIndexByItemId].strength) + "</b>";
text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("CW_ROD") + ": <b>" + GameManager.Instance.gameRods[gameItemIndexByItemId].cw.x + " - " + GameManager.Instance.gameRods[gameItemIndexByItemId].cw.y + "</b>";
break;
}
case GameManager.ItemType.Reel:
{
if (GameManager.Instance.gameReels[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = LanguageManager.Instance.GetText("SIZE") + " " + GameManager.Instance.gameReels[gameItemIndexByItemId].size.ToString().ToUpper();
itemDesc.text = LanguageManager.Instance.GetText("GEAR_RATIO") + ": <b>" + GameManager.Instance.gameReels[gameItemIndexByItemId].gearRatio.x + ":" + GameManager.Instance.gameReels[gameItemIndexByItemId].gearRatio.y + "</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("STRENGTH") + ": <b>" + GameManager.Instance.ConvertWeight(GameManager.Instance.gameReels[gameItemIndexByItemId].strength) + "</b>";
break;
}
case GameManager.ItemType.Line:
{
if (GameManager.Instance.gameLines[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameLines[gameItemIndexByItemId].type.ToString().ToUpper();
itemDesc.text = LanguageManager.Instance.GetText("SIZE") + ": <b>" + GameManager.Instance.gameLines[gameItemIndexByItemId].size + "</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("STRENGTH") + ": <b>" + GameManager.Instance.ConvertWeight(GameManager.Instance.gameLines[gameItemIndexByItemId].strength) + "</b>";
break;
}
case GameManager.ItemType.Bait:
{
if (GameManager.Instance.gameBaits[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
if (GameManager.Instance.gameBaits[gameItemIndexByItemId].type == GameManager.GameBaits.Type.Natural)
{
colorText.text = LanguageManager.Instance.GetText(GameManager.Instance.gameBaits[gameItemIndexByItemId].type.ToString().ToUpper());
itemDesc.gameObject.SetActive(value: false);
baitTakeFishList.SetActive(value: true);
GameManager.TruncateContainer(baitTakeFishListContent.transform);
fishListItemScrollBar.value = 1f;
List<GameManager.GameFish> list = new List<GameManager.GameFish>();
for (int i = 0; i < GameManager.Instance.gameFish.Length; i++)
{
for (int j = 0; j < GameManager.Instance.gameFish[i].acceptFishBaits.Count; j++)
{
if (GameManager.Instance.gameFish[i].acceptFishBaits[j].baitId == GameManager.Instance.gameBaits[gameItemIndexByItemId].id)
{
list.Add(GameManager.Instance.gameFish[i]);
}
}
}
GameManager.GameFish[] array = list.OrderBy((GameManager.GameFish o) => o.GetFishName()).ToArray();
List<GameManager.GameFish> list2 = new List<GameManager.GameFish>();
if ((bool)FScriptsHandler.Instance)
{
int sceneID = FScriptsHandler.Instance.m_SceneSettings.sceneID;
for (int num = 0; num < GameManager.Instance.gameLocations.Length; num++)
{
if (GameManager.Instance.gameLocations[num].sceneID != sceneID)
{
continue;
}
for (int num2 = 0; num2 < GameManager.Instance.gameLocations[num].fishSpecies.Length; num2++)
{
for (int num3 = 0; num3 < array.Length; num3++)
{
if (array[num3].speciesName == GameManager.Instance.gameLocations[num].fishSpecies[num2])
{
list2.Add(array[num3]);
}
}
}
}
array = list2.ToArray();
}
array = array.OrderBy((GameManager.GameFish o) => o.GetFishName()).ToArray();
for (int num4 = 0; num4 < array.Length; num4++)
{
BaitFishListItem component = UnityEngine.Object.Instantiate(fishListItemPrefab, baitTakeFishListContent.transform).GetComponent<BaitFishListItem>();
component.fishName = array[num4].GetFishName();
component.fishIcon = array[num4].GetFishIcon(10f);
}
break;
}
colorText.text = GameManager.Instance.gameBaits[gameItemIndexByItemId].GetColorsListString().ToUpper();
itemDesc.gameObject.SetActive(value: false);
baitTakeFishList.SetActive(value: true);
GameManager.TruncateContainer(baitTakeFishListContent.transform);
fishListItemScrollBar.value = 1f;
List<GameManager.GameFish> list3 = new List<GameManager.GameFish>();
for (int num5 = 0; num5 < GameManager.Instance.gameFish.Length; num5++)
{
for (int num6 = 0; num6 < GameManager.Instance.gameFish[num5].acceptFishLures.Count; num6++)
{
if (GameManager.Instance.gameFish[num5].acceptFishLures[num6].baitId == GameManager.Instance.gameBaits[gameItemIndexByItemId].id)
{
list3.Add(GameManager.Instance.gameFish[num5]);
}
}
}
GameManager.GameFish[] array2 = list3.OrderBy((GameManager.GameFish o) => o.GetFishName()).ToArray();
List<GameManager.GameFish> list4 = new List<GameManager.GameFish>();
if ((bool)FScriptsHandler.Instance)
{
int sceneID2 = FScriptsHandler.Instance.m_SceneSettings.sceneID;
for (int num7 = 0; num7 < GameManager.Instance.gameLocations.Length; num7++)
{
if (GameManager.Instance.gameLocations[num7].sceneID != sceneID2)
{
continue;
}
for (int num8 = 0; num8 < GameManager.Instance.gameLocations[num7].fishSpecies.Length; num8++)
{
for (int num9 = 0; num9 < array2.Length; num9++)
{
if (array2[num9].speciesName == GameManager.Instance.gameLocations[num7].fishSpecies[num8])
{
list4.Add(array2[num9]);
}
}
}
}
array2 = list4.ToArray();
}
array2 = array2.OrderBy((GameManager.GameFish o) => o.GetFishName()).ToArray();
for (int num10 = 0; num10 < array2.Length; num10++)
{
BaitFishListItem component2 = UnityEngine.Object.Instantiate(fishListItemPrefab, baitTakeFishListContent.transform).GetComponent<BaitFishListItem>();
component2.fishName = array2[num10].GetFishName();
component2.fishIcon = array2[num10].GetFishIcon(10f);
}
break;
}
case GameManager.ItemType.Hook:
{
if (GameManager.Instance.gameHooks[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameHooks[gameItemIndexByItemId].GetSizetext();
itemDesc.text = LanguageManager.Instance.GetText("SIZE") + ": <b>" + GameManager.Instance.gameHooks[gameItemIndexByItemId].GetSizetext() + "</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("TYPE") + ": <b>" + GameManager.Instance.gameHooks[gameItemIndexByItemId].type.ToString() + "</b>";
text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("AMOUNT") + ": <b>" + GameManager.Instance.gameHooks[gameItemIndexByItemId].amount + "</b>";
break;
}
case GameManager.ItemType.Float:
if (GameManager.Instance.gameFloats[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameFloats[gameItemIndexByItemId].type.ToString().ToUpper();
itemDesc.text = LanguageManager.Instance.GetText("WEIGHT") + ": <b>" + GameManager.Instance.gameFloats[gameItemIndexByItemId].weight + "g</b>";
break;
case GameManager.ItemType.Feeder:
if (GameManager.Instance.gameFeeders[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = LanguageManager.Instance.GetText("CAPACITY") + ": <b>" + GameManager.Instance.gameFeeders[gameItemIndexByItemId].capacity + "g</b>";
itemDesc.text = LanguageManager.Instance.GetText("WEIGHT") + ": <b>" + GameManager.Instance.gameFeeders[gameItemIndexByItemId].weight + "g</b>";
break;
case GameManager.ItemType.Leader:
{
if (GameManager.Instance.gameLeaders[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameLeaders[gameItemIndexByItemId].type.ToString().ToUpper();
itemDesc.text = LanguageManager.Instance.GetText("SIZE") + ": <b>" + GameManager.Instance.gameLeaders[gameItemIndexByItemId].size + "</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("STRENGTH") + ": <b>" + GameManager.Instance.ConvertWeight(GameManager.Instance.gameLeaders[gameItemIndexByItemId].strength) + "</b>";
break;
}
case GameManager.ItemType.Weight:
{
if (GameManager.Instance.gameWeights[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameWeights[gameItemIndexByItemId].type.ToString().ToUpper();
itemDesc.text = LanguageManager.Instance.GetText("WEIGHT") + ": <b>" + GameManager.Instance.gameWeights[gameItemIndexByItemId].weight + "g</b>";
Text text = itemDesc;
text.text = text.text + "\n" + LanguageManager.Instance.GetText("AMOUNT") + ": <b>" + GameManager.Instance.gameWeights[gameItemIndexByItemId].amount + "</b>";
break;
}
case GameManager.ItemType.Accesories:
if (GameManager.Instance.gameAccesories[gameItemIndexByItemId].isNew)
{
isnewImage.enabled = true;
}
else
{
isnewImage.enabled = false;
}
colorText.text = GameManager.Instance.gameAccesories[gameItemIndexByItemId].type.ToString().ToUpper();
break;
}
}
public void SetButtonsByLevelAndPrice()
{
if ((itemPriceValue > Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerCash || levelReq > Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerLevel) && !Singleton<SaveDataManager>.Instance.IsCurrentlySandbox())
{
itemPrice.color = overPriceColor;
buyButton.interactable = false;
addToBasketButton.interactable = false;
}
else
{
itemPrice.color = Color.white;
buyButton.interactable = true;
addToBasketButton.interactable = true;
}
}
private void Update()
{
}
public void AddToBasket()
{
if (!isCommingSoon)
{
Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerShopBasket.AddToBasket(category, itemID, itemPriceValue, sortName);
shopManager.UpdatebasketCounter();
ShopItem.OnUIAddBasketGlobal?.Invoke();
UnityEngine.Object.FindObjectOfType<MyBasketInfo>().UpdateMyBasket();
SetButtonsByLevelAndPrice();
}
}
public void BuyItemOneByButton()
{
if (!isCommingSoon)
{
shopManager.BuyItem(category, itemID, 1, itemPriceValue, sortName);
GameManager.Instance.ShowMessagePopup(LanguageManager.Instance.GetText("BUY_ONE_DONE"), shopManager.transform, deleteLast: true);
ShopItem.OnUIBuyGlobal?.Invoke();
SetButtonsByLevelAndPrice();
}
}
public void OnPointerClick(PointerEventData pointerEventData)
{
if (!isCommingSoon)
{
shopManager.currentItemShop = base.gameObject;
shopManager.ShowShopItem(category, itemID, sortName);
}
}
}