# Card Prefab Visual Assembly Reference ## Complete Hierarchy with Components ``` 📦 Card (GameObject) │ 🔧 RectTransform │ 🔧 Card (component) │ 🔧 CardContext (component) │ 🔧 CardAnimator (component) │ 🔧 [Optional] CardInteractionHandler (component) │ ├─📄 CardDisplay (GameObject) │ │ 🔧 Card Display (component) ← Your existing script │ │ │ ├─🖼️ CardImage (Image) │ ├─📝 CardNameText (TextMeshProUGUI) │ ├─🖼️ FrameImage (Image) │ ├─🖼️ OverlayImage (Image) │ ├─🖼️ BackgroundImage (Image) │ └─🖼️ ZoneShapeImage (Image) │ └─🎮 CardStateMachine (GameObject) │ 🔧 AppleMachine (component) ← Pixelplacement StateMachine │ ⚙️ Default State: → IdleState │ ⚙️ Verbose: ☐ (check for debugging) │ ⚙️ Allow Reentry: ☐ │ ⚙️ Return To Default On Disable: ☑ │ ├─🟦 IdleState (GameObject) ← Active when idle │ └─🔧 CardIdleState (component) │ ├─🟦 FlippingState (GameObject) ← Active during flip │ │ 🔧 CardFlippingState (component) │ │ 🔗 Card Back Visual: → CardBackVisual │ │ │ └─🖼️ CardBackVisual (Image) │ ⚙️ Source Image: [Your card back sprite] │ ⚙️ Anchors: Stretch-Stretch │ ⚙️ Left/Right/Top/Bottom: 0 │ ├─🟦 RevealedState (GameObject) ← Active after flip │ └─🔧 CardRevealedState (component) │ ├─🟦 EnlargedNewState (GameObject) ← Active when new card enlarged │ │ 🔧 CardEnlargedNewState (component) │ │ 🔗 New Card Badge: → NewCardBadge │ │ │ └─📋 NewCardBadge (GameObject) │ ⚙️ Anchored Position: (0, 100, 0) ← Top of card │ │ │ ├─🖼️ BadgeBackground (Image) │ │ ⚙️ Source Image: [Badge background sprite] │ │ ⚙️ Size: 150 x 40 │ │ │ └─📝 BadgeText (TextMeshProUGUI) │ ⚙️ Text: "NEW CARD!" │ ⚙️ Font Size: 18 │ ⚙️ Alignment: Center │ ├─🟦 EnlargedRepeatState (GameObject) ← Active when repeat card enlarged │ │ 🔧 CardEnlargedRepeatState (component) │ │ 🔗 Progress Bar Container: → ProgressBarContainer │ │ 🔗 Progress Bar Fill: → BarFill │ │ 🔗 Progress Text: → CountText │ │ ⚙️ Cards To Upgrade: 5 │ │ │ └─📋 ProgressBarContainer (GameObject) │ ⚙️ Anchored Position: (0, -100, 0) ← Bottom of card │ │ │ ├─🖼️ BarBackground (Image) │ │ ⚙️ Source Image: [Progress bar background] │ │ ⚙️ Size: 180 x 20 │ │ ⚙️ Color: Gray │ │ │ ├─🖼️ BarFill (Image) │ │ ⚙️ Source Image: [Same as background] │ │ ⚙️ Image Type: Filled (Horizontal) │ │ ⚙️ Fill Amount: 0.6 (example) │ │ ⚙️ Color: Green/Yellow │ │ ⚙️ Size: Same as BarBackground │ │ │ └─📝 CountText (TextMeshProUGUI) │ ⚙️ Text: "3/5" │ ⚙️ Font Size: 14 │ ⚙️ Alignment: Center │ ├─🟦 DraggingState (GameObject) ← Active during drag │ │ 🔧 CardDraggingState (component) │ │ ⚙️ Drag Scale: 1.1 │ │ ├─🟦 PlacedInSlotState (GameObject) ← Active when in album │ └─🔧 CardPlacedInSlotState (component) │ └─🟦 AlbumEnlargedState (GameObject) ← Active when enlarged from album └─🔧 CardAlbumEnlargedState (component) ``` ## Component Reference Wiring ### On Root "Card" GameObject: #### Card (component) ``` ┌─────────────────────────────────┐ │ Card Component │ ├─────────────────────────────────┤ │ Context: → CardContext │ ← Auto-finds │ Animator: → CardAnimator │ ← Auto-finds │ State Machine: → AppleMachine │ ← Auto-finds in children │ Initial State: "IdleState" │ ← Type manually └─────────────────────────────────┘ ``` #### CardContext (component) ``` ┌──────────────────────────────────────┐ │ CardContext Component │ ├──────────────────────────────────────┤ │ Card Display: → CardDisplay │ ← Drag from hierarchy │ Card Animator: → CardAnimator │ ← Auto-finds │ State Machine: → AppleMachine │ ← Auto-finds in children └──────────────────────────────────────┘ ``` #### CardAnimator (component) ``` ┌──────────────────────────────────────────┐ │ CardAnimator Component │ ├──────────────────────────────────────────┤ │ Config: → CardAnimationConfig (asset) │ ← Drag from Project └──────────────────────────────────────────┘ ``` ### On "CardStateMachine" GameObject: #### AppleMachine (component) ``` ┌────────────────────────────────────────────┐ │ AppleMachine Component │ ├────────────────────────────────────────────┤ │ Default State: → IdleState (GameObject) │ ← Drag from children │ Current State: (runtime only) │ │ Verbose: ☐ │ │ Allow Reentry: ☐ │ │ Return To Default On Disable: ☑ │ └────────────────────────────────────────────┘ ``` ### On State GameObjects: Each state GameObject only has its state component (e.g., CardIdleState). States with owned visuals have additional references: #### FlippingState → CardFlippingState ``` ┌─────────────────────────────────────────┐ │ CardFlippingState Component │ ├─────────────────────────────────────────┤ │ Card Back Visual: → CardBackVisual │ ← Drag child Image └─────────────────────────────────────────┘ ``` #### EnlargedNewState → CardEnlargedNewState ``` ┌─────────────────────────────────────────┐ │ CardEnlargedNewState Component │ ├─────────────────────────────────────────┤ │ New Card Badge: → NewCardBadge │ ← Drag child GameObject └─────────────────────────────────────────┘ ``` #### EnlargedRepeatState → CardEnlargedRepeatState ``` ┌──────────────────────────────────────────────┐ │ CardEnlargedRepeatState Component │ ├──────────────────────────────────────────────┤ │ Progress Bar Container: → ProgressBarCont. │ ← Drag child │ Progress Bar Fill: → BarFill │ ← Drag grandchild │ Progress Text: → CountText │ ← Drag grandchild │ Cards To Upgrade: 5 │ ← Type number └──────────────────────────────────────────────┘ ``` ## Asset Creation ### CardAnimationConfig Asset ``` Project Window: Assets/Data/CardSystem/ └─ 📄 CardAnimationConfig.asset ├─ Flip Duration: 0.6 ├─ Flip Scale Punch: 1.1 ├─ Enlarged Scale: 2.5 ├─ Scale Duration: 0.3 ├─ Hover Height: 10 ├─ Hover Duration: 1.5 ├─ Hover Scale Multiplier: 1.05 ├─ Drag Scale: 1.1 └─ Snap Duration: 0.4 ``` ## Visual Reference - Inactive vs Active States **When idle (IdleState active):** ``` Card (enabled) ├─ CardDisplay (enabled, visible) └─ CardStateMachine (enabled) ├─ IdleState (🟢 ACTIVE/ENABLED) ├─ FlippingState (⚫ inactive) ├─ RevealedState (⚫ inactive) ├─ EnlargedNewState (⚫ inactive) ├─ EnlargedRepeatState (⚫ inactive) ├─ DraggingState (⚫ inactive) ├─ PlacedInSlotState (⚫ inactive) └─ AlbumEnlargedState (⚫ inactive) ``` **During flip (FlippingState active):** ``` Card (enabled) ├─ CardDisplay (disabled during flip, enabled after) └─ CardStateMachine (enabled) ├─ IdleState (⚫ inactive) ├─ FlippingState (🟢 ACTIVE/ENABLED) │ └─ CardBackVisual (🟢 VISIBLE during flip) ├─ RevealedState (⚫ inactive) └─ ... (other states inactive) ``` **When enlarged (EnlargedNewState active):** ``` Card (enabled, scaled up 2.5x) ├─ CardDisplay (enabled, visible, scaled with parent) └─ CardStateMachine (enabled) ├─ IdleState (⚫ inactive) ├─ FlippingState (⚫ inactive) ├─ RevealedState (⚫ inactive) ├─ EnlargedNewState (🟢 ACTIVE/ENABLED) │ └─ NewCardBadge (🟢 VISIBLE) └─ ... (other states inactive) ``` ## Color Coding Legend - 📦 = GameObject (container) - 🔧 = Component attached to GameObject - 🖼️ = Image component (UI visual) - 📝 = TextMeshProUGUI component (UI text) - 📋 = Container GameObject (holds other UI elements) - 📄 = Asset in Project window - 🎮 = State Machine GameObject - 🟦 = State GameObject - 🟢 = Currently active/enabled - ⚫ = Currently inactive/disabled - → = Reference/link to another object - ⚙️ = Property/setting to configure - ☐ = Checkbox unchecked - ☑ = Checkbox checked ## Quick Assembly Checklist Use this while building the prefab: **Root Setup:** - [ ] Create GameObject named "Card" - [ ] Add RectTransform - [ ] Add Card component - [ ] Add CardContext component - [ ] Add CardAnimator component - [ ] Set Card size to 200x280 **CardDisplay:** - [ ] Add CardDisplay child (or drag existing prefab) - [ ] Verify all image/text children exist - [ ] Verify CardDisplay component references are set **State Machine:** - [ ] Add CardStateMachine child GameObject - [ ] Add AppleMachine component to it - [ ] Create 8 state GameObjects as children **State-Owned Visuals:** - [ ] FlippingState: Add CardBackVisual child Image - [ ] EnlargedNewState: Add NewCardBadge child with badge UI - [ ] EnlargedRepeatState: Add ProgressBarContainer with progress UI **Wire References:** - [ ] Card → Context, Animator, StateMachine - [ ] CardContext → CardDisplay, Animator, StateMachine - [ ] CardAnimator → CardAnimationConfig asset - [ ] AppleMachine → Default State (IdleState) - [ ] FlippingState → CardBackVisual - [ ] EnlargedNewState → NewCardBadge - [ ] EnlargedRepeatState → ProgressBarContainer, BarFill, CountText **Test:** - [ ] Enter Play mode - [ ] No console errors on load - [ ] Click card to test state transitions - [ ] Verify visuals show/hide correctly **Save:** - [ ] Drag to Prefabs/UI/CardSystem/ - [ ] Name "Card.prefab" - [ ] Delete hierarchy instance Done! 🎉