Files
AppleHillsProduction/docs/cards_wip/card_prefab_visual_reference.md

311 lines
12 KiB
Markdown
Raw Normal View History

2025-11-11 21:03:05 +01:00
# 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! 🎉