using AppleHills.Data.CardSystem; using Core.SaveLoad; using UnityEngine; namespace UI.CardSystem.StateMachine.States { /// /// Revealed state - card is flipped and visible at normal size. /// This is the "waiting" state: /// - In booster flow: waiting for all cards to finish before animating to album /// - In album placement flow: waiting to be dragged to a slot /// Shows small idle badges for NEW or REPEAT cards. /// public class CardRevealedState : AppleState { [Header("State-Owned Visuals")] [SerializeField] private UnityEngine.GameObject newCardIdleBadge; [SerializeField] private UnityEngine.GameObject repeatCardIdleBadge; private CardContext _context; private void Awake() { _context = GetComponentInParent(); } public override void OnEnterState() { // Play reveal audio AudioManager.Instance.LoadAndPlayUIAudio("random_paper_putdown", false); // Ensure card front is visible and facing camera if (_context.CardDisplay != null) { _context.CardDisplay.gameObject.SetActive(true); _context.CardDisplay.transform.localRotation = Quaternion.Euler(0, 0, 0); } // Show appropriate idle badge unless suppressed if (_context.BoosterContext.SuppressRevealBadges) { if (newCardIdleBadge != null) newCardIdleBadge.SetActive(false); if (repeatCardIdleBadge != null) repeatCardIdleBadge.SetActive(false); } else { bool isNew = Data.CardSystem.CardSystemManager.Instance.IsCardNew(_context.CardData, out CardData existingCard); int currentOwnedCount = (existingCard != null) ? existingCard.CopiesOwned : 0; if (isNew) { if (newCardIdleBadge != null) newCardIdleBadge.SetActive(true); if (repeatCardIdleBadge != null) repeatCardIdleBadge.SetActive(false); } else if (currentOwnedCount > 0) { if (newCardIdleBadge != null) newCardIdleBadge.SetActive(false); if (repeatCardIdleBadge != null) repeatCardIdleBadge.SetActive(true); } else { if (newCardIdleBadge != null) newCardIdleBadge.SetActive(false); if (repeatCardIdleBadge != null) repeatCardIdleBadge.SetActive(false); } } // Fire reveal flow complete event (signals booster page that this card is done) _context.BoosterContext.NotifyRevealComplete(); } private void OnDisable() { // Hide badges when leaving state if (newCardIdleBadge != null) newCardIdleBadge.SetActive(false); if (repeatCardIdleBadge != null) repeatCardIdleBadge.SetActive(false); } } }