using Sirenix.OdinInspector; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public struct Treasure { public int id; public string name; public Sprite sprite; public Color qualityIcon; public Color qualityText; public List tagsId; public List tags; public string attribute; public int price; public Treasure(int id, string name, Sprite sprite, Color qualityIcon, Color qualityText, List tagsId, List tags, string attribute, int price) { this.id = id; this.name = name; this.sprite = sprite; this.qualityIcon = qualityIcon; this.qualityText = qualityText; this.tagsId = new List(tagsId); this.tags = new List(tags); this.attribute = attribute; this.price = price; } } public class TreasuresSaleUI : MonoBehaviour { [FoldoutGroup("组件")] public ShopUI shopUI; [FoldoutGroup("组件")] public ButtonUI unlock; [FoldoutGroup("组件")] public Image iconBackground; [FoldoutGroup("组件")] public Image icon; [FoldoutGroup("组件")] public Image[] tags; [FoldoutGroup("组件")] public TextMeshProUGUI nameText; [FoldoutGroup("组件")] public TextMeshProUGUI attribute; [FoldoutGroup("组件")] public ButtonUI buy; [FoldoutGroup("组件")] public TextMeshProUGUI price; public bool islock; public bool isNull; public Treasure treasure; public TreasureInBag owner; private void Update() { if(owner!=null && gameObject.activeSelf) { transform.position = owner.transform.position; } } public void Init() { if (unlock != null) { ShowLockImg(); } iconBackground.color = treasure.qualityIcon; icon.sprite = treasure.sprite; int type = treasure.tags.Count % 2; int len = treasure.tags.Count / 2; float interval = shopUI.interval; float left = 0; switch (type) { case 0: left = -interval / 2 - (len - 1) * interval; break; case 1: left = -len * interval; break; } for (int i = 0; i < 8; i++) { Image tag = tags[i]; if (i < treasure.tags.Count) { tag.transform.localPosition = new Vector3(left + i * interval, 0, 0); tag.sprite = treasure.tags[i]; tag.gameObject.SetActive(true); } else { tag.gameObject.SetActive(false); } } nameText.text = treasure.name; nameText.color = treasure.qualityText; attribute.text = treasure.attribute; if (price != null) { price.text = $"{treasure.price}"; gameObject.SetActive(true); } isNull = false; } public void ChangeLock() { islock = !islock; ShowLockImg(); } public void ShowLockImg() { if (islock) { unlock.ChangeImg(1); } else { unlock.ChangeImg(0); } } public void Buy() { if(GameManager.instance.money - treasure.price < 0) { return; } GameManager.instance.money -= treasure.price; shopUI.moneyText.text = $"{GameManager.instance.money}"; GameManager.instance.myTreasures.Add(treasure); for(int i = 0; i < treasure.tagsId.Count; i++) { GameManager.instance.myTreasuresTag[treasure.tagsId[i] - 1]++; } shopUI.DrawUIPolygon(); shopUI.DrawBag(); gameObject.SetActive(false); isNull = true; islock = false; } }