using UnityEngine; using System.Collections.Generic; /// /// Generates randomized shop names based on shop type and settlement seed /// public static class ShopNameGenerator { private static readonly Dictionary shopNameParts = new Dictionary { [ShopType.Weapons] = ( new string[] { "Iron", "Steel", "Sharp", "Blade", "Sword", "Battle", "War", "Forge", "Smith's", "Master" }, new string[] { "Forge", "Armory", "Smithy", "Workshop", "Arms", "Weapons", "Blades", "Steel", "Works", "Arsenal" } ), [ShopType.Armor] = ( new string[] { "Iron", "Steel", "Shield", "Guard", "Protection", "Battle", "Sturdy", "Strong", "Heavy", "Knight's" }, new string[] { "Armory", "Protection", "Guards", "Shields", "Armor", "Defense", "Gear", "Works", "Smithy", "Hall" } ), [ShopType.Potions] = ( new string[] { "Mystic", "Magic", "Healing", "Wise", "Ancient", "Bubbling", "Crystal", "Elven", "Herbal", "Sacred" }, new string[] { "Potions", "Elixirs", "Brews", "Cauldron", "Remedies", "Apothecary", "Alchemy", "Lab", "Herbs", "Tonics" } ), [ShopType.General] = ( new string[] { "General", "Trading", "Merchant's", "Common", "Useful", "Daily", "Town", "Village", "Traveler's", "Wanderer's" }, new string[] { "Goods", "Store", "Supplies", "Trading Post", "Emporium", "Market", "Shop", "Merchant", "General Store", "Bazaar" } ), [ShopType.Magic] = ( new string[] { "Arcane", "Mystical", "Enchanted", "Magical", "Wizard's", "Sorcerer's", "Ancient", "Ethereal", "Divine", "Celestial" }, new string[] { "Emporium", "Artifacts", "Relics", "Magic", "Enchantments", "Scrolls", "Tomes", "Mysteries", "Wonders", "Sanctum" } ), [ShopType.Tools] = ( new string[] { "Useful", "Handy", "Crafting", "Builder's", "Worker's", "Master", "Quality", "Fine", "Reliable", "Sturdy" }, new string[] { "Tools", "Implements", "Workshop", "Supplies", "Equipment", "Gear", "Utilities", "Hardware", "Crafts", "Works" } ) }; private static readonly string[] keepersNameParts = new string[] { // Male names "Marcus", "Gareth", "Thorin", "Finn", "Aldric", "Bram", "Cael", "Daven", "Erik", "Galen", "Hector", "Ivan", "Joren", "Kane", "Lars", "Magnus", "Nolan", "Owen", "Pike", "Quinn", // Female names "Elara", "Brenna", "Cira", "Delia", "Evelyn", "Fiona", "Greta", "Hilda", "Iris", "Jenna", "Kira", "Luna", "Mira", "Nina", "Olivia", "Piper", "Rose", "Sara", "Tara", "Vera", // Fantasy names "Zephyr", "Xara", "Vex", "Wick", "Yara", "Zane" }; /// /// Generate a randomized shop name based on shop type and seed /// public static string GenerateShopName(ShopType shopType, int seed) { var random = new System.Random(seed); if (!shopNameParts.ContainsKey(shopType)) { return $"Unknown {shopType} Shop"; } var parts = shopNameParts[shopType]; var prefix = parts.prefixes[random.Next(parts.prefixes.Length)]; var suffix = parts.suffixes[random.Next(parts.suffixes.Length)]; // Sometimes use "The" prefix var useThe = random.NextDouble() > 0.6; var shopName = useThe ? $"The {prefix} {suffix}" : $"{prefix} {suffix}"; return shopName; } /// /// Generate a randomized shopkeeper name based on seed /// public static string GenerateShopkeeperName(int seed) { var random = new System.Random(seed); return keepersNameParts[random.Next(keepersNameParts.Length)]; } /// /// Generate a shop name with embedded settlement and shop type info for uniqueness /// public static string GenerateUniqueShopName(ShopType shopType, string settlementName, Vector2Int position) { // Create a unique seed based on settlement name, position, and shop type var combinedSeed = settlementName.GetHashCode() ^ position.GetHashCode() ^ shopType.GetHashCode(); return GenerateShopName(shopType, combinedSeed); } /// /// Generate a shopkeeper name with embedded settlement and shop type info for uniqueness /// public static string GenerateUniqueShopkeeperName(ShopType shopType, string settlementName, Vector2Int position) { // Create a unique seed based on settlement name, position, and shop type (offset for different result) var combinedSeed = (settlementName.GetHashCode() ^ position.GetHashCode() ^ shopType.GetHashCode()) + 12345; return GenerateShopkeeperName(combinedSeed); } }