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; } } } }