using Data; using Item; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace Managers { public class ItemResourceManager : Utils.Singleton, ILaunchManager { private ItemResource defaultItem; private readonly Dictionary _items = new(); private readonly Dictionary> _itemsByName = new(); // 保持按显示名称查找的字典 public string StepDescription => "加载物品定义中"; public void Init() { defaultItem = ItemResource.GetDefault(); var baseItemDefs = Managers.DefineManager.Instance.QueryDefinesByType(); var weaponDefs = Managers.DefineManager.Instance.QueryDefinesByType(); var allDefs = new List(); if (baseItemDefs != null) allDefs.AddRange(baseItemDefs); if (weaponDefs != null) allDefs.AddRange(weaponDefs); if (allDefs.Count == 0) { Debug.LogWarning("ItemResourceManager: No ItemDef or WeaponDef found to initialize."); return; } foreach (var def in allDefs) { if (_items.ContainsKey(def.defName)) { Debug.LogError( $"ItemResourceManager: Duplicate itemDef.defName found: {def.defName}. Skipping this item."); continue; } Item.ItemResource itemResource; if (def is WeaponDef currentWeaponDef) { itemResource = new Item.WeaponResource( currentWeaponDef ); } else { itemResource = new Item.ItemResource( def ); } _items.Add(def.defName, itemResource); if (!_itemsByName.ContainsKey(itemResource.Name)) { _itemsByName.Add(itemResource.Name, new List()); } _itemsByName[itemResource.Name].Add(itemResource); } } public Item.ItemResource GetItem(string defName) { return _items.GetValueOrDefault(defName, null); } public Item.ItemResource FindItemByName(string itemName) { if (string.IsNullOrEmpty(itemName)) return null; return _itemsByName.GetValueOrDefault(itemName)?.FirstOrDefault(); } public List FindAllItemsByName(string itemName) { if (string.IsNullOrEmpty(itemName)) return new List(); return _itemsByName.GetValueOrDefault(itemName, new List()); } public void Clear() { _items.Clear(); _itemsByName.Clear(); } } }