253 lines
5.3 KiB
C#
253 lines
5.3 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);
|
|
|
|
if (_dataDic.ContainsKey(newReward.ID))
|
|
{
|
|
DebugUtil.LogError($"RewardManager: Reward ID {newReward.ID} already exists!");
|
|
continue;
|
|
}
|
|
|
|
_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 int ID;
|
|
public 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;
|
|
}
|
|
}
|
|
} |