using System.Collections.Generic;
using System.Linq;
namespace cfg
{
///
/// TbFishingEventCycleItem 的扩展方法
/// 提供通过物品ID反向查询活动配置的能力
///
public static class TbFishingEventCycleItemExtensions
{
// 按物品ID索引的缓存,用于反向查询
private static Dictionary _itemIdIndex;
private static readonly object _lock = new object();
///
/// 初始化物品ID索引(在 Tables 初始化后调用)
///
public static void BuildItemIdIndex(this TbFishingEventCycleItem table)
{
lock (_lock)
{
if (_itemIdIndex != null) return; // 已经初始化过
_itemIdIndex = new Dictionary();
foreach (var item in table.DataList)
{
if (item.ItemId > 0)
{
// 如果有重复的 ItemId,使用第一个找到的
if (!_itemIdIndex.ContainsKey(item.ItemId))
{
_itemIdIndex[item.ItemId] = item;
}
}
}
#if UNITY_EDITOR
UnityEngine.Debug.Log($"[TbFishingEventCycleItemExtensions] Built item ID index with {_itemIdIndex.Count} entries");
#endif
}
}
///
/// 根据物品ID查找对应的活动周期配置
///
/// 配置表实例
/// 物品ID
/// 活动周期配置,如果未找到返回 null
public static FishingEventCycleItem FindByItemId(this TbFishingEventCycleItem table, int itemId)
{
// 确保索引已初始化
if (_itemIdIndex == null)
{
table.BuildItemIdIndex();
}
return _itemIdIndex.TryGetValue(itemId, out var config) ? config : null;
}
///
/// 清空索引缓存(用于测试或重新加载配置时)
///
public static void ClearItemIdIndex()
{
lock (_lock)
{
_itemIdIndex = null;
}
}
}
}