using asap.core; using cfg; using GameCore; using System; using System.Collections.Generic; using System.Linq; using UniRx; using UnityEngine; public class FishingRodUpSystem { public IEventAggregator eventAggregator; public List rodItemDatas = new List(); public Dictionary allCount = new Dictionary(); public Dictionary> hasRodID; PlayerFishData playerFishData; Tables _tables; public int SelectIndex = 0; public int StartQuality => 2; int EndQuality => 4; public AvatarEvent bagPanel; public FishingRodUpSystem() { playerFishData = GContext.container.Resolve(); _tables = GContext.container.Resolve(); eventAggregator = new EventAggregator(); var dataList = _tables.TbRodData.DataList; for (int i = StartQuality; i <= EndQuality; i++) { allCount[i] = dataList.Where(x => x.Quality == i).Count(); } } public List HasRodID(int quality) { return hasRodID.TryGetValue(quality, out List rodIDs) ? rodIDs : new List(); } public void InitRodList() { rodItemDatas.Clear(); hasRodID = new Dictionary>(); var dataList = _tables.TbRodData.DataList; int count = dataList.Count; RodData _rodData; RodAscend _rodAscend; for (int i = 0; i < count; i++) { _rodData = dataList[i]; bool isLock = playerFishData.NotRod(_rodData.ID); if (!isLock) { if (!hasRodID.TryGetValue(_rodData.Quality, out List rodIDs)) { hasRodID[_rodData.Quality] = rodIDs = new List(); } rodIDs.Add(_rodData.ID); } _rodData = dataList[i]; _rodAscend = _tables.TbRodAscend.GetOrDefault(_rodData.AscendID); int level = playerFishData.GetRodLevel(_rodData.ID); int star = playerFishData.GetRodPiece(_rodData.ID); bool isMax = star >= _rodAscend.MaxAscent; RodItemData rodItemData = new RodItemData() { config = dataList[i], isLock = isLock, level = level + 1, star = star, isNew = GContext.container.Resolve().IsNewRod(dataList[i].ID), isMax = isMax, isEquip = dataList[i].ID == GContext.container.Resolve().equipRodID }; if (isLock) { rodItemData.isCraftable = playerFishData.CheckUpgrade(_rodAscend); } else { GetDuelPerk(rodItemData); } int skindID = playerFishData.GetRodSkin(_rodData.ID); rodItemData.skin = _tables.TbRodSkinData.GetOrDefault(skindID); if (rodItemData.skin == null) { Debug.LogError($"No SkinID {skindID} in RodID {rodItemData.config.ID}"); continue; } rodItemData.SetRodPower(); rodItemDatas.Add(rodItemData); } rodItemDatas.Sort(RodItemData.Sort); } void GetDuelPerk(RodItemData rodItemData) { var playerFishData = GContext.container.Resolve(); Dictionary RodPerkList = playerFishData.GetRodDuelPerk(rodItemData.config.ID, rodItemData.star); //float power = rodItemData.config.DuelPower[rodItemData.level - 1]; //float param = 1; foreach (var perk in RodPerkList) { //var rodEngancePerk = _tables.TbRodAscendPerk.GetOrDefault(perk.Key); rodItemData.traitIDs.Add(perk.Key); rodItemData.noactions.Add(true); //string value = perk.Value; //if (!string.IsNullOrEmpty(value) && !value.Contains('|')) //{ // param += float.Parse(value) * _tables.TbRodAscendPerk.GetOrDefault(perk.Key)?.DuelPowerParam ?? 0; //} } //power *= param; //rodItemData.DuelPower = (int)power; } public RodItemData GetCurrentRodItemData() { return rodItemDatas[SelectIndex]; } public IDisposable Subscribe(Action eventAction) { return eventAggregator.GetEvent().Subscribe(eventAction); } public void Publish(T evt) { if (eventAggregator != null) eventAggregator.Publish(evt); } } public struct RefreshRodBagEvent { }