64 lines
2.9 KiB
C#
64 lines
2.9 KiB
C#
namespace Vanguard.Rules.Cards;
|
||
|
||
/// <summary>
|
||
/// Логическая карта. Одна на имя: параллельные арты и переиздания ссылаются сюда через nameId.
|
||
/// Лимит копий в колоде считается по этому объекту, а не по принту.
|
||
/// </summary>
|
||
public sealed record CardDefinition
|
||
{
|
||
public required string NameId { get; init; }
|
||
public required string NameEn { get; init; }
|
||
public string? NameRu { get; init; }
|
||
|
||
public required CardType Type { get; init; }
|
||
public required int Grade { get; init; }
|
||
public required int Power { get; init; }
|
||
public required int Shield { get; init; }
|
||
public int Critical { get; init; } = 1;
|
||
|
||
public TriggerType Trigger { get; init; } = TriggerType.None;
|
||
public required Clan Clan { get; init; }
|
||
|
||
/// <summary>Sentinel (Perfect Guard). Лимит — 4 карты в колоде.</summary>
|
||
public bool IsSentinel { get; init; }
|
||
|
||
/// <summary>Restraint: не может атаковать.</summary>
|
||
public bool IsRestraint { get; init; }
|
||
|
||
/// <summary>
|
||
/// Явное переопределение печатной поддержки. null — по умолчанию:
|
||
/// карты 0 и 1 ранга поддерживают, остальные нет.
|
||
/// </summary>
|
||
public bool? BoostOverride { get; init; }
|
||
|
||
/// <summary>Печатная способность поддержки. Эффекты могут изменить её в рантайме.</summary>
|
||
public bool HasBoost => BoostOverride ?? Grade <= 1;
|
||
|
||
/// <summary>Явное переопределение печатного перехвата. null — по умолчанию 2 ранг.</summary>
|
||
public bool? InterceptOverride { get; init; }
|
||
|
||
/// <summary>Печатный перехват: по умолчанию у карт 2 ранга.</summary>
|
||
public bool HasIntercept => InterceptOverride ?? Grade == 2;
|
||
|
||
public string? TextEn { get; init; }
|
||
public string? TextRu { get; init; }
|
||
|
||
/// <summary>Grade 0 без триггера — кандидат в стартовый вэнгард.</summary>
|
||
public bool IsStartingVanguardCandidate => Grade == 0 && Trigger == TriggerType.None;
|
||
}
|
||
|
||
/// <summary>Конкретный принт: номер + арт. Единица коллекции и бустера.</summary>
|
||
public sealed record CardPrinting
|
||
{
|
||
public required string PrintingId { get; init; }
|
||
public required string NameId { get; init; }
|
||
public required Rarity Rarity { get; init; }
|
||
public string? ImageKey { get; init; }
|
||
|
||
/// <summary>Параллельный арт (BT01/S01…S12).</summary>
|
||
public bool IsParallel { get; init; }
|
||
|
||
/// <summary>Для параллельного арта — принт, к которому он привязан.</summary>
|
||
public string? BasePrintingId { get; init; }
|
||
}
|