using asap.core; using cfg; using game; using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace GameCore { public partial class PlayerItemData { /// /// 获得膨胀体力后的物品显示 /// /// 体力膨胀系数 == null 当前实时系数 /// /// /// public ItemData GetItemDataOneLureInflation(float? inflate, int dropId, int index = 0) { DropPackageList dropPackageList = _tables.TbDrop.GetOrDefault(dropId)?.DropList; if (dropPackageList == null) { GameDebug.LogError("null dropID" + dropId); return null; } int len = dropPackageList.DropIDList.Count; int len2 = dropPackageList.DropCountList.Count; if (len != len2) { if (len > len2) { len = len2; } Debug.LogError($"[PlayerItemData]GetItemDataByDropIdAndType: DropPackageList count not equal [DropId]=={dropId}"); } if (index >= len) { return null; } ItemData itemData = new ItemData() { id = dropPackageList.DropIDList[index], count = dropPackageList.DropCountList[index] }; ItemTransition(itemData); if (inflate == null) { inflate = GContext.container.Resolve().InflationRate;//等级膨胀系数 } itemData.inflate = (float)inflate; if (itemData.id == 1001) { ItemInflation(itemData, inflate); } return itemData; } /// /// 获得膨胀体力后的物品显示 /// /// 体力膨胀系数 == null 当前实时系数 /// public List GetItemDataByDropIdAndTypeLureInflation(float? inflate, int dropId, int mapId = -1) { List itemDataList = GetItemDataByDropIdAndType(dropId, mapId); LureInflation(itemDataList, inflate); return itemDataList; } /// /// 获得膨胀体力后的物品显示 处理有选定地图鱼卡的情况 /// /// 体力膨胀系数 == null 当前实时系数 /// public List GetItemDataByDropIdLureInflation(float? inflate, int dropId, int mapId = -1, bool afterAdding = false) { List itemDataList = GetItemDataByDropId(dropId, mapId, afterAdding); LureInflation(itemDataList, inflate); return itemDataList; } /// /// 获得膨胀体力后的物品显示 /// /// 体力膨胀系数 == null 当前实时系数 /// /// /// public List GetItemByDropListLureInflation(float? inflate, List dropIDList) { if (dropIDList == null || dropIDList.Count == 0) { return null; } List itemDataList = new List(); foreach (var t in dropIDList) { List itemDatas = GetItemDataByDropIdAndType(t); if (itemDatas != null && itemDatas.Count > 0) { itemDataList.AddRange(itemDatas); } } //itemDataList不需要重复合并 if (itemDataList.Count == 0) { return null; } LureInflation(itemDataList, inflate); return itemDataList; } /// /// 发放物品 并且膨胀体力 /// /// 体力膨胀系数 == null 当前实时系数 /// /// /// /// public List AddItemByDropLureInflation(float? inflate, int dropID, ChangeSource changeSource, bool isShow = true, RewardType rewardType = RewardType.Normal) { List itemDataList = GetItemDataByDropIdAndType(dropID); if (itemDataList != null) { LureInflation(itemDataList, inflate); if (isShow) { GContext.Publish(new ShowData(itemDataList, rewardType)); } AddItem(itemDataList, changeSource); } return itemDataList; } /// /// 发放物品 并且膨胀体力 /// /// 体力膨胀系数 == null 当前实时系数 /// /// /// public List AddItemByDropListLureInflation(float? inflate, List dropIDList, ChangeSource changeSource, bool isShow = true, RewardType rewardType = RewardType.Normal) { if (dropIDList == null || dropIDList.Count == 0) { return null; } List itemDataList = new List(); foreach (var t in dropIDList) { List itemDatas = GetItemDataByDropIdAndType(t); if (itemDatas != null && itemDatas.Count > 0) { itemDataList.AddRange(itemDatas); } } //itemDataList不需要重复合并 if (itemDataList.Count == 0) { return null; } LureInflation(itemDataList, inflate); if (isShow) { GContext.Publish(new ShowData(itemDataList, rewardType)); } AddItem(itemDataList, changeSource); return itemDataList; } /// /// 对 itemDataList 中的体力进行膨胀 /// /// /// 体力膨胀系数 == null 当前实时系数 public void LureInflation(List itemDataList, float? inflate) { if (inflate == null) { inflate = GContext.container.Resolve().InflationRate;//等级膨胀系数 } for (int i = 0; i < itemDataList.Count; i++) { ItemData itemData = itemDataList[i]; itemData.inflate = (float)inflate; if (itemData.id == 1001) { itemData.origin = itemData.count; itemData.count = IntInflation(itemData.count, inflate); } } } /// /// 智能处理itemData.count的膨胀 /// /// /// /// True if it needs inflation. public bool LureInflation(ItemData itemData, float? inflate) { if (itemData.id != 1001) return false; ItemInflation(itemData, inflate); return true; } /// /// 对itemData.count进行膨胀 /// /// /// 体力膨胀系数 == null 当前实时系数 public void ItemInflation(ItemData itemData, float? inflate) { itemData.origin = itemData.count; if (inflate == null) { inflate = GContext.container.Resolve().InflationRate;//等级膨胀系数 } itemData.inflate = (float)inflate; itemData.count = IntInflation(itemData.count, inflate); } /// /// 对数字进行膨胀 /// /// /// 体力膨胀系数 == null 当前实时系数 /// public int IntInflation(int origin, float? inflate) { if (inflate == null) { inflate = GContext.container.Resolve().InflationRate;//等级膨胀系数 } if (inflate > 0) { float count = origin * (1 + inflate.Value); var roundingStep = _tables.TbGlobalConfig.LureScaleRoundingStep; int stepCount = roundingStep.Count / 2; int step = roundingStep[stepCount * 2]; for (int i = 0; i < stepCount; i++) { if (count <= roundingStep[i]) { step = roundingStep[i + stepCount]; break; } } float a = count / step; var b = Math.Round(a, MidpointRounding.AwayFromZero); origin = (int)b * step; } return origin; } } }