Browse Source

套装添加选中标志

zhaoyang 3 năm trước cách đây
mục cha
commit
2518dcae2d

+ 5 - 0
GameClient/Assets/Game/HotUpdate/Constant/ConstItemID.cs

@@ -7,5 +7,10 @@ namespace GFGGame
         public const int GOLD = 1000003;
         public const int DIAMOND_PURPLE = 1000004;
         public const int DIAMOND_RED = 1000005;
+
+        public const int DEFULT_FA_XING = 10000;
+        public const int DEFULT_LIAN_YI_QUN = 20000;
+        public const int DEFULT_NEI_DA = 30000;
+        public const int DEFULT_XIA_ZHUANG = 50000;
     }
 }

+ 51 - 18
GameClient/Assets/Game/HotUpdate/Data/DressUpMenuSuitDataManager.cs

@@ -1,3 +1,4 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 namespace GFGGame
@@ -27,7 +28,7 @@ namespace GFGGame
             _suitSyntheticBoxBonusStatus.Clear();
             if (systemSuitList != null)
             {
-                foreach(SystemSuit systemSuit in systemSuitList)
+                foreach (SystemSuit systemSuit in systemSuitList)
                 {
                     _suitGuideBoxBonusStatus.Add(systemSuit.suitId, systemSuit.boxStatus);
                     _suitSyntheticBoxBonusStatus.Add(systemSuit.suitId, systemSuit.boxStatusSyn);
@@ -37,7 +38,7 @@ namespace GFGGame
 
         public static void Add(int value)
         {
-            if(!_suitIDList.Contains(value))
+            if (!_suitIDList.Contains(value))
             {
                 _suitIDList.Add(value);
             }
@@ -45,7 +46,7 @@ namespace GFGGame
 
         public static void Remove(int value)
         {
-            if(_suitIDList.Contains(value))
+            if (_suitIDList.Contains(value))
             {
                 _suitIDList.Remove(value);
             }
@@ -55,7 +56,7 @@ namespace GFGGame
         {
             totalCount = SuitCfgManager.Instance.totalItemCount;
             count = 0;
-            foreach(KeyValuePair<int , int> item in _progressBySuitIdDic)
+            foreach (KeyValuePair<int, int> item in _progressBySuitIdDic)
             {
                 count += item.Value;
             }
@@ -64,9 +65,9 @@ namespace GFGGame
         public static void GetSuitProgressByItemId(int itemID, out int suitId, out int count)
         {
             suitId = SuitCfgManager.Instance.GetItemSuitId(itemID);
-            if(suitId > 0)
+            if (suitId > 0)
             {
-                if(_progressByItemIdDic.ContainsKey(itemID))
+                if (_progressByItemIdDic.ContainsKey(itemID))
                 {
                     count = _progressByItemIdDic[itemID];
                 }
@@ -83,9 +84,9 @@ namespace GFGGame
 
         public static void GetSuitProgressBySuitId(int suitId, out int count, out int totalCount)
         {
-            if(suitId > 0)
+            if (suitId > 0)
             {
-                if(_progressBySuitIdDic.ContainsKey(suitId))
+                if (_progressBySuitIdDic.ContainsKey(suitId))
                 {
                     count = _progressBySuitIdDic[suitId];
                 }
@@ -107,7 +108,7 @@ namespace GFGGame
             int count = 0;
             int totalCount = 1;
             GetSuitProgressBySuitId(suitId, out count, out totalCount);
-            return (float)count/totalCount;
+            return (float)count / totalCount;
         }
 
         public static bool CheckHaveSuit(int suitId)
@@ -118,19 +119,19 @@ namespace GFGGame
         public static void CheckItemInSuit(int itemId)
         {
             int suitId = SuitCfgManager.Instance.GetItemSuitId(itemId);
-            if(suitId > 0)
+            if (suitId > 0)
             {
                 SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
                 int[] itemIds = SuitCfgManager.Instance.GetSuitItems(suitId);
                 int totalCount = itemIds.Length;
                 bool hasAll = true;
                 int count = 0;
-                
-                for(int i = 0; i < totalCount; i++)
+
+                for (int i = 0; i < totalCount; i++)
                 {
                     int tempItemId = itemIds[i];
                     bool hasItem = DressUpMenuItemDataManager.CheckHasItem(tempItemId);
-                    if(!hasItem)
+                    if (!hasItem)
                     {
                         hasAll = false;
                     }
@@ -141,27 +142,59 @@ namespace GFGGame
                 }
                 _progressBySuitIdDic[suitId] = count;
                 _progressByItemIdDic[itemId] = count;
-                if(hasAll)
+                if (hasAll)
                 {
                     Add(suitId);
                 }
                 GetSuitItemController.AddItemId(itemId);
             }
         }
+        //检测当前穿戴是否是一件完整套装,且只穿了一件套装,返回套装id
+        public static int CheckCurDressIsSuit()
+        {
+            if (EquipDataCache.cacher.suitId > 0) return EquipDataCache.cacher.suitId;
+
+            int[] equipDatas = EquipDataCache.cacher.equipDatas;
+            int dressSuitId = 0;
+            List<int> _equipDatas = new List<int>();
+            for (int i = 0; i < equipDatas.Length; i++)
+            {
+                if (DressUpMenuItemDataManager.CheckIsSceneType(equipDatas[i])) continue;
+                if (equipDatas[i] != ConstItemID.DEFULT_FA_XING && equipDatas[i] != ConstItemID.DEFULT_LIAN_YI_QUN && equipDatas[i] != ConstItemID.DEFULT_NEI_DA && equipDatas[i] != ConstItemID.DEFULT_XIA_ZHUANG)
+                {
+                    int suitId = SuitCfgManager.Instance.GetItemSuitId(equipDatas[i]);
+                    if (suitId <= 0) return 0;//有任何不属于套装的部件且不是原始服装,则当前穿戴不属于套装
+
+                    if (dressSuitId != 0 && dressSuitId != suitId) return 0;//当前穿戴不同套装的部件,则当前穿戴不属于套装
+                    dressSuitId = suitId;
+
+                    _equipDatas.Add(equipDatas[i]);
+                }
+            }
+            if (dressSuitId == 0) return dressSuitId;
+            int[] itemIds = SuitCfgManager.Instance.GetSuitItems(dressSuitId);
+            for (int i = 0; i < itemIds.Length; i++)
+            {
+                if (DressUpMenuItemDataManager.CheckIsSceneType(itemIds[i])) continue;
+                if (_equipDatas.IndexOf(itemIds[i]) < 0) return 0;//套装部件穿戴不完整
+            }
+
+            return dressSuitId;
+        }
 
         public static List<int> GetSuitIDList()
         {
             return (List<int>)_suitIDList.GetRange(0, _suitIDList.Count);
         }
-        
+
         public static int GetSuitGuideBonusStatus(int suitId)
         {
             int status = ConstBonusStatus.CAN_NOT_GET;
-            if(_suitGuideBoxBonusStatus.ContainsKey(suitId))
+            if (_suitGuideBoxBonusStatus.ContainsKey(suitId))
             {
                 status = _suitGuideBoxBonusStatus[suitId];
             }
-            if(status == ConstBonusStatus.CAN_NOT_GET)
+            if (status == ConstBonusStatus.CAN_NOT_GET)
             {
                 if (CheckHaveSuit(suitId))
                 {
@@ -177,7 +210,7 @@ namespace GFGGame
             _suitGuideBoxBonusStatus[suitId] = status;
             SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId);
             List<ItemData> itemDatas = ItemUtil.CreateItemDataList(suitCfg.boxBonusArr);
-            foreach(ItemData itemData in itemDatas)
+            foreach (ItemData itemData in itemDatas)
             {
                 ItemDataManager.Add(itemData.id, itemData.num);
             }

+ 2 - 0
GameClient/Assets/Game/HotUpdate/DressUp/DressUpObjDataCache.cs

@@ -104,6 +104,8 @@ namespace GFGGame
                 DressUpUtil.AddItem(value, _sceneObj, _needSetMask);
                 score += DressUpMenuItemDataManager.GetItemScore(value);
             }
+            int dressSuitId = DressUpMenuSuitDataManager.CheckCurDressIsSuit();
+            if (dressSuitId > 0) _suitId = dressSuitId;
         }
 
         private void Remove(int value)

+ 9 - 3
GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpView.cs

@@ -154,6 +154,8 @@ namespace GFGGame
                 GuideController.TryGuideDressUpViewMenuPart(_ui.m_partsList.m_list);
             }
             this.hideListType1();
+            UpdateListPartsSelected();
+
         }
 
         private void OnClickListType2Item(EventContext context)
@@ -164,6 +166,7 @@ namespace GFGGame
 
             this.showListParts(item2.type);
             this.hideListType2();
+
         }
 
         private void OnClickPartsListItem(EventContext context)
@@ -180,8 +183,8 @@ namespace GFGGame
             {
                 EquipDataCache.cacher.TryCancelSuit(id);
                 EquipDataCache.cacher.AddOrRemove(id, true);
-                UpdateListPartsSelected();
             }
+            UpdateListPartsSelected();
         }
 
         private void OnTouchPad()
@@ -426,11 +429,14 @@ namespace GFGGame
                 int id = (int)listItem.target.data;
                 if (_currentMenuType == ConstDressUpItemType.TAO_ZHUANG)
                 {
-                    listItem.m_iconSelected.visible = false;
+                    listItem.m_iconSelected.visible = EquipDataCache.cacher.suitId > 0 && id == EquipDataCache.cacher.suitId;
                 }
                 else
                 {
-                    listItem.m_iconSelected.visible = EquipDataCache.cacher.CheckDressUpItemIsOn(id);
+                    bool isPutOn = EquipDataCache.cacher.CheckDressUpItemIsOn(id);//非套装金判断是否穿戴
+                    bool isSuit = !DressUpMenuItemDataManager.CheckIsSceneType(id) && EquipDataCache.cacher.suitId > 0 && SuitCfgManager.Instance.GetItemSuitId(id) == EquipDataCache.cacher.suitId;//非场景类, 若当前穿戴套装要判断item是否属于套装(更换场景类不会改变套装穿戴状态)
+                    bool isSceneSuit = DressUpMenuItemDataManager.CheckIsSceneType(id) && EquipDataCache.cacher.suitId > 0 && isPutOn;//场景类, 若当前穿戴套装要判断item是否属已穿戴
+                    listItem.m_iconSelected.visible = isPutOn || isSuit || isSceneSuit;
                 }
             }
         }