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) { foreach (var data in dataL) { Reward reward; if (!_dataDic.TryGetValue(data.Id, out reward)) { reward = new Reward(data); _dataList.Add(reward); _dataDic.Add(data.Id, reward); } int num = data.MinCount; reward.AddItem(data.ItemID, num); } } } 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); return; } _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; } } }