Game/Shop/ShopCatalog.cs

Defines shop data for the game: a ShopConsumable DTO and a static ShopCatalog containing lists of ShopModifier entries (catalog) and ShopConsumable entries (consumables) with IDs, names, icons, costs, rarities and other small properties.

using System.Collections.Generic;

public class ShopConsumable
{
    public string Id        { get; set; }
    public string Name      { get; set; }
    public string Icon      { get; set; }
    public int    Cost      { get; set; }
    public int    Lives     { get; set; }
    public int    StartWave { get; set; }
}

public static class ShopCatalog
{
    /* Catalog List - Season 1 */
    public static readonly List<ShopModifier> All = new()
    {
        // ── Bomb Slots — unlock progressively, cheap-to-expensive ──
        new ShopModifier {
            Id          = ModifierId.BombSlot2,
            Name        = "Twin Loader",
            Description = "Start each wave with 2 bombs instead of 1.",
            Icon        = "💣",
            Cost        = 100,
            Rarity      = ModifierRarity.Common,
        },
        new ShopModifier {
            Id          = ModifierId.BombSlot3,
            Name        = "Triple Loader",
            Description = "Start each wave with 3 bombs. Requires Twin Loader.",
            Icon        = "💣💣",
            Cost        = 500,
            Rarity      = ModifierRarity.Rare,
        },
        new ShopModifier {
            Id          = ModifierId.BombSlot4,
            Name        = "Quad Payload",
            Description = "Start each wave with 4 bombs — maximum loadout.",
            Icon        = "💣💣💣",
            Cost        = 3000,
            Rarity      = ModifierRarity.Epic,
        },

        // ── Common tier — basic upgrades ──
        new ShopModifier {
            Id          = ModifierId.TimerBonus,
            Name        = "Slow Fuse",
            Description = "Extra +5 seconds on wave 1 to plan your opening.",
            Icon        = "⏱️",
            Cost        = 500,
            Rarity      = ModifierRarity.Common,
        },
        new ShopModifier {
            Id          = ModifierId.SniperRange,
            Name        = "Long Shot",
            Description = "Sniper bombs gain +1 range in their direction.",
            Icon        = "🎯",
            Cost        = 800,
            Rarity      = ModifierRarity.Common,
        },
        new ShopModifier {
            Id          = ModifierId.GemsOneHit,
            Name        = "Gem Cutter",
            Description = "Gem chests break in 1 hit instead of 2.",
            Icon        = "💎",
            Cost        = 1000,
            Rarity      = ModifierRarity.Common,
        },
        new ShopModifier {
            Id          = ModifierId.FirstChainDouble,
            Name        = "Overcharged",
            Description = "First chain reaction of each wave gives 2× score.",
            Icon        = "⚡",
            Cost        = 1500,
            Rarity      = ModifierRarity.Common,
        },

        // ── Rare tier — meaningful changes ──
        new ShopModifier {
            Id          = ModifierId.BombChestsNearChest,
            Name        = "Magnetized",
            Description = "Bomb chests spawn next to other chests for easier chains.",
            Icon        = "🧲",
            Cost        = 2500,
            Rarity      = ModifierRarity.Rare,
        },
        new ShopModifier {
            Id          = ModifierId.CrossRangeAfterWave5,
            Name        = "Cross Master",
            Description = "Cross bombs gain +1 range from wave 5 onwards.",
            Icon        = "✛",
            Cost        = 3000,
            Rarity      = ModifierRarity.Rare,
        },
        new ShopModifier {
            Id          = ModifierId.GemScoreBonus,
            Name        = "Gem Polish",
            Description = "Destroying gem chests gives 2× score from that hit.",
            Icon        = "✨",
            Cost        = 3500,
            Rarity      = ModifierRarity.Rare,
        },
    };

    /* Consumables — per-run items (not yet wired into shop UI) */
    public static readonly List<ShopConsumable> Consumables = new()
    {
        new ShopConsumable { Id = "extra_life_1", Name = "Extra Life",  Icon = "❤️",  Cost = 40,  Lives = 1 },
        new ShopConsumable { Id = "extra_life_3", Name = "Life Pack",   Icon = "💖",  Cost = 100, Lives = 3 },
        new ShopConsumable { Id = "head_start",   Name = "Head Start",  Icon = "⚡",  Cost = 60,  StartWave = 3 },
    };
}