yyl
2025-07-01 9c7efb57bf1b21954c7d81b705c8a8a34e7fb364
Main/System/KnapSack/New/CommonItemBaisc.cs
@@ -3,368 +3,362 @@
using UnityEngine;
using UnityEngine.UI;
    public enum ItemCellformat
    {
        Format_84x84,
        Format_80x80,
        Format_70x70,
        Format_64x64,
        None,
public enum ItemCellformat
{
    Format_100x100,
    Format_84x84,
    Format_80x80,
    Format_70x70,
    Format_64x64,
    None,
}
public class CommonItemBaisc : MonoBehaviour
{
    [SerializeField] ItemCellformat m_Format;
    public ItemCellformat format { get { return m_Format; } set { m_Format = value; } }
    Image m_BgIcon;
    private Image bgIcon {
        get {
            if (m_BgIcon == null)
            {
                LoadPrefab();
                m_BgIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_BackGround");
            }
            return m_BgIcon;
        }
    }
    public class CommonItemBaisc : MonoBehaviour
    {
        [SerializeField] ItemCellformat m_Format;
        public ItemCellformat format { get { return m_Format; } set { m_Format = value; } }
        Image m_BgIcon;
        public Image bgIcon {
            get {
                if (m_BgIcon == null)
                {
                    LoadPrefab();
                    m_BgIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_BackGround");
                }
                return m_BgIcon;
    Image m_ItemIcon;
    private Image itemIcon {
        get {
            if (m_ItemIcon == null)
            {
                LoadPrefab();
                m_ItemIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_Icon");
            }
            return m_ItemIcon;
        }
    }
        Image m_ItemIcon;
        public Image itemIcon {
            get {
                if (m_ItemIcon == null)
                {
                    LoadPrefab();
                    m_ItemIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_Icon");
                }
                return m_ItemIcon;
    Image m_StateIcon;
    public Image stateIcon {
        get {
            if (m_StateIcon == null)
            {
                LoadPrefab();
                m_StateIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_State");
            }
            return m_StateIcon;
        }
    }
        Image m_StateIcon;
        public Image stateIcon {
            get {
                if (m_StateIcon == null)
                {
                    LoadPrefab();
                    m_StateIcon = this.transform.GetComponent<Image>("Container_ItemCell/Img_State");
                }
                return m_StateIcon;
    Text m_CountText;
    public Text countText {
        get {
            if (m_CountText == null)
            {
                LoadPrefab();
                m_CountText = this.transform.GetComponent<Text>("Container_ItemCell/Txt_Count");
            }
            return m_CountText;
        }
    }
        Text m_CountText;
        public Text countText {
            get {
                if (m_CountText == null)
                {
                    LoadPrefab();
                    m_CountText = this.transform.GetComponent<Text>("Container_ItemCell/Txt_Count");
                }
                return m_CountText;
    Button m_Button;
    public Button button {
        get {
            if (m_Button == null)
            {
                LoadPrefab();
                m_Button = this.GetComponent<Button>("Container_ItemCell");
            }
            return m_Button;
        }
    }
        Button m_Button;
        public Button button {
            get {
                if (m_Button == null)
                {
                    LoadPrefab();
                    m_Button = this.GetComponent<Button>("Container_ItemCell");
                }
                return m_Button;
            }
        }
    // EquipSuitEffect m_SuitEffect;
    // EquipSuitEffect suitEffect {
    //     get {
    //         if (m_SuitEffect == null)
    //         {
    //             LoadPrefab();
    //             //clone 会造成二次创建
    //             m_SuitEffect = transform.GetComponentInChildren<EquipSuitEffect>();
    //             if (m_SuitEffect == null)
    //                 m_SuitEffect = EquipSuitEffect.Create(transform as RectTransform);
    //         }
    //         return m_SuitEffect;
    //     }
    // }
        EquipSuitEffect m_SuitEffect;
        EquipSuitEffect suitEffect {
            get {
                if (m_SuitEffect == null)
                {
                    LoadPrefab();
                    //clone 会造成二次创建
                    m_SuitEffect = transform.GetComponentInChildren<EquipSuitEffect>();
                    if (m_SuitEffect == null)
                        m_SuitEffect = EquipSuitEffect.Create(transform as RectTransform);
                }
                return m_SuitEffect;
            }
        }
        //物品基础特效(物品表)
        ItemBaseEffect m_ItemBaseEffect;
        ItemBaseEffect itemBaseEffect {
            get {
    //物品基础特效(物品表)
    ItemBaseEffect m_ItemBaseEffect;
    ItemBaseEffect itemBaseEffect {
        get {
            if (m_ItemBaseEffect == null)
            {
                LoadPrefab();
                //clone 会造成二次创建
                m_ItemBaseEffect = transform.GetComponentInChildren<ItemBaseEffect>();
                if (m_ItemBaseEffect == null)
                {
                    LoadPrefab();
                    //clone 会造成二次创建
                    m_ItemBaseEffect = transform.GetComponentInChildren<ItemBaseEffect>();
                    if (m_ItemBaseEffect == null)
                        m_ItemBaseEffect = ItemBaseEffect.Create(transform as RectTransform);
                }
                return m_ItemBaseEffect;
                    m_ItemBaseEffect = ItemBaseEffect.Create(transform as RectTransform);
            }
            return m_ItemBaseEffect;
        }
        public bool suitEffectDirty { get; set; }
        GameObject cellContainer;
        protected void LoadPrefab()
        {
            //clone 会造成二次创建
            var tmp = transform.Find("Container_ItemCell");
            if (tmp != null)
            {
                cellContainer = tmp.gameObject;
                return;
            }
            if (cellContainer == null)
            {
                switch (format)
                {
                    case ItemCellformat.Format_64x64:
                        cellContainer = UIUtility.CreateWidget("ItemCell_64", "Container_ItemCell");
                        break;
                    case ItemCellformat.Format_70x70:
                        cellContainer = UIUtility.CreateWidget("ItemCell_70", "Container_ItemCell");
                        break;
                    case ItemCellformat.Format_80x80:
                        cellContainer = UIUtility.CreateWidget("ItemCell_80", "Container_ItemCell");
                        break;
                    case ItemCellformat.Format_84x84:
                        cellContainer = UIUtility.CreateWidget("ItemCell_84", "Container_ItemCell");
                        break;
                }
                if (cellContainer != null)
                {
                    cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
                    cellContainer.transform.SetAsFirstSibling();
                }
            }
        }
        public int itemId { get; private set; }
        PackManager packModel { get { return PackManager.Instance; } }
        // EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
        /// <summary>
        /// 初始化数据 bool值用来判断是否需要展示评分高低或者职业限制
        /// </summary>
        /// <param name="model"></param>
        /// <param name="isCompare"></param>
        public virtual void Init(ItemModel model, bool isCompare = false)
        {
            itemId = model.itemId;
            InitUI(model.guid, model.itemId, (ulong)model.count, model.score, model.isAuction, model.packType, isCompare, model.useDataDict);
        }
        /// <summary>
        ///  初始化数据(预览)
        /// </summary>
        /// <param name="model"></param>
        public virtual void Init(ItemCellModel model)
        {
            itemId = model.itemId;
            InitUI(model.guid, model.itemId, model.count, model.score, false, model.packType, model.isCompare, model.useDataDic);
        }
        private void InitUI(string guid, int itemId, ulong count, int score, bool isAuction, PackType type, bool isCompare, Dictionary<int, List<int>> useDataDic)
        {
            var config = ItemConfig.Get(itemId);
            if (config == null) return;
            itemIcon.SetActive(true);
            bgIcon.SetActive(true);
            itemIcon.SetSprite(config.IconKey);
            ItemConfig itemConfig = ItemConfig.Get(itemId);
            // bgIcon.SetItemBackGround(ItemLogicUtility.Instance.GetItemQuality(itemId, useDataDic), itemConfig.QualityEchoType);
            // if (packModel.textCountShow.ContainsKey(itemId))
            // {
            //     countText.SetActive(true);
            //     countText.text = count > 1 ? packModel.textCountShow[itemId] + "x" + count : packModel.textCountShow[itemId];
            // }
            // else if (packModel.gameCashShow.Contains(itemId))
            // {
            //     //代金券
            //     countText.SetActive(true);
            //     countText.text = count > 1000000 ? UIHelper.ReplaceLargeNum(count / 100.0f) : (count / 100.0f).ToString("0.##");
            // }
            // else if (Array.IndexOf(packModel.textCountShow2, itemId) != -1)
            // {
            //     countText.SetActive(true);
            //     countText.text = UIHelper.ReplaceLargeNum(count * (ulong)config.EffectValueA1);
            // }
            // else
            // {
                countText.SetActive(count > 1);
                if (count > 1)
                {
                    countText.text = UIHelper.ReplaceLargeNum((double)count);
                }
            // }
            suitEffect.Display(itemId, suitEffectDirty);
            suitEffectDirty = false;
            itemBaseEffect.Display(itemId);
            // var compareReslut = isCompare ? Compare(type, itemId, score, guid) : 0;
            // switch (compareReslut)
            // {
            //     case -1:
            //         stateIcon.SetActive(true);
            //         stateIcon.SetSprite("EquipDownIcon");
            //         break;
            //     case 0:
            //         stateIcon.SetActive(false);
            //         break;
            //     case 1:
            //         stateIcon.SetActive(true);
            //         stateIcon.SetSprite("EquipUpIcon");
            //         break;
            //     case 99:
            //         stateIcon.SetActive(true);
            //         stateIcon.SetSprite("EquipForbidIcon");
            //         break;
            // }
        }
        /// <summary>
        /// 0 相等 99 禁止比较 1 高评分 -1 低评分
        /// </summary>
        /// <param name="itemId"></param>
        /// <param name="score"></param>
        /// <param name="isCompare"></param>
        /// <param name="compareSocre"></param>
        /// <returns></returns>
        // int Compare(PackType type, int itemId, int score, string guid)
        // {
        //     if (type == PackType.Equip || type == PackType.DogzEquip)
        //     {
        //         return 0;
        //     }
        //     if (!ItemLogicUtility.Instance.IsJobCompatibleItem(itemId))
        //     {
        //         return 99;
        //     }
        //     var config = ItemConfig.Get(itemId);
        //     if (config == null || config.EquipPlace == 0)
        //     {
        //         return 0;
        //     }
        //     var item = packModel.GetItemByGuid(guid);
        //     //if (item != null && item.isAuction)
        //     //{
        //     //    return 0;
        //     //}
        //     if (item != null && ItemLogicUtility.Instance.IsOverdue(guid))
        //     {
        //         return 99;
        //     }
        //     if (ItemLogicUtility.Instance.IsDogzEquip(itemId))
        //     {
        //         var compareSocre = GetDogzEquipScore(config.EquipPlace);
        //         return score.CompareTo(compareSocre);
        //     }
        //     else if (ItemLogicUtility.Instance.IsSpiritWeapon(itemId))
        //     {
        //         return score.CompareTo(GetSpiritWeaponScore(config.EquipPlace));
        //     }
        //     else if (ItemLogicUtility.Instance.IsRealmEquip(itemId))
        //     {
        //         return equipModel.CompareToCurrent(guid);
        //     }
        //     else
        //     {
        //         return 0;
        //     }
        // }
        // int GetDogzEquipScore(int equipPlace)
        // {
        //     var dogzModel = ModelCenter.Instance.GetModel<DogzModel>();
        //     ItemModel putOnModel = null;
        //     dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz, equipPlace, out putOnModel);
        //     return putOnModel == null ? 0 : putOnModel.score;
        // }
        // int GetSpiritWeaponScore(int equipPlace)
        // {
        //     var spiritWeaponModel = ModelCenter.Instance.GetModel<SpiritWeaponModel>();
        //     var guid = spiritWeaponModel.GetSpiritWeapon((RoleEquipType)equipPlace);
        //     var item = packModel.GetItemByGuid(guid);
        //     return item != null ? item.score : 0;
        // }
    }
    public class ItemCellModel
    // public bool suitEffectDirty { get; set; }
    GameObject cellContainer;
    protected void LoadPrefab()
    {
        public string guid { get; private set; }
        public int itemId { get; private set; }
        public ulong count { get; private set; }
        public int score { get; private set; }
        public bool isCompare { get; private set; }
        public ItemConfig itemConfig { get { return ItemConfig.Get(itemId); } }
        public PackType packType { get; private set; }
        public Dictionary<int, List<int>> useDataDic { get; private set; }
        public ItemCellModel(int itemId, bool isPreview = false, ulong count = 0, string guid = "", PackType type = PackType.Deleted, bool isCompare = false, Dictionary<int, List<int>> useDataDic = null)
        if (cellContainer != null)
            return;
        //clone 会造成二次创建
        var tmp = transform.Find("Container_ItemCell");
        if (tmp != null)
        {
            this.itemId = AdjustItemId(itemId);
            this.guid = guid;
            this.count = count;
            this.isCompare = isCompare;
            this.useDataDic = useDataDic;
            this.packType = type;
            //this.score = ItemLogicUtility.Instance.GetEquipScore(itemId, useDataDic, isPreview);
            cellContainer = tmp.gameObject;
            return;
        }
        public ItemCellModel(int itemId)
        if (cellContainer == null)
        {
            this.itemId = AdjustItemId(itemId);
            this.guid = "";
            this.count = 0;
            this.isCompare = false;
            this.useDataDic = null;
            this.packType = PackType.Deleted;
            this.score = 0;
        }
        public ItemCellModel(int itemId, bool isPreview, ulong count)
        {
            this.itemId = AdjustItemId(itemId);
            this.guid = "";
            this.count = count;
            this.isCompare = false;
            this.useDataDic = null;
            this.packType = PackType.Deleted;
            //this.score = ItemLogicUtility.Instance.GetEquipScore(itemId, null, isPreview);
        }
        int AdjustItemId(int itemId)
        {
            var config = ItemConfig.Get(itemId);
            if (config != null && config.Effect1 == 220)
            switch (format)
            {
                return config.EffectValueA1;
                case ItemCellformat.Format_64x64:
                    cellContainer = UIUtility.CreateWidget("ItemCell_64", "Container_ItemCell");
                    break;
                case ItemCellformat.Format_70x70:
                    cellContainer = UIUtility.CreateWidget("ItemCell_70", "Container_ItemCell");
                    break;
                case ItemCellformat.Format_80x80:
                    cellContainer = UIUtility.CreateWidget("ItemCell_80", "Container_ItemCell");
                    break;
                case ItemCellformat.Format_84x84:
                    cellContainer = UIUtility.CreateWidget("ItemCell_84", "Container_ItemCell");
                    break;
                case ItemCellformat.Format_100x100:
                        cellContainer = UIUtility.CreateWidget("ItemCell_100", "Container_ItemCell");
                        break;
            }
            else
            if (cellContainer != null)
            {
                return itemId;
                cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
                cellContainer.transform.SetAsFirstSibling();
            }
        }
    }
    public int itemId { get; private set; }
    PackManager packModel { get { return PackManager.Instance; } }
    // EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
    /// <summary>
    /// 初始化数据 bool值用来判断是否需要展示评分高低或者职业限制
    /// </summary>
    /// <param name="model"></param>
    /// <param name="isCompare"></param>
    public virtual void Init(ItemModel model, bool isCompare = false)
    {
        itemId = model.itemId;
        InitUI(model.guid, model.itemId, (ulong)model.count, model.score, model.isAuction, model.packType, isCompare, model.useDataDict);
    }
    /// <summary>
    ///  初始化数据(预览)
    /// </summary>
    /// <param name="model"></param>
    public virtual void Init(ItemCellModel model)
    {
        itemId = model.itemId;
        InitUI(model.guid, model.itemId, model.count, model.score, false, model.packType, model.isCompare, model.useDataDic);
    }
    private void InitUI(string guid, int itemId, ulong count, int score, bool isAuction, PackType type, bool isCompare, Dictionary<int, List<int>> useDataDic)
    {
        var config = ItemConfig.Get(itemId);
        if (config == null) return;
        itemIcon.SetActive(true);
        bgIcon.SetActive(true);
        itemIcon.SetSprite(config.IconKey);
        ItemConfig itemConfig = ItemConfig.Get(itemId);
        bgIcon.SetItemBackGround(ItemLogicUtility.Instance.GetItemQuality(itemId, useDataDic), itemConfig.QualityEchoType);
        if (packModel.textCountShow.ContainsKey(itemId))
        {
            countText.SetActive(true);
            countText.text = count > 1 ? packModel.textCountShow[itemId] + "x" + count : packModel.textCountShow[itemId];
        }
        else if (packModel.gameCashShow.Contains(itemId))
        {
            //代金券
            countText.SetActive(true);
            countText.text = count > 1000000 ? UIHelper.ReplaceLargeNum(count / 100.0f) : (count / 100.0f).ToString("0.##");
        }
        else if (Array.IndexOf(packModel.textCountShow2, itemId) != -1)
        {
            countText.SetActive(true);
            countText.text = UIHelper.ReplaceLargeNum(count * (ulong)config.EffectValueA1);
        }
        else
        {
            countText.SetActive(count > 1);
            if (count > 1)
            {
                countText.text = UIHelper.ReplaceLargeNum((double)count);
            }
        }
        // suitEffect.Display(itemId, suitEffectDirty);
        // suitEffectDirty = false;
        itemBaseEffect.Display(itemId);
        var compareReslut = isCompare ? Compare(type, itemId, score, guid) : 0;
        switch (compareReslut)
        {
            case -1:
                stateIcon.SetActive(true);
                stateIcon.SetSprite("EquipDownIcon");
                break;
            case 0:
                stateIcon.SetActive(false);
                break;
            case 1:
                stateIcon.SetActive(true);
                stateIcon.SetSprite("EquipUpIcon");
                break;
            case 99:
                stateIcon.SetActive(true);
                stateIcon.SetSprite("EquipForbidIcon");
                break;
        }
    }
    // / <summary>
    // / 0 相等 99 禁止比较 1 高评分 -1 低评分
    // / </summary>
    // / <param name="itemId"></param>
    // / <param name="score"></param>
    // / <param name="isCompare"></param>
    // / <param name="compareSocre"></param>
    // / <returns></returns>
    int Compare(PackType type, int itemId, int score, string guid)
    {
        if (type == PackType.Equip || type == PackType.DogzEquip)
        {
            return 0;
        }
        //此处可能是武将卡
        // if (!ItemLogicUtility.Instance.IsJobCompatibleItem(itemId))
        // {
        //     return 99;
        // }
        var config = ItemConfig.Get(itemId);
        if (config == null || config.EquipPlace == 0)
        {
            return 0;
        }
        var item = packModel.GetItemByGuid(guid);
        if (item != null && ItemLogicUtility.Instance.IsOverdue(guid))
        {
            return 99;
        }
        if (ItemLogicUtility.Instance.IsRealmEquip(itemId))
        {
            return EquipModel.Instance.CompareToCurrent(guid);
        }
        else
        {
            return 0;
        }
    }
    // int GetDogzEquipScore(int equipPlace)
    // {
    //     var dogzModel = ModelCenter.Instance.GetModel<DogzModel>();
    //     ItemModel putOnModel = null;
    //     dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz, equipPlace, out putOnModel);
    //     return putOnModel == null ? 0 : putOnModel.score;
    // }
    // int GetSpiritWeaponScore(int equipPlace)
    // {
    //     var spiritWeaponModel = ModelCenter.Instance.GetModel<SpiritWeaponModel>();
    //     var guid = spiritWeaponModel.GetSpiritWeapon((RoleEquipType)equipPlace);
    //     var item = packModel.GetItemByGuid(guid);
    //     return item != null ? item.score : 0;
    // }
}
public class ItemCellModel
{
    public string guid { get; private set; }
    public int itemId { get; private set; }
    public ulong count { get; private set; }
    public int score { get; private set; }
    public bool isCompare { get; private set; }
    public ItemConfig itemConfig { get { return ItemConfig.Get(itemId); } }
    public PackType packType { get; private set; }
    public Dictionary<int, List<int>> useDataDic { get; private set; }
    public ItemCellModel(int itemId, bool isPreview = false, ulong count = 0, string guid = "", PackType type = PackType.Deleted, bool isCompare = false, Dictionary<int, List<int>> useDataDic = null)
    {
        this.itemId = AdjustItemId(itemId);
        this.guid = guid;
        this.count = count;
        this.isCompare = isCompare;
        this.useDataDic = useDataDic;
        this.packType = type;
        //this.score = ItemLogicUtility.Instance.GetEquipScore(itemId, useDataDic, isPreview);
    }
    public ItemCellModel(int itemId)
    {
        this.itemId = AdjustItemId(itemId);
        this.guid = "";
        this.count = 0;
        this.isCompare = false;
        this.useDataDic = null;
        this.packType = PackType.Deleted;
        this.score = 0;
    }
    public ItemCellModel(int itemId, bool isPreview, ulong count)
    {
        this.itemId = AdjustItemId(itemId);
        this.guid = "";
        this.count = count;
        this.isCompare = false;
        this.useDataDic = null;
        this.packType = PackType.Deleted;
        //this.score = ItemLogicUtility.Instance.GetEquipScore(itemId, null, isPreview);
    }
    int AdjustItemId(int itemId)
    {
        var config = ItemConfig.Get(itemId);
        if (config != null && config.Effect1 == 220)
        {
            return config.EffectValueA1;
        }
        else
        {
            return itemId;
        }
    }
}