using System.Collections.Generic; using Mapster; using PhoenixLib.Caching; using PhoenixLib.Logging; using WingsAPI.Data.GameData; using WingsEmu.DTOs.BCards; using WingsEmu.DTOs.Buffs; using WingsEmu.Game.Buffs; using WingsEmu.Game.Managers.StaticData; namespace WingsEmu.Plugins.BasicImplementations.Managers.StaticData; public class CardsManager : ICardsManager { private readonly ILongKeyCachedRepository _cachedCards; private readonly IKeyValueCache> _cardByName; private readonly IResourceLoader _cardDao; public CardsManager(ILongKeyCachedRepository cachedCards, IKeyValueCache> cardByName, IResourceLoader cardDao) { _cachedCards = cachedCards; _cardByName = cardByName; _cardDao = cardDao; } public void Initialize() { int cardCount = 0; IReadOnlyList cards = _cardDao.LoadAsync().GetAwaiter().GetResult(); foreach (CardDTO cardDto in cards) { Card card = cardDto.Adapt(); card.BCards = new List(); foreach (BCardDTO bCard in card.Bcards) { card.BCards.Add(bCard); } _cachedCards.Set(card.Id, card); _cardByName.GetOrSet(card.Name, () => new List()).Add(card); cardCount++; } Log.Info($"[DATABASE] Loaded {cardCount} cards."); } public List GetCardByName(string name) => _cardByName.Get(name); public Card GetCardByCardId(int cardId) => _cachedCards.Get(cardId); }