using System.Collections.Generic; using ET; namespace GFGGame { public class DressUpMenuSuitDataManager { private static List _suitIDList = new List(); private static List _actionIDList = new List();//拥有的特殊动作列表列表 private static List _travelSuitIDList = new List();//拥有的游历套装列表 public static List TravelSuitIDList { get { return _travelSuitIDList; } } //套装当前的进度 private static Dictionary _progressBySuitIdDic = new Dictionary(); private static Dictionary _suitGuideBoxBonusStatus = new Dictionary(); private static Dictionary _suitSyntheticBoxBonusStatus = new Dictionary(); public static void InitData() { _suitIDList.Clear(); _travelSuitIDList.Clear(); _progressBySuitIdDic.Clear(); _actionIDList.Clear(); } public static void SetSuitInfo(List suitInfoList) { if (suitInfoList != null) { _suitGuideBoxBonusStatus.Clear(); _suitSyntheticBoxBonusStatus.Clear(); foreach (SuitInfoProto suitInfo in suitInfoList) { SuitFosterData suitFosterData = new SuitFosterData() { suitId = suitInfo.SuitId, maintainStep = suitInfo.MaintainStep, maintainBonusSteps = suitInfo.MaintainBonusSteps, makeNewState = suitInfo.MakeNewState }; SuitFosterDataManager.Instance.InitServerData(suitFosterData); //图鉴 _suitGuideBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.GuideBoxBonusState); //合成 _suitSyntheticBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.SyntheticBoxBonusState); _progressBySuitIdDic[suitInfo.SuitId] = suitInfo.PartsCount; if (suitInfo.CollectedAll) { Add(suitInfo.SuitId); } } EventAgent.DispatchEvent(ConstMessage.GET_SUIT_INFOS); } } public static void Add(int value) { if (!_suitIDList.Contains(value)) { _suitIDList.Add(value); TravelSuitCfg travelSuitCfg = TravelSuitCfgArray.Instance.GetCfgBysuitId(value); if (travelSuitCfg != null) { _travelSuitIDList.Add(travelSuitCfg.id); } if (SuitCfgArray.Instance.CheckSuitHasAction(value)) { _actionIDList.Add(value); } } } public static void Remove(int value) { if (_suitIDList.Contains(value)) { _suitIDList.Remove(value); TravelSuitCfg travelSuitCfg = TravelSuitCfgArray.Instance.GetCfgBysuitId(value); if (travelSuitCfg != null && _travelSuitIDList.Contains(travelSuitCfg.id)) { _travelSuitIDList.Remove(travelSuitCfg.id); } if (SuitCfgArray.Instance.CheckSuitHasAction(value) && _actionIDList.Contains(value)) { _actionIDList.Remove(travelSuitCfg.id); } } } public static void GetTotalProgress(out int count, out int totalCount) { totalCount = GlobalCfgArray.globalCfg.suitPartTotalCount; count = 0; foreach (KeyValuePair item in _progressBySuitIdDic) { count += item.Value; } } 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 = SuitCfgArray.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 = SuitCfgArray.Instance.GetSuitIdOfItem(itemId); if (suitId > 0) { SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(suitId); int[] itemIds = SuitCfgArray.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; if (hasAll) { Add(suitId); } GetSuitItemController.AddItemId(itemId); } } public static List GetSuitIDList() { return (List)_suitIDList.GetRange(0, _suitIDList.Count); } public static List GetActionIDList() { return _actionIDList; } 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 SetSuitGuideBoxBonusCompleted(int suitId) { _suitGuideBoxBonusStatus[suitId] = ConstBonusStatus.GOT; EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId); } 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 SetSuitSyntheticBoxBonusCompleted(int suitId) { _suitSyntheticBoxBonusStatus[suitId] = ConstBonusStatus.GOT; EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId); } //检查套装是否有动作资源 public static bool CheckSuitHasActionRes(int suitId) { var suitCfg = SuitCfgArray.Instance.GetCfg(suitId); return suitCfg != null && ResPathUtil.CheckDressUpAnimationResExist(suitCfg.aniRes); } } }