Implement more UX and cards for other distros

This commit is contained in:
2026-07-06 15:37:12 +02:00
parent 8b6c6235c2
commit 68dc13c60d
31 changed files with 759 additions and 16 deletions
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Resolves persisted card ids to immutable card definitions.
/// </summary>
public sealed class CardDatabase : ScriptableObject
{
[SerializeField] private List<CardDefinition> allCards = new();
public IReadOnlyList<CardDefinition> AllCards => allCards;
public CardDefinition FindById(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return null;
}
for (int i = 0; i < allCards.Count; i++)
{
CardDefinition card = allCards[i];
if (card != null && string.Equals(card.Id, id, StringComparison.OrdinalIgnoreCase))
{
return card;
}
}
return null;
}
}
}
+2
View File
@@ -12,6 +12,7 @@ namespace KernelPanic.Data
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField] private string description;
[SerializeField] private string flavorText;
[SerializeField] private Language language;
[SerializeField] private Rarity rarity;
[SerializeField] private int cycleCost;
@@ -25,6 +26,7 @@ namespace KernelPanic.Data
public string Id => id;
public string DisplayName => displayName;
public string Description => description;
public string FlavorText => flavorText;
public Language Language => language;
public Rarity Rarity => rarity;
public int CycleCost => cycleCost;
+16 -2
View File
@@ -9,12 +9,24 @@ namespace KernelPanic.Data
/// </summary>
public sealed class DistroDefinition : ScriptableObject
{
[System.Serializable]
public struct LanguageBlurb
{
[SerializeField] private Language lang;
[SerializeField] private string blurb;
public Language Lang => lang;
public string Blurb => blurb;
}
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField] private Language primaryLanguage;
[SerializeField] private Language secondaryLanguage;
[SerializeField] private string passiveName;
[SerializeField] private PassiveDefinition passive;
[SerializeField, TextArea] private string description;
[SerializeField, TextArea] private string playstyleSummary;
[SerializeField] private List<LanguageBlurb> languageBlurbs = new();
[SerializeField] private TextAsset asciiArt;
[SerializeField] private Color accentColor = new(0.36f, 1f, 0.57f);
[SerializeField] private int baseUptime;
@@ -26,8 +38,10 @@ namespace KernelPanic.Data
public string DisplayName => displayName;
public Language PrimaryLanguage => primaryLanguage;
public Language SecondaryLanguage => secondaryLanguage;
public string PassiveName => passiveName;
public PassiveDefinition Passive => passive;
public string Description => description;
public string PlaystyleSummary => playstyleSummary;
public IReadOnlyList<LanguageBlurb> LanguageBlurbs => languageBlurbs;
public TextAsset AsciiArt => asciiArt;
public Color AccentColor => accentColor;
public int BaseUptime => baseUptime;
+22
View File
@@ -0,0 +1,22 @@
using UnityEngine;
namespace KernelPanic.Data
{
/// <summary>
/// Defines immutable passive rules and presentation text for a distro.
/// </summary>
public sealed class PassiveDefinition : ScriptableObject
{
[SerializeField] private string id;
[SerializeField] private string displayName;
[SerializeField, TextArea] private string rulesText;
[SerializeField] private string flavorText;
[SerializeField, TextArea] private string designNotes;
public string Id => id;
public string Name => displayName;
public string RulesText => rulesText;
public string FlavorText => flavorText;
public string DesignNotes => designNotes;
}
}