using System.Collections; using System.Collections.Generic; using ET; using UnityEngine; namespace GFGGame { public class SuitFosterDataManager : SingletonBase { public string[] stepNames = { "浆洗", "晾晒", "熏香", "熨烫", "整饬" }; private Dictionary _suitInfoBySuitIdDic = new Dictionary(); public void Clear() { _suitInfoBySuitIdDic.Clear(); } public void InitServerData(SuitFosterData suitFosterData) { _suitInfoBySuitIdDic.Add(suitFosterData.suitId, suitFosterData); } public void SetMaintainSuit(int suitId, int maintainStep) { _suitInfoBySuitIdDic[suitId].maintainStep = maintainStep; // _suitInfoBySuitIdDic[suitId].maintainBonusSteps = maintainBonusSteps; EventAgent.DispatchEvent(ConstMessage.MAINTAIN_SUIT); } public void SetMaintainBonusSteps(int suitId, int maintainBonusSteps) { _suitInfoBySuitIdDic[suitId].maintainBonusSteps.Add(maintainBonusSteps); EventAgent.DispatchEvent(ConstMessage.GET_MAINTAIN_SUIT_BONUS, maintainBonusSteps); } public void SetMakeNewSuit(int suitId, int makeNewSuit) { _suitInfoBySuitIdDic[suitId].makeNewState = makeNewSuit; EventAgent.DispatchEvent(ConstMessage.MAKE_NEW_SUIT); } public SuitFosterData GetSuitFosterData(int suitId) { return _suitInfoBySuitIdDic.ContainsKey(suitId) ? _suitInfoBySuitIdDic[suitId] : new SuitFosterData() { suitId = suitId, maintainStep = 0, maintainBonusSteps = new List(), makeNewState = 0 }; } //加成属性服装占比 public List> GetPropertyPercentData(int suitId, int index) { SuitFosterCfg cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId)[index]; Dictionary _data = new Dictionary(); int count = 0; for (int i = 0; i < cfg.partsArr.Length; i++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cfg.partsArr[i][0]); string type = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType).name; int num = 0; if (_data.ContainsKey(type)) { num = _data[type]; } num = num + cfg.partsArr[i][1]; _data.Add(type, num); count += cfg.partsArr[i][1]; } int percentCount = 0; int dicIndex = 0; ICollection keys = _data.Keys; Dictionary _dataPercent = new Dictionary(); foreach (string key in keys) { if (dicIndex == _data.Count - 1) { _dataPercent.Add(key, 100 - percentCount); } else { _dataPercent.Add(key, Mathf.FloorToInt(_data[key] * 100 / count)); } percentCount += _dataPercent[key]; dicIndex++; } return new List>(_dataPercent); } //获取当前阶段部件属性总值 public void GetPropertyData(int suitId, int index, out SortedList _propertyData, out SortedList _addPropertyData) { SortedList propertyData = new SortedList(); SortedList addPropertyData = new SortedList(); int[][] partsArr = SuitFosterCfgArray.Instance.GetCfgs(suitId)[index].partsArr; for (int i = 0; i < partsArr.Length; i++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(partsArr[i][0]); for (int j = 0; j < ConstDressUpScoreType.scoreTypeList().Count; j++) { int score = j + 1; int count = ItemDataManager.GetScore(itemCfg.id, score); if (propertyData.ContainsKey(score)) { count = count + (int)propertyData[score]; propertyData[score] = count; } else { propertyData.Add(score, count); } int addCount = 0; if (score == itemCfg.mainScore) { addCount = partsArr[i][1]; } if (addPropertyData.ContainsKey(score)) { addCount = addCount + (int)addPropertyData[itemCfg.mainScore]; } else { addPropertyData.Add(score, addCount); } } } _propertyData = propertyData; _addPropertyData = addPropertyData; } //0:已完成,1:养护中,2未养护 public int GetFosterState(int suitId, int index) { SuitFosterData suitFosterData = this.GetSuitFosterData(suitId); if (index < suitFosterData.maintainStep) { return 0; } else if (index == suitFosterData.maintainStep) { return 1; } return 2; } public SortedList GetSuitFosterRewards(int suitId) { SuitFosterCfg[] cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId); List list = new List(cfg); list = SortRewardList(list, suitId); SortedList sortedList = new SortedList(); for (int i = 0; i < list.Count; i++) { if (list[i].rewardsArr.Length > 0) { sortedList.Add((i + 1), list[i]); } } return sortedList; } private List SortRewardList(List list, int suitId) { SuitFosterData fosterData = GetSuitFosterData(suitId); list.Sort((SuitFosterCfg a, SuitFosterCfg b) => { int indexA = list.IndexOf(a) + 1; int indexB = list.IndexOf(b) + 1; if (fosterData.maintainBonusSteps.IndexOf(indexA) >= 0 && fosterData.maintainBonusSteps.IndexOf(indexB) < 0) { return -1; } else if (fosterData.maintainBonusSteps.IndexOf(indexA) < 0 && fosterData.maintainBonusSteps.IndexOf(indexB) >= 0) { return 1; } return 0; }); return list; } //奖励领取状态 public bool GetRewardState(int suitId, int step) { SuitFosterData fosterData = GetSuitFosterData(suitId); return fosterData.maintainBonusSteps.IndexOf(step) > 0; } //当前奖励状态:state 0:未领1:不可领2:已完成 //当前奖励Index public void GetFosterRewardState(int suitId, out int state, out int index) { index = 0; SuitFosterData fosterData = GetSuitFosterData(suitId); int finishStep = fosterData.maintainStep; SuitFosterCfg[] cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId); for (int i = 0; i < cfg.Length; i++) { if (cfg[i].rewardsArr.Length == 0) continue; index = i; int _step = i + 1; if (_step <= finishStep && fosterData.maintainBonusSteps.IndexOf(_step) < 0) { state = 0; return; } if (_step > finishStep) { state = 1; return; } } state = 2; } } }