using cfg.ActorCfg; using cfg.item; using Cysharp.Threading.Tasks; using Framework; using Gameplay; using PhxhSDK; using System; using TMPro; using UnityEngine; using UnityEngine.UI; public class ItemObj : UIGameObjectWrapper { GameObject _parentGo; Action _action;//用来做点击事件 int _Id; GameObject _itemGo; DataItem Cfg; Button clickBtn; UIType _type; int count = 0; public enum interactiveType { normail, selected, gray, } public enum UIType//测试,正式美术图出来后弃用 { cultivate, mail, shop, } //美术没出图前都用这 public ItemObj(int itemId, GameObject parentObject, UIType uIType, GameObject go, int itemCount = 0, bool isScale = false) : base(go, isScale) { InitData(itemId, parentObject, itemCount); _type = uIType; _itemGo = go; _itemGo.transform.SetParent(_parentGo.transform); _itemGo.transform.localPosition = Vector3.zero; RefreshDetail(); BindButton(FindObj("click"), OnClickBtnClick); } public static async UniTask InitItemObjFromPrefab(int itemId, GameObject parentObject, UIType uIType, int itemCount = 0) { GameObject newGo = await LoadPrefabTest(); ItemObj itemObj = new ItemObj(itemId, parentObject, uIType, newGo, itemCount); itemObj.IsScaleShow = true; return itemObj; } //现在仅giftcode使用,后面改 public ItemObj(int itemId, GameObject parentObject, GameObject go, bool isScale = false) : base(go, isScale) { InitData(itemId, parentObject); _itemGo = go; _itemGo.transform.SetParent(_parentGo.transform); _itemGo.transform.localPosition = Vector3.zero; RefreshDetail(); BindButton(FindObj("click"), OnClickBtnClick); } public static async UniTask InitItemObjFromPrefab(int itemId, GameObject parentObject) { GameObject newGo = await LoadPrefabTest(); ItemObj itemObj = new ItemObj(itemId, parentObject, newGo); itemObj.IsScaleShow = true; return itemObj; } public void AddButtonListener(Action callback) { _action = callback; } //相关设置 public void SetScale(float scale) { if (_itemGo == null) { DebugUtil.LogError("itemobj害没生成,调整下顺序呢"); return; } _itemGo.transform.localScale = new Vector3(scale, scale, scale); } public void SetState(interactiveType interType) { switch (interType) { case interactiveType.normail: CommonUtils.GetGameObject(_itemGo, "state/Gray").SetActive(false); break; case interactiveType.selected: break; case interactiveType.gray: CommonUtils.GetGameObject(_itemGo, "state/Gray").SetActive(true); break; } } public void RefreshGoods(GameObject itemGo, int itemId) { switch (Cfg.Type) { case ItemType.Normal: break; case ItemType.Character: break; case ItemType.Useable: break; case ItemType.Vehicle: break; } } #region 私有方法 private static async UniTask LoadPrefabTest() { string prefabPath = "Assets/Art/UI/Prefab/MainScene/ShowCharacter/ItemObj.prefab"; GameObject go = await AssetManager.GetSingleton().LoadAssetAsync(prefabPath); if (go == null) { DebugUtil.LogError(""); } GameObject ret = UnityEngine.Object.Instantiate(go); //_itemGo.transform.SetParent(_parentGo.transform); //ret.transform.localPosition = Vector3.zero; ret.transform.localScale = Vector3.one; //RefreshDetail(); return ret; } private void RefreshDetail() { CommonUtils.GetGameObject(_itemGo, "test2").SetActive(_type == UIType.mail); CommonUtils.GetGameObject(_itemGo, "test1").SetActive(_type == UIType.cultivate); CommonUtils.GetGameObject(_itemGo, "test3").SetActive(_type == UIType.shop); //CommonUtils.GetComponent(_itemGo, "test2/icon/Text_StuffNum").text = count.ToString(); CommonUtils.GetComponent(_itemGo, "test2/icon/Text_StuffNum").text = count.ToString(); CommonUtils.GetComponent(_itemGo, "test3/Image_Bar/Text_ItemNum").text = count.ToString(); CommonUtils.GetGameObject(_itemGo, "DebugID").SetActive(DisplayIDForCeHua.IsDisplayID); CommonUtils.GetComponent(_itemGo, "DebugID").text = _Id.ToString(); OnIconLoaded(); } private void InitData(int itemId, GameObject paObj, int itemCount = 0) { _parentGo = paObj; _Id = itemId; count = itemCount; Cfg = CategoryManager.Instance.GetItemData(itemId); if (Cfg == null) { DebugUtil.LogError("物品表没有配置id为{0}的物品,请检查配置", itemId); } } private void OnClickBtnClick() { if (_action != null) { _action.Invoke(); return; } //下面写物品默认点击事件 } private async void OnIconLoaded() { var spritePath = CommonUtils.GetItemPath(_Id); CommonUtils.GetComponent(_itemGo, string.Format("test{0}/icon", (int)_type + 1)).sprite = await LoadAssetAsync(spritePath); } #endregion }