NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Reward/RewardManager.cs

247 lines
5.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using cfg.ActorCfg;
using Framework;
using Gameplay;
using Gameplay.Level;
using Gameplay.Net;
using PhxhSDK;
public class RewardManager
{
private Dictionary<int, Reward> _dataDic;
private List<Reward> _dataList;
private static RewardManager _instance;
public static readonly int NO_COUNT = -1;
private RewardManager()
{
_ReadData();
}
public static RewardManager Instance
{
get
{
if (_instance == null)
{
_instance = new RewardManager();
}
return _instance;
}
}
private void _ReadData()
{
var table = TableManager.Instance.Tables;
if (table == null)
{
return;
}
_dataList = new List<Reward>();
_dataDic = new Dictionary<int, Reward>();
var dataL = table.Rewards.DataList;
if (dataL.Count > 0)
{
var lastID = -1;
int curIdx = -1;
for (int i = 0; i < dataL.Count; i++)
{
var data = dataL[i];
if (lastID == data.Id)
{
var reward = _dataList[curIdx];
int num = NO_COUNT;
// if (data.MaxCount == data.MinCount)
// {
num = data.MinCount;
//}
reward.AddItem(data.ItemID, num);
continue;
}
lastID = data.Id;
var newReward = new Reward(data);
int curNum = NO_COUNT;
// if (data.MaxCount == data.MinCount)
// {
curNum = data.MinCount;
//}
newReward.AddItem(data.ItemID, curNum);
_dataList.Add(newReward);
_dataDic.Add(newReward.ID, newReward);
++curIdx;
}
}
}
public Reward Get(int rewardId)
{
if (_dataDic.TryGetValue(rewardId, out var value))
{
return value;
}
return null;
}
}
public class Reward
{
private RewardItemList _itemList;
public readonly int ID;
public readonly DataRewards Cfg;
public RewardItemList ItemList=> _itemList;
public Reward(DataRewards data)
{
ID = data.Id;
Cfg = data;
_itemList = new RewardItemList(ID);
}
public void AddItem(int id, int num)
{
_itemList.AddItem(id, num);
}
public void RemoveItem(int id)
{
_itemList.RemoveByID(id);
}
}
public class RewardItemList
{
public readonly int RewardID;
private List<int> _ids;
private List<RewardItem> _list;
public int Count
{
get
{
if (_ids != null)
{
return _ids.Count;
}
return 0;
}
}
public RewardItemList(int rewardId)
{
RewardID = rewardId;
_ids = new List<int>();
_list = new List<RewardItem>();
}
public void AddItem(int id, int count)
{
if (_ids.Contains(id))
{
var idx = _ids.IndexOf(id);
_list[idx] = new RewardItem(id, count);
}
_ids.Add(id);
_list.Add(new RewardItem(id, count));
}
public List<RewardItem> Get()
{
return _list;
}
public RewardItem GetItem(int idx)
{
if (_list.Count <= 0)
{
return null;
}
return _list[idx];
}
public RewardItem GetItemByID(int id)
{
var item = _list.FirstOrDefault(item => item.ID == id);
return item;
}
public void RemoveByID(int id)
{
var item = GetItemByID(id);
if (item == null)
{
return;
}
_list.Remove(item);
}
}
public class RewardItem
{
public readonly int ID;
public readonly int Count;
private DataItem _config;
public bool Valid => _config != null;
public DataItem Data
{
get { return _config; }
}
public RewardItem(int id, int num)
{
ID = id;
Count = num;
_config = TableManager.Instance.Tables.Item.Get(id);
// if (_config == null)
// {
// DebugUtil.LogError($"item config is null! id:{id}");
// }
}
//展示文本,如钻石x10
public string ShowText
{
get
{
if (!Valid)
return default;
return $"{CommonUtils.GetLocalizeText(_config.NameLocal)}x{Count}";
}
}
public string ShowCountText
{
get
{
if (!Valid)
return default;
return $"x{Count}";
}
}
public string ImagePath
{
get
{
if (!Valid)
return default;
return _config.IconPath;
}
}
}