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;
}
}
}