using UnityEditor; using UnityEngine; using AppleHills.Data.CardSystem; using Data.CardSystem; using Core; using UI.CardSystem; using UnityEngine.UI; using System.Collections.Generic; namespace Editor.CardSystem { /// /// Editor window for testing the Card System in play mode. /// Provides buttons to test core functionalities like adding booster packs, opening packs, and generating cards. /// public class CardSystemTesterWindow : EditorWindow { // Test Settings private int boosterPacksToAdd = 3; private int cardsToGenerate = 10; private bool autoOpenPacksWhenAdded = false; // Debug Info private int currentBoosterCount; private int totalCardsInCollection; private string lastActionMessage = ""; // UI State private Vector2 scrollPosition; private CardAlbumUI cachedCardAlbumUI; [MenuItem("AppleHills/Card System Tester")] public static void ShowWindow() { var window = GetWindow(false, "Card System Tester", true); window.minSize = new Vector2(400, 500); } private void OnEnable() { EditorApplication.playModeStateChanged += OnPlayModeStateChanged; } private void OnDisable() { EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; } private void OnPlayModeStateChanged(PlayModeStateChange state) { if (state == PlayModeStateChange.EnteredPlayMode) { cachedCardAlbumUI = null; RefreshDebugInfo(); } else if (state == PlayModeStateChange.ExitingPlayMode) { cachedCardAlbumUI = null; lastActionMessage = ""; } Repaint(); } private void OnGUI() { scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); // Header EditorGUILayout.Space(10); EditorGUILayout.LabelField("Card System Tester", EditorStyles.boldLabel); EditorGUILayout.HelpBox("This tool allows you to test the card system in play mode. " + "Enter play mode to enable the testing functions.", MessageType.Info); EditorGUILayout.Space(10); // Test Settings Section DrawTestSettings(); EditorGUILayout.Space(10); // Debug Info Section DrawDebugInfo(); EditorGUILayout.Space(10); // Test Actions Section DrawTestActions(); EditorGUILayout.EndScrollView(); } private void DrawTestSettings() { EditorGUILayout.LabelField("Test Settings", EditorStyles.boldLabel); EditorGUI.BeginDisabledGroup(!Application.isPlaying); boosterPacksToAdd = EditorGUILayout.IntSlider("Booster Packs to Add", boosterPacksToAdd, 1, 10); cardsToGenerate = EditorGUILayout.IntSlider("Cards to Generate", cardsToGenerate, 1, 100); autoOpenPacksWhenAdded = EditorGUILayout.Toggle("Auto-Open Packs When Added", autoOpenPacksWhenAdded); EditorGUI.EndDisabledGroup(); } private void DrawDebugInfo() { EditorGUILayout.LabelField("Debug Info", EditorStyles.boldLabel); if (Application.isPlaying) { EditorGUI.BeginDisabledGroup(true); EditorGUILayout.IntField("Current Booster Count", currentBoosterCount); EditorGUILayout.IntField("Total Cards in Collection", totalCardsInCollection); EditorGUI.EndDisabledGroup(); if (!string.IsNullOrEmpty(lastActionMessage)) { EditorGUILayout.Space(5); EditorGUILayout.HelpBox(lastActionMessage, MessageType.None); } EditorGUILayout.Space(5); if (GUILayout.Button("Refresh Debug Info")) { RefreshDebugInfo(); } } else { EditorGUILayout.HelpBox("Debug info available in play mode.", MessageType.Warning); } } private void DrawTestActions() { EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel); if (!Application.isPlaying) { EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Warning); return; } // Booster Pack Actions EditorGUILayout.Space(5); EditorGUILayout.LabelField("Booster Pack Actions", EditorStyles.miniBoldLabel); if (GUILayout.Button("Add Booster Packs", GUILayout.Height(30))) { AddBoosterPacks(); } if (GUILayout.Button("Open Card Menu", GUILayout.Height(30))) { SimulateBackpackClick(); } if (GUILayout.Button("Open Booster Pack", GUILayout.Height(30))) { OpenBoosterPack(); } if (GUILayout.Button("Open Album View", GUILayout.Height(30))) { OpenAlbumView(); } // Card Generation Actions EditorGUILayout.Space(10); EditorGUILayout.LabelField("Card Generation Actions", EditorStyles.miniBoldLabel); if (GUILayout.Button("Generate Random Cards", GUILayout.Height(30))) { GenerateRandomCards(); } EditorGUILayout.Space(5); // Danger Zone EditorGUILayout.Space(10); EditorGUILayout.LabelField("Danger Zone", EditorStyles.miniBoldLabel); GUI.backgroundColor = new Color(1f, 0.6f, 0.6f); if (GUILayout.Button("Clear All Cards", GUILayout.Height(30))) { if (EditorUtility.DisplayDialog("Clear All Cards", "Are you sure you want to clear all cards from the inventory? This cannot be undone in this play session.", "Clear All", "Cancel")) { ClearAllCards(); } } GUI.backgroundColor = Color.white; } // Refresh the debug information private void RefreshDebugInfo() { if (!Application.isPlaying) return; if (CardSystemManager.Instance != null) { currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount(); totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count; Repaint(); } } private CardAlbumUI GetCardAlbumUI() { if (cachedCardAlbumUI == null) { cachedCardAlbumUI = Object.FindAnyObjectByType(); if (cachedCardAlbumUI == null) { lastActionMessage = "Error: No CardAlbumUI found in the scene!"; Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage); Repaint(); } } return cachedCardAlbumUI; } // Test Action Methods private void AddBoosterPacks() { if (CardSystemManager.Instance != null) { CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd); lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)"; Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}"); RefreshDebugInfo(); if (autoOpenPacksWhenAdded && GetCardAlbumUI() != null) { SimulateBackpackClick(); cachedCardAlbumUI.OpenBoosterPack(); } } else { lastActionMessage = "Error: CardSystemManager instance not found!"; Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage); Repaint(); } } private void SimulateBackpackClick() { CardAlbumUI cardAlbumUI = GetCardAlbumUI(); if (cardAlbumUI != null) { if (cardAlbumUI.BackpackIcon != null) { Button backpackButton = cardAlbumUI.BackpackIcon.GetComponent