using UnityEngine; using UnityEngine.UIElements; #if UNITY_EDITOR using UnityEditor; #endif /// /// Helper component to ensure the shop system is properly configured /// Add this to any GameObject in the MainTeamSelectScene to automatically setup the shop /// public class ShopSystemSetup : MonoBehaviour { [Header("Shop Configuration")] [Tooltip("The name of the shop")] public string shopName = "General Store"; [Header("Auto-Setup Options")] [Tooltip("Automatically create an ItemShopManager if none exists")] public bool autoCreateShopManager = true; [Tooltip("Automatically load and verify items on start")] public bool autoVerifyItems = true; [Header("Debug Options")] [Tooltip("Show debug information in console")] public bool enableDebugLogging = false; void Start() { if (autoCreateShopManager) { SetupShopManager(); } if (autoVerifyItems) { VerifyItems(); } } void SetupShopManager() { // Check if ItemShopManager already exists ItemShopManager existingManager = FindFirstObjectByType(); if (existingManager != null) { if (enableDebugLogging) Debug.Log($"ItemShopManager already exists on '{existingManager.gameObject.name}'"); return; } // Check for old SimpleShopManager and warn SimpleShopManager oldManager = FindFirstObjectByType(); if (oldManager != null) { Debug.LogWarning($"Found SimpleShopManager on '{oldManager.gameObject.name}'. Please use the migration tool: RPG > Migrate Shop System"); return; } // Find a suitable GameObject to add the shop to GameObject shopObject = null; // Look for existing shop-related GameObjects GameObject[] allObjects = FindObjectsByType(FindObjectsSortMode.None); foreach (GameObject obj in allObjects) { if (obj.name.ToLower().Contains("shop")) { shopObject = obj; break; } } // If no shop object found, use this GameObject if (shopObject == null) { shopObject = this.gameObject; } // Add ItemShopManager if it doesn't exist ItemShopManager shopManager = shopObject.GetComponent(); if (shopManager == null) { shopManager = shopObject.AddComponent(); shopManager.shopName = shopName; if (enableDebugLogging) Debug.Log($"Created ItemShopManager on '{shopObject.name}'"); } // Ensure UIDocument exists UIDocument uiDocument = shopObject.GetComponent(); if (uiDocument == null) { uiDocument = shopObject.AddComponent(); if (enableDebugLogging) Debug.Log($"Added UIDocument component to '{shopObject.name}'"); } // Try to find and assign ShopUI.uxml if (uiDocument.visualTreeAsset == null) { var shopUI = Resources.Load("UI/ShopUI"); if (shopUI == null) { // Try alternative paths string[] possiblePaths = { "ShopUI", "UI/ShopUI", "TeamSelectOverview/ShopUI" }; foreach (string path in possiblePaths) { shopUI = Resources.Load(path); if (shopUI != null) { if (enableDebugLogging) Debug.Log($"Found ShopUI at path: {path}"); break; } } } if (shopUI != null) { uiDocument.visualTreeAsset = shopUI; if (enableDebugLogging) Debug.Log("Assigned ShopUI.uxml to UIDocument"); } else { Debug.LogWarning("Could not find ShopUI.uxml. Please assign it manually to the UIDocument component."); } } // Set up panel settings with proper sorting order SetupPanelSettings(uiDocument); } void SetupPanelSettings(UIDocument uiDoc) { // First try to find and reuse existing panel settings from other UI var existingUI = GameObject.Find("TravelUI")?.GetComponent(); if (existingUI?.panelSettings != null) { uiDoc.panelSettings = existingUI.panelSettings; if (enableDebugLogging) Debug.Log("✓ Panel Settings assigned from TravelUI"); } else { // Try to find from MainTeamSelectScript or other UI components var mainTeamSelect = FindFirstObjectByType(); if (mainTeamSelect != null) { var mainUIDoc = mainTeamSelect.GetComponent(); if (mainUIDoc?.panelSettings != null) { uiDoc.panelSettings = mainUIDoc.panelSettings; if (enableDebugLogging) Debug.Log("✓ Panel Settings assigned from MainTeamSelectScript"); } } } // If still no panel settings, try to find any PanelSettings asset if (uiDoc.panelSettings == null) { #if UNITY_EDITOR var panelSettingsGuids = UnityEditor.AssetDatabase.FindAssets("t:PanelSettings"); if (panelSettingsGuids.Length > 0) { var path = UnityEditor.AssetDatabase.GUIDToAssetPath(panelSettingsGuids[0]); var settings = UnityEditor.AssetDatabase.LoadAssetAtPath(path); uiDoc.panelSettings = settings; if (enableDebugLogging) Debug.Log($"✓ Panel Settings auto-assigned: {settings.name}"); } #endif } // Set proper sorting order (> 2 as requested) uiDoc.sortingOrder = 5; // Higher than 2 to ensure shop displays on top if (uiDoc.panelSettings != null) { // Make sure panel settings also have a high sorting order uiDoc.panelSettings.sortingOrder = 5; if (enableDebugLogging) Debug.Log($"✓ Shop UI sorting order set to {uiDoc.sortingOrder}"); } else { Debug.LogWarning("⚠ Could not assign Panel Settings. You may need to assign it manually."); } } void VerifyItems() { // Load all items from Resources Item[] items = Resources.LoadAll("Items"); if (items.Length == 0) { if (enableDebugLogging) { Debug.LogWarning("No Item ScriptableObjects found in Resources/Items folder."); Debug.Log("To create sample items, use: RPG > Create Sample Items"); Debug.Log("Or create your own items using: Create > RPG > Items"); } } else { if (enableDebugLogging) { Debug.Log($"Found {items.Length} items for the shop:"); foreach (Item item in items) { Debug.Log($" - {item.itemName} ({item.itemType}) - {item.GetCostString()}"); } } } // Check for items in the direct Resources folder as well Item[] directItems = Resources.LoadAll(""); int additionalItems = 0; foreach (Item item in directItems) { bool alreadyCounted = false; foreach (Item folderItem in items) { if (item == folderItem) { alreadyCounted = true; break; } } if (!alreadyCounted) { additionalItems++; if (enableDebugLogging) Debug.Log($" - {item.itemName} (found in Resources root)"); } } if (additionalItems > 0 && enableDebugLogging) { Debug.Log($"Also found {additionalItems} additional items in Resources root folder"); } } [ContextMenu("Force Setup Shop")] public void ForceSetupShop() { SetupShopManager(); } [ContextMenu("Verify Items")] public void ForceVerifyItems() { VerifyItems(); } [ContextMenu("Full Shop Verification")] public void FullVerification() { Debug.Log("=== Shop System Full Verification ==="); SetupShopManager(); VerifyItems(); // Additional checks ItemShopManager shopManager = FindFirstObjectByType(); if (shopManager != null) { UIDocument uiDoc = shopManager.GetComponent(); if (uiDoc != null && uiDoc.visualTreeAsset != null) { Debug.Log("✓ Shop system appears to be fully configured"); } else { Debug.LogWarning("⚠ Shop system needs UI configuration"); } } else { Debug.LogError("✗ No ItemShopManager found"); } Debug.Log("=== Verification Complete ==="); } // Cleanup method to prevent interference void OnValidate() { // Ensure this component doesn't interfere with the actual shop if (string.IsNullOrEmpty(shopName)) { shopName = "General Store"; } } }