using System; using AppleHills.Data.CardSystem; using Core.SaveLoad; using UnityEngine; namespace UI.CardSystem.StateMachine { /// /// Shared context for card states. /// Provides access to common components and data that states need. /// public class CardContext : MonoBehaviour { [Header("Core Components")] [SerializeField] private CardDisplay cardDisplay; [SerializeField] private CardAnimator cardAnimator; private AppleMachine stateMachine; [Header("Card Data")] private CardData cardData; // Public accessors public CardDisplay CardDisplay => cardDisplay; public CardAnimator Animator => cardAnimator; public AppleMachine StateMachine => stateMachine; public Transform RootTransform => transform; public CardData CardData => cardData; // Runtime state public bool IsNewCard { get; set; } public int RepeatCardCount { get; set; } public bool IsClickable { get; set; } = true; // Events for external coordination (BoosterOpeningPage, etc.) public event Action OnFlipComplete; public event Action OnCardDismissed; public event Action OnCardInteractionComplete; public event Action OnUpgradeTriggered; // Helper methods for states public void FireFlipComplete() => OnFlipComplete?.Invoke(this); public void FireCardDismissed() => OnCardDismissed?.Invoke(this); public void FireCardInteractionComplete() => OnCardInteractionComplete?.Invoke(this); public void FireUpgradeTriggered() => OnUpgradeTriggered?.Invoke(this); private void Awake() { // Auto-find components if not assigned if (cardDisplay == null) cardDisplay = GetComponentInChildren(); if (cardAnimator == null) cardAnimator = GetComponent(); if (stateMachine == null) stateMachine = GetComponentInChildren(); } /// /// Setup the card with data /// public void SetupCard(CardData data, bool isNew = false, int repeatCount = 0) { cardData = data; IsNewCard = isNew; RepeatCardCount = repeatCount; if (cardDisplay != null) { cardDisplay.SetupCard(data); } } /// /// Get the card display component /// public CardDisplay GetCardDisplay() => cardDisplay; } }