using System; using System.Collections; using System.Collections.Generic; namespace GFGGame { public class DressUpMenuSuitDataManager { private static List _suitIDList = new List(); //获得这件装备时套装的进度,用于展示 private static Dictionary _progressByItemIdDic = new Dictionary(); //套装当前的进度 private static Dictionary _progressBySuitIdDic = new Dictionary(); private static Dictionary _suitGuideBoxBonusStatus = new Dictionary(); private static Dictionary _suitSyntheticBoxBonusStatus = new Dictionary(); public static void InitData() { _suitIDList.Clear(); _progressBySuitIdDic.Clear(); _progressByItemIdDic.Clear(); } public static void InitServerData(List systemSuitList) { _suitGuideBoxBonusStatus.Clear(); _suitSyntheticBoxBonusStatus.Clear(); if (systemSuitList != null) { foreach (SystemSuit systemSuit in systemSuitList) { _suitGuideBoxBonusStatus.Add(systemSuit.suitId, systemSuit.boxStatus); _suitSyntheticBoxBonusStatus.Add(systemSuit.suitId, systemSuit.boxStatusSyn); } } } public static void Add(int value) { if (!_suitIDList.Contains(value)) { _suitIDList.Add(value); } } public static void Remove(int value) { if (_suitIDList.Contains(value)) { _suitIDList.Remove(value); } } public static void GetTotalProgress(out int count, out int totalCount) { totalCount = SuitCfgManager.Instance.totalItemCount; count = 0; foreach (KeyValuePair item in _progressBySuitIdDic) { count += item.Value; } } public static void GetSuitProgressByItemId(int itemID, out int suitId, out int count) { suitId = SuitCfgManager.Instance.GetItemSuitId(itemID); if (suitId > 0) { if (_progressByItemIdDic.ContainsKey(itemID)) { count = _progressByItemIdDic[itemID]; } else { count = 0; } } else { count = 0; } } public static void GetSuitProgressBySuitId(int suitId, out int count, out int totalCount) { if (suitId > 0) { if (_progressBySuitIdDic.ContainsKey(suitId)) { count = _progressBySuitIdDic[suitId]; } else { count = 0; } totalCount = SuitCfgManager.Instance.GetTotalCountOfOneSuit(suitId); } else { count = 0; totalCount = 1; } } public static float GetSuitProgressValueBySuitId(int suitId) { int count = 0; int totalCount = 1; GetSuitProgressBySuitId(suitId, out count, out totalCount); return (float)count / totalCount; } public static bool CheckHaveSuit(int suitId) { return _suitIDList.Contains(suitId); } public static void CheckItemInSuit(int itemId) { int suitId = SuitCfgManager.Instance.GetItemSuitId(itemId); 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++) { int tempItemId = itemIds[i]; bool hasItem = DressUpMenuItemDataManager.CheckHasItem(tempItemId); if (!hasItem) { hasAll = false; } else { count++; } } _progressBySuitIdDic[suitId] = count; _progressByItemIdDic[itemId] = count; 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 _equipDatas = new List(); 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 GetSuitIDList() { return (List)_suitIDList.GetRange(0, _suitIDList.Count); } public static int GetSuitGuideBonusStatus(int suitId) { int status = ConstBonusStatus.CAN_NOT_GET; if (_suitGuideBoxBonusStatus.ContainsKey(suitId)) { status = _suitGuideBoxBonusStatus[suitId]; } if (status == ConstBonusStatus.CAN_NOT_GET) { if (CheckHaveSuit(suitId)) { status = ConstBonusStatus.CAN_GET; } } return status; } public static void GetSuitGuideBoxBonus(int suitId) { int status = ConstBonusStatus.GOT; _suitGuideBoxBonusStatus[suitId] = status; SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId); List itemDatas = ItemUtil.CreateItemDataList(suitCfg.boxBonusArr); foreach (ItemData itemData in itemDatas) { ItemDataManager.Add(itemData.id, itemData.num); } int statusSyn = GetSuitSyntheticBonusStatus(suitId); GameProxy.ReqUpdateSystemSuitBoxStatus(suitId, status, statusSyn); EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId); GetSuitItemController.TryShow(0); } public static int GetSuitSyntheticBonusStatus(int suitId) { int status = ConstBonusStatus.CAN_NOT_GET; if (_suitSyntheticBoxBonusStatus.ContainsKey(suitId)) { status = _suitSyntheticBoxBonusStatus[suitId]; } if (status == ConstBonusStatus.CAN_NOT_GET) { if (CheckHaveSuit(suitId)) { status = ConstBonusStatus.CAN_GET; } } return status; } public static void GetSuitSyntheticBoxBonus(int suitId) { int status = ConstBonusStatus.GOT; _suitSyntheticBoxBonusStatus[suitId] = status; SuitSyntheticCfg suitCfg = SuitSyntheticCfgArray.Instance.GetCfg(suitId); List itemDatas = ItemUtil.CreateItemDataList(suitCfg.boxBonus); foreach (ItemData itemData in itemDatas) { ItemDataManager.Add(itemData.id, itemData.num); } int statusGuide = GetSuitGuideBonusStatus(suitId); GameProxy.ReqUpdateSystemSuitBoxStatus(suitId, statusGuide, status); EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId); } } }