private void assertCombinations(Type[][] expectedCombinations, Mod[] actualCombinations) { Assert.AreEqual(expectedCombinations.Length, actualCombinations.Length); Assert.Multiple(() => { for (int i = 0; i < expectedCombinations.Length; ++i) { Type[] expectedTypes = expectedCombinations[i]; Type[] actualTypes = ModUtils.FlattenMod(actualCombinations[i]).Select(m => m.GetType()).ToArray(); Assert.That(expectedTypes, Is.EquivalentTo(actualTypes)); } }); }
public IEnumerable <DifficultyAttributes> CalculateAllLegacyCombinations(CancellationToken cancellationToken = default) { var rulesetInstance = ruleset.CreateInstance(); foreach (var combination in CreateDifficultyAdjustmentModCombinations()) { Mod classicMod = rulesetInstance.CreateAllMods().SingleOrDefault(m => m is ModClassic); var finalCombination = ModUtils.FlattenMod(combination); if (classicMod != null) { finalCombination = finalCombination.Append(classicMod); } yield return(Calculate(finalCombination.ToArray(), cancellationToken)); } }
/// <summary> /// Checks whether a given <see cref="Mod"/> is valid for global selection. /// </summary> /// <param name="mod">The <see cref="Mod"/> to check.</param> /// <returns>Whether <paramref name="mod"/> is a valid mod for online play.</returns> protected virtual bool IsValidMod(Mod mod) => mod.HasImplementation && !ModUtils.FlattenMod(mod).Any(m => m is ModAutoplay);
/// <summary> /// Checks whether a given <see cref="Mod"/> is valid for global selection. /// </summary> /// <param name="mod">The <see cref="Mod"/> to check.</param> /// <returns>Whether <paramref name="mod"/> is a valid mod for online play.</returns> protected virtual bool IsValidMod(Mod mod) => mod.HasImplementation && ModUtils.FlattenMod(mod).All(m => m.UserPlayable);