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;
}
}
}