public virtual bool IsCheckmated(Player player)
{
Cache<bool> cache = player == Player.White ? checkmatedCacheWhite : checkmatedCacheBlack;
if (cache.CachedAt == Moves.Count)
{
return cache.Value;
}
return cache.UpdateCache(IsInCheck(player) && !HasAnyValidMoves(player), Moves.Count);
}