From b157be8723b767d37d96e58a827cbff2a900247a Mon Sep 17 00:00:00 2001 From: fretuks Date: Sun, 5 Jul 2026 17:06:05 +0200 Subject: [PATCH] refactor card systems --- Assets/Data/Distros/Ubuntu.asset | 7 +- Assets/Scenes/MainMenuScene.unity | 1 + Assets/Scripts/Data/CardDefinition.cs | 4 + Assets/Scripts/Meta/SaveService.cs | 19 + Assets/Scripts/UI/MainMenuController.cs | 545 +++++++++++++++++++++++- Assets/UI/CollectionScreen.uxml | 4 + Assets/UI/MainMenu.uss | 101 +++++ Assets/UI/MainMenu.uxml | 9 + 8 files changed, 688 insertions(+), 2 deletions(-) diff --git a/Assets/Data/Distros/Ubuntu.asset b/Assets/Data/Distros/Ubuntu.asset index ba174de..eb51237 100644 --- a/Assets/Data/Distros/Ubuntu.asset +++ b/Assets/Data/Distros/Ubuntu.asset @@ -23,4 +23,9 @@ MonoBehaviour: baseUptime: 60 baseRam: 5 baseCyclesPerTurn: 3 - exclusiveCards: [] + exclusiveCards: + - {fileID: 11400000, guid: 0a4f1d1d84564f3cad58b8863e941201, type: 2} + - {fileID: 11400000, guid: 14c5d40f866a4cb6b0a6316e01f42891, type: 2} + - {fileID: 11400000, guid: 2a0f50d541f046fc99c8fb6deef4f1aa, type: 2} + - {fileID: 11400000, guid: 3d57857f3f30419c8be4c44914c5abbe, type: 2} + - {fileID: 11400000, guid: 4cae271a0f4146c59aab74e4c9d6d0f8, type: 2} diff --git a/Assets/Scenes/MainMenuScene.unity b/Assets/Scenes/MainMenuScene.unity index 27ca081..71fcc0f 100644 --- a/Assets/Scenes/MainMenuScene.unity +++ b/Assets/Scenes/MainMenuScene.unity @@ -306,4 +306,5 @@ MonoBehaviour: monospaceFont: {fileID: 0} motdBody: unstable userspace detected; keep a rollback shell open. distroDatabase: {fileID: 11400000, guid: 4d88ca5446fa4d80b2fbd4b12697cb7c, type: 2} + cardDatabase: {fileID: 11400000, guid: 6a8a9f37c98a4a7a9e67ab15d2d22208, type: 2} featuredUnitPanel: {} diff --git a/Assets/Scripts/Data/CardDefinition.cs b/Assets/Scripts/Data/CardDefinition.cs index e7a8a77..37dfd79 100644 --- a/Assets/Scripts/Data/CardDefinition.cs +++ b/Assets/Scripts/Data/CardDefinition.cs @@ -17,6 +17,8 @@ namespace KernelPanic.Data [SerializeField] private int cycleCost; [SerializeField] private ResolutionTrack resolutionTrack; [SerializeField] private bool distroExclusive; + [SerializeField] private bool isToken; + [SerializeField, TextArea] private string designNotes; [SerializeField] private CardDefinition upgradeTarget; [SerializeField] private List effects = new(); @@ -28,6 +30,8 @@ namespace KernelPanic.Data public int CycleCost => cycleCost; public ResolutionTrack ResolutionTrack => resolutionTrack; public bool DistroExclusive => distroExclusive; + public bool IsToken => isToken; + public string DesignNotes => designNotes; public CardDefinition UpgradeTarget => upgradeTarget; public IReadOnlyList Effects => effects; } diff --git a/Assets/Scripts/Meta/SaveService.cs b/Assets/Scripts/Meta/SaveService.cs index 84c0229..c902df1 100644 --- a/Assets/Scripts/Meta/SaveService.cs +++ b/Assets/Scripts/Meta/SaveService.cs @@ -60,6 +60,7 @@ namespace KernelPanic.Meta public bool starterChosen; public List ownedUnitIds = new(); public List bannerPoolIds = new(); + public List cardLoadouts = new(); public static SaveData CreateDefault() { @@ -70,6 +71,24 @@ namespace KernelPanic.Meta { ownedUnitIds ??= new List(); bannerPoolIds ??= new List(); + cardLoadouts ??= new List(); + for (int i = 0; i < cardLoadouts.Count; i++) + { + cardLoadouts[i] ??= new CardLoadoutSaveEntry(); + cardLoadouts[i].EnsureLists(); + } + } + } + + [Serializable] + public sealed class CardLoadoutSaveEntry + { + public string distroId; + public List equippedCardIds = new(); + + public void EnsureLists() + { + equippedCardIds ??= new List(); } } } diff --git a/Assets/Scripts/UI/MainMenuController.cs b/Assets/Scripts/UI/MainMenuController.cs index ad8e01d..049933d 100644 --- a/Assets/Scripts/UI/MainMenuController.cs +++ b/Assets/Scripts/UI/MainMenuController.cs @@ -28,6 +28,7 @@ namespace KernelPanic.UI [SerializeField] private FontAsset monospaceFont; // TODO: Assign a real monospace FontAsset when typography assets exist. [SerializeField] private string motdBody = "unstable userspace detected; keep a rollback shell open."; [SerializeField] private DistroDatabase distroDatabase; + [SerializeField] private CardDatabase cardDatabase; [SerializeField] private FeaturedUnitPanel featuredUnitPanel = new(); private readonly List commandEntries = new(); @@ -36,12 +37,16 @@ namespace KernelPanic.UI private readonly List