70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace KernelPanic.Data
|
|
{
|
|
public sealed class PackageDatabase : ScriptableObject
|
|
{
|
|
[SerializeField] private List<PackageDefinition> allPackages = new();
|
|
|
|
public IReadOnlyList<PackageDefinition> AllPackages => allPackages;
|
|
|
|
public PackageDefinition FindById(string id)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(id))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
for (int i = 0; i < allPackages.Count; i++)
|
|
{
|
|
PackageDefinition package = allPackages[i];
|
|
if (package != null && string.Equals(package.Id, id, System.StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
return package;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public PackageDefinition FindByRarity(int rarity, int index)
|
|
{
|
|
int safeRarity = Mathf.Clamp(rarity, 1, 5);
|
|
int matchIndex = 0;
|
|
for (int i = 0; i < allPackages.Count; i++)
|
|
{
|
|
PackageDefinition package = allPackages[i];
|
|
if (package == null || package.Rarity != safeRarity)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (matchIndex == index)
|
|
{
|
|
return package;
|
|
}
|
|
|
|
matchIndex++;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public int CountByRarity(int rarity)
|
|
{
|
|
int safeRarity = Mathf.Clamp(rarity, 1, 5);
|
|
int count = 0;
|
|
for (int i = 0; i < allPackages.Count; i++)
|
|
{
|
|
if (allPackages[i] != null && allPackages[i].Rarity == safeRarity)
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
|
|
return count;
|
|
}
|
|
}
|
|
}
|