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 _dataDic; private List _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(); _dataDic = new Dictionary(); 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 _ids; private List _list; public int Count { get { if (_ids != null) { return _ids.Count; } return 0; } } public RewardItemList(int rewardId) { RewardID = rewardId; _ids = new List(); _list = new List(); } 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 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; } } }