server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Managers/StaticData/CardsManager.cs
2026-02-10 18:21:30 +01:00

52 lines
No EOL
1.6 KiB
C#

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<Card> _cachedCards;
private readonly IKeyValueCache<List<Card>> _cardByName;
private readonly IResourceLoader<CardDTO> _cardDao;
public CardsManager(ILongKeyCachedRepository<Card> cachedCards, IKeyValueCache<List<Card>> cardByName, IResourceLoader<CardDTO> cardDao)
{
_cachedCards = cachedCards;
_cardByName = cardByName;
_cardDao = cardDao;
}
public void Initialize()
{
int cardCount = 0;
IReadOnlyList<CardDTO> cards = _cardDao.LoadAsync().GetAwaiter().GetResult();
foreach (CardDTO cardDto in cards)
{
Card card = cardDto.Adapt<Card>();
card.BCards = new List<BCardDTO>();
foreach (BCardDTO bCard in card.Bcards)
{
card.BCards.Add(bCard);
}
_cachedCards.Set(card.Id, card);
_cardByName.GetOrSet(card.Name, () => new List<Card>()).Add(card);
cardCount++;
}
Log.Info($"[DATABASE] Loaded {cardCount} cards.");
}
public List<Card> GetCardByName(string name) => _cardByName.Get(name);
public Card GetCardByCardId(int cardId) => _cachedCards.Get(cardId);
}