using System.Collections.Generic; using System; using KernelPanic.Core; using KernelPanic.Data; namespace KernelPanic.Run { /// /// Describes the player choices and starting deck used to begin a run. /// public sealed class RunConfig { public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList startingDeck) : this(distro, primaryLanguage, secondaryLanguage, startingDeck, Array.Empty(), 0, 1) { } public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList startingDeck, int runSeed) : this(distro, primaryLanguage, secondaryLanguage, startingDeck, Array.Empty(), runSeed, 1) { } public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList startingDeck, int runSeed, int distroVersion) : this(distro, primaryLanguage, secondaryLanguage, startingDeck, Array.Empty(), runSeed, distroVersion) { } public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList startingDeck, IReadOnlyList equippedPackages, int runSeed, int distroVersion) : this(distro, primaryLanguage, secondaryLanguage, startingDeck, ToInstances(equippedPackages), runSeed, distroVersion) { } public RunConfig(DistroDefinition distro, Language primaryLanguage, Language secondaryLanguage, IReadOnlyList startingDeck, IReadOnlyList equippedPackages, int runSeed, int distroVersion) { Distro = distro; PrimaryLanguage = primaryLanguage; SecondaryLanguage = secondaryLanguage; StartingDeck = startingDeck; EquippedPackages = equippedPackages ?? Array.Empty(); RunSeed = runSeed; DistroVersion = UnityEngine.Mathf.Clamp(distroVersion, 1, KernelPanic.Meta.GachaTuning.MaxVersion); } public DistroDefinition Distro { get; } public Language PrimaryLanguage { get; } public Language SecondaryLanguage { get; } public IReadOnlyList StartingDeck { get; } public IReadOnlyList EquippedPackages { get; } public int RunSeed { get; } public int DistroVersion { get; } private static IReadOnlyList ToInstances(IReadOnlyList packages) { if (packages == null) { return Array.Empty(); } List instances = new(); for (int i = 0; i < packages.Count; i++) { if (packages[i] != null) { instances.Add(new PackageInstance(packages[i], 0)); } } return instances; } } }