diff --git a/Assets/Prefabs/Managers/CardSystemManager.prefab b/Assets/Prefabs/Managers/CardSystemManager.prefab index 117a0791..2960eaaf 100644 --- a/Assets/Prefabs/Managers/CardSystemManager.prefab +++ b/Assets/Prefabs/Managers/CardSystemManager.prefab @@ -44,6 +44,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8d80347e4bd04c87be23a9399860783d, type: 3} m_Name: m_EditorClassIdentifier: AppleHillsScripts::Data.CardSystem.CardSystemManager - availableCards: [] + availableCards: + - {fileID: 11400000, guid: 91031de62f795884e8e2ccbaebeebf9b, type: 2} + - {fileID: 11400000, guid: 5d8121cdf52bfe9488b40ed22d649209, type: 2} + - {fileID: 11400000, guid: 8f02c3699de87014bac8c03b96772a4b, type: 2} + - {fileID: 11400000, guid: 8fdeae7881d130f408e0f31c101ab41f, type: 2} + - {fileID: 11400000, guid: 28dbfbd7a6b2cd84b8274bd1126b220b, type: 2} + - {fileID: 11400000, guid: dec49537f6ae6d241acf8275eaa6c653, type: 2} + - {fileID: 11400000, guid: 6afed7a67f64404418f905e7808bf5cb, type: 2} playerInventory: boosterPackCount: 0 diff --git a/Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab b/Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab index b66ca919..27a430a5 100644 --- a/Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab +++ b/Assets/Prefabs/UI/Cards/BoosterOpeningPage.prefab @@ -59,7 +59,6 @@ MonoBehaviour: boosterPackObject: {fileID: 4219171218593530538} cardRevealContainer: {fileID: 8941221421597332096} cardPrefab: {fileID: 3326706725254864107, guid: 594aad71e4281174da8fb4f47a8d19b0, type: 3} - cardBackPrefab: {fileID: 1385409402919571665, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} openBoosterButton: {fileID: 7440552304132850408} continueButton: {fileID: 5542651507418784372} canvasGroup: {fileID: 4766500435349212810} @@ -89,6 +88,7 @@ GameObject: m_Component: - component: {fileID: 8941221421597332096} - component: {fileID: 418545990734724097} + - component: {fileID: 8234492749045289478} m_Layer: 5 m_Name: CardRevealContainer m_TagString: Untagged @@ -107,13 +107,16 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 8423460607813885254} + - {fileID: 4629474234990118368} + - {fileID: 4937963996820091238} m_Father: {fileID: 2026295995152435872} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &418545990734724097 MonoBehaviour: @@ -132,8 +135,8 @@ MonoBehaviour: m_Right: 0 m_Top: 0 m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 0 + m_ChildAlignment: 4 + m_Spacing: 50 m_ChildForceExpandWidth: 1 m_ChildForceExpandHeight: 1 m_ChildControlWidth: 0 @@ -141,6 +144,20 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!114 &8234492749045289478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3540414444069180921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter + m_HorizontalFit: 2 + m_VerticalFit: 2 --- !u!1 &4219171218593530538 GameObject: m_ObjectHideFlags: 0 @@ -1027,3 +1044,309 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1001 &5261682198164265578 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8941221421597332096} + m_Modifications: + - target: {fileID: 1385409402919571665, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Name + value: CardBack + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} +--- !u!224 &8423460607813885254 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + m_PrefabInstance: {fileID: 5261682198164265578} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8747196401207539274 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8941221421597332096} + m_Modifications: + - target: {fileID: 1385409402919571665, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Name + value: CardBack3 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} +--- !u!224 &4937963996820091238 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + m_PrefabInstance: {fileID: 8747196401207539274} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &9069218952194097868 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8941221421597332096} + m_Modifications: + - target: {fileID: 1385409402919571665, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Name + value: CardBack2 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.x + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} +--- !u!224 &4629474234990118368 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4459518969173100332, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3} + m_PrefabInstance: {fileID: 9069218952194097868} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefabs/UI/Cards/CardBack.prefab b/Assets/Prefabs/UI/Cards/CardBack.prefab index b9461507..92c155b4 100644 --- a/Assets/Prefabs/UI/Cards/CardBack.prefab +++ b/Assets/Prefabs/UI/Cards/CardBack.prefab @@ -91,7 +91,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &4459518969173100332 RectTransform: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/UI/Cards/CardSystem.prefab b/Assets/Prefabs/UI/Cards/CardSystem.prefab index 20a06b83..e455e928 100644 --- a/Assets/Prefabs/UI/Cards/CardSystem.prefab +++ b/Assets/Prefabs/UI/Cards/CardSystem.prefab @@ -536,10 +536,6 @@ PrefabInstance: propertyPath: m_Name value: BoosterOpeningPage objectReference: {fileID: 0} - - target: {fileID: 1485089218833421720, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_Pivot.x value: 0.5 @@ -622,37 +618,106 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchoredPosition.x - value: 125 + value: 0 objectReference: {fileID: 0} - target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchoredPosition.y - value: -25 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchoredPosition.x - value: 375 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} propertyPath: m_AnchoredPosition.y - value: -25 + value: 0 objectReference: {fileID: 0} - m_RemovedComponents: [] + - target: {fileID: 4629474234990118368, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4629474234990118368, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4629474234990118368, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 350 + objectReference: {fileID: 0} + - target: {fileID: 4629474234990118368, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 4937963996820091238, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4937963996820091238, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4937963996820091238, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 4937963996820091238, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6502272725549189819, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7664491371311212187, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7990969126200070685, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8423460607813885254, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8423460607813885254, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8423460607813885254, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 8423460607813885254, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 8941221421597332096, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_SizeDelta.x + value: 700 + objectReference: {fileID: 0} + - target: {fileID: 8941221421597332096, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} + propertyPath: m_SizeDelta.y + value: 300 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 8234492749045289478, guid: 06de8e223a669fe48b043983963d1e6a, type: 3} m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] diff --git a/Assets/Scenes/TestingStuff/UIAuthoring.unity b/Assets/Scenes/TestingStuff/UIAuthoring.unity index d74d7a0a..72268162 100644 --- a/Assets/Scenes/TestingStuff/UIAuthoring.unity +++ b/Assets/Scenes/TestingStuff/UIAuthoring.unity @@ -119,6 +119,68 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &205824278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 205824280} + - component: {fileID: 205824279} + m_Layer: 0 + m_Name: CardSystemTester + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &205824279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 205824278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6c59c766505c4342983594dbe19f3db0, type: 3} + m_Name: + m_EditorClassIdentifier: AppleHillsScripts::AppleHills.Tests.CardSystemTester + cardAlbumUI: {fileID: 1148731766} + boosterPacksToAdd: 3 + cardsToGenerate: 10 + autoOpenPacksWhenAdded: 0 + currentBoosterCount: 0 + totalCardsInCollection: 0 + lastActionMessage: +--- !u!4 &205824280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 205824278} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1182.0137, y: 708.06934, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1148731766 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2276827791912418824, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + m_PrefabInstance: {fileID: 7454556111239468018} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe5ff32f529d4f24a2064ee1dfa07758, type: 3} + m_Name: + m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.CardAlbumUI --- !u!1 &1860325688 GameObject: m_ObjectHideFlags: 0 @@ -264,10 +326,58 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 392754686162327284, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 1151296155612236777, guid: 840f3d8a936b39a41b5896328a692005, type: 3} propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2111181035997726038, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 3334079986954822490, guid: 840f3d8a936b39a41b5896328a692005, type: 3} propertyPath: m_text value: Card Album Main Page @@ -276,6 +386,30 @@ PrefabInstance: propertyPath: m_text value: Browse your cards! objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460458858467128264, guid: 840f3d8a936b39a41b5896328a692005, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4825712728562046718, guid: 840f3d8a936b39a41b5896328a692005, type: 3} propertyPath: m_IsActive value: 0 @@ -479,3 +613,4 @@ SceneRoots: m_Roots: - {fileID: 7454556111239468018} - {fileID: 1860325691} + - {fileID: 205824280} diff --git a/Assets/Scripts/Data/CardSystem/CardInventory.cs b/Assets/Scripts/Data/CardSystem/CardInventory.cs index ae1479f8..34037780 100644 --- a/Assets/Scripts/Data/CardSystem/CardInventory.cs +++ b/Assets/Scripts/Data/CardSystem/CardInventory.cs @@ -50,7 +50,27 @@ namespace AppleHills.Data.CardSystem /// public List GetAllCards() { - return new List(collectedCards.Values); + return collectedCards.Values.ToList(); + } + + /// + /// Clears all cards from the inventory + /// Primarily used for testing + /// + public void ClearAllCards() + { + collectedCards.Clear(); + + // Clear lookup dictionaries + foreach (var zone in cardsByZone.Keys) + { + cardsByZone[zone].Clear(); + } + + foreach (var rarity in cardsByRarity.Keys) + { + cardsByRarity[rarity].Clear(); + } } /// diff --git a/Assets/Scripts/Data/CardSystem/CardSystemManager.cs b/Assets/Scripts/Data/CardSystem/CardSystemManager.cs index 5823969d..d36578d4 100644 --- a/Assets/Scripts/Data/CardSystem/CardSystemManager.cs +++ b/Assets/Scripts/Data/CardSystem/CardSystemManager.cs @@ -273,5 +273,79 @@ namespace Data.CardSystem return (float)collectedInZone / totalInZone * 100f; } + + /// + /// Returns all available card definitions in the system + /// + public List GetAllCardDefinitions() + { + return new List(availableCards); + } + + /// + /// Returns direct access to the player's card inventory + /// For advanced operations and testing + /// + public CardInventory GetCardInventory() + { + return playerInventory; + } + + /// + /// Returns cards filtered by both zone and rarity + /// + public List GetCardsByZoneAndRarity(CardZone zone, CardRarity rarity) + { + List zoneCards = GetCardsByZone(zone); + return zoneCards.FindAll(c => c.Rarity == rarity); + } + + /// + /// Returns the count of cards by rarity + /// + public int GetCardCountByRarity(CardRarity rarity) + { + return playerInventory.GetCardsByRarity(rarity).Count; + } + + /// + /// Returns the count of cards by zone + /// + public int GetCardCountByZone(CardZone zone) + { + return playerInventory.GetCardsByZone(zone).Count; + } + + /// + /// Gets the total number of card definitions available in the system + /// + public int GetTotalCardDefinitionsCount() + { + return availableCards.Count; + } + + /// + /// Gets the total collection completion percentage (0-100) + /// + public float GetTotalCompletionPercentage() + { + if (availableCards.Count == 0) return 0; + return (float)GetUniqueCardCount() / availableCards.Count * 100f; + } + + /// + /// Gets total completion percentage for a specific rarity (0-100) + /// + public float GetRarityCompletionPercentage(CardRarity rarity) + { + // Count available cards of this rarity + int totalOfRarity = availableCards.FindAll(c => c.Rarity == rarity).Count; + if (totalOfRarity == 0) return 0; + + // Count collected cards of this rarity + int collectedOfRarity = playerInventory.GetCardsByRarity(rarity).Count; + + return (float)collectedOfRarity / totalOfRarity * 100f; + } } } diff --git a/Assets/Scripts/Tests/CardSystemTester.cs b/Assets/Scripts/Tests/CardSystemTester.cs index 3b20807e..236777cc 100644 --- a/Assets/Scripts/Tests/CardSystemTester.cs +++ b/Assets/Scripts/Tests/CardSystemTester.cs @@ -16,7 +16,6 @@ namespace AppleHills.Tests public class CardSystemTester : MonoBehaviour { [Header("References")] - [SerializeField] private CardSystemManager cardSystemManager; [SerializeField] private CardAlbumUI cardAlbumUI; [Header("Test Settings")] @@ -32,16 +31,10 @@ namespace AppleHills.Tests private void Awake() { // Auto-find references if needed - if (cardSystemManager == null) - cardSystemManager = FindAnyObjectByType(); - if (cardAlbumUI == null) cardAlbumUI = FindAnyObjectByType(); // Log missing references - if (cardSystemManager == null) - Debug.LogError("CardSystemTester: No CardSystemManager found in the scene!"); - if (cardAlbumUI == null) Debug.LogError("CardSystemTester: No CardAlbumUI found in the scene!"); } @@ -54,10 +47,11 @@ namespace AppleHills.Tests // Refresh the debug information displayed in the inspector private void RefreshDebugInfo() { - if (cardSystemManager != null) + // Access CardSystemManager through the singleton Instance + if (CardSystemManager.Instance != null) { - currentBoosterCount = cardSystemManager.GetBoosterPackCount(); - totalCardsInCollection = cardSystemManager.GetCardInventory().GetAllCards().Count; + currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount(); + totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count; } } @@ -65,9 +59,10 @@ namespace AppleHills.Tests // Custom editor buttons for testing public void AddBoosterPacks() { - if (cardSystemManager != null) + // Access CardSystemManager through the singleton Instance + if (CardSystemManager.Instance != null) { - cardSystemManager.AddBoosterPack(boosterPacksToAdd); + CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd); lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)"; Logging.Debug($"[CardSystemTester] {lastActionMessage}"); RefreshDebugInfo(); @@ -135,10 +130,11 @@ namespace AppleHills.Tests public void GenerateRandomCards() { - if (cardSystemManager != null) + // Access CardSystemManager through the singleton Instance + if (CardSystemManager.Instance != null) { int cardsAdded = 0; - List allDefinitions = cardSystemManager.GetAllCardDefinitions(); + List allDefinitions = CardSystemManager.Instance.GetAllCardDefinitions(); if (allDefinitions.Count == 0) { @@ -154,7 +150,7 @@ namespace AppleHills.Tests // Create a card data instance and add it to inventory CardData newCard = randomDef.CreateCardData(); - cardSystemManager.GetCardInventory().AddCard(newCard); + CardSystemManager.Instance.GetCardInventory().AddCard(newCard); cardsAdded++; } @@ -166,21 +162,17 @@ namespace AppleHills.Tests public void ClearAllCards() { - if (cardSystemManager != null) + // Access CardSystemManager through the singleton Instance + if (CardSystemManager.Instance != null) { - int count = cardSystemManager.GetCardInventory().GetAllCards().Count; - cardSystemManager.GetCardInventory().ClearAllCards(); + int count = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count; + CardSystemManager.Instance.GetCardInventory().ClearAllCards(); lastActionMessage = $"Cleared {count} cards from inventory"; Logging.Debug($"[CardSystemTester] {lastActionMessage}"); RefreshDebugInfo(); } } #endif - - // Update is called once per frame - void Update() - { - } } #if UNITY_EDITOR @@ -196,6 +188,9 @@ namespace AppleHills.Tests EditorGUILayout.Space(); EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel); + // Only enable buttons when in play mode + GUI.enabled = Application.isPlaying; + if (GUILayout.Button("Add Booster Packs")) { tester.AddBoosterPacks(); @@ -227,6 +222,13 @@ namespace AppleHills.Tests { tester.ClearAllCards(); } + + // If not in play mode, show a hint + if (!Application.isPlaying) + { + GUI.enabled = true; + EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Info); + } } } #endif diff --git a/Assets/Scripts/UI/CardSystem/AlbumViewPage.cs b/Assets/Scripts/UI/CardSystem/AlbumViewPage.cs index 859ca91f..2626902c 100644 --- a/Assets/Scripts/UI/CardSystem/AlbumViewPage.cs +++ b/Assets/Scripts/UI/CardSystem/AlbumViewPage.cs @@ -77,158 +77,108 @@ namespace AppleHills.UI.CardSystem if (collectedCards.Count > 0) { // Create card UI elements - CreateCardStack(collectedCards); + DisplayCards(collectedCards); } } /// /// Creates UI elements for the player's collected cards /// - private void CreateCardStack(List cards) + private void DisplayCards(List cards) { if (albumGrid == null || cardPrefab == null) return; - // Stack offset for visual effect - Vector3 stackOffset = new Vector3(5f, -5f, 0f); - Vector3 basePosition = Vector3.zero; - // Sort cards by collection index cards.Sort((a, b) => a.CollectionIndex.CompareTo(b.CollectionIndex)); // Create card UI elements - for (int i = 0; i < cards.Count; i++) + foreach (var cardData in cards) { GameObject cardObj = Instantiate(cardPrefab, albumGrid.transform); - CardUIElement cardUI = cardObj.GetComponent(); + // Configure the card UI with the card data + CardUIElement cardUI = cardObj.GetComponent(); if (cardUI != null) { - // Position in stack - cardObj.GetComponent().anchoredPosition = basePosition + (stackOffset * i); - - // Set up card data - cardUI.SetupCard(cards[i]); - - // Add drag handlers - SetupCardDragHandlers(cardUI); - - // Add to tracked cards + cardUI.SetupCard(cardData); _displayedCards.Add(cardUI); } } } /// - /// Sets up drag and drop handlers for a card - /// - private void SetupCardDragHandlers(CardUIElement cardUI) - { - // Add click listener to handle card clicks - Button cardButton = cardUI.GetComponent private void ShowOnlyBackpackIcon() { - if (backpackIcon != null) - backpackIcon.SetActive(true); + if (backpackButton != null) + { + backpackButton.gameObject.SetActive(true); - // Update booster notification visibility - UpdateBoosterVisibility(); + // Update notification visibility based on booster count + bool hasBooters = _cardManager != null && _cardManager.GetBoosterPackCount() > 0; + + // Show notification dot if there are boosters or unseen cards + if (boosterNotificationDot != null) + { + boosterNotificationDot.gameObject.SetActive(hasBooters || _hasUnseenCards); + } + } } - + /// /// Opens the album view page /// diff --git a/docs/card_system_integration_and_testing.md b/docs/card_system_integration_and_testing.md new file mode 100644 index 00000000..6d27d832 --- /dev/null +++ b/docs/card_system_integration_and_testing.md @@ -0,0 +1,159 @@ +# Card System Integration and Testing Guide + +## Overview + +This document outlines the integration between the data and UI layers of the Apple Hills card collection system, as well as the testing tools available for development purposes. + +## Architecture Summary + +The card system follows a clean separation of concerns: + +1. **Data Layer** (Assets/Scripts/Data/CardSystem/) + - `CardSystemManager`: Singleton for managing card data, booster packs, and collection + - `CardInventory`: Player's collection of cards and booster packs + - `CardData`: Runtime instance of a collected card + - `CardDefinition`: ScriptableObject template defining card properties + - `CardVisualConfig`: Visual settings for cards based on rarity/zone + +2. **UI Layer** (Assets/Scripts/UI/CardSystem/) + - `CardAlbumUI`: Main controller for the card UI system + - `UIPageController`: Stack-based navigation system + - `UIPage`: Base class for UI pages with transition animations + - Page Components: + - `CardMenuPage`: Main menu for the card system + - `AlbumViewPage`: Grid display of collected cards with filtering + - `BoosterOpeningPage`: Interactive card reveal experience + - `CardUIElement`: Individual card visual representation + - `BoosterNotificationDot`: UI element showing booster pack counts + +## Integration Points + +### Initialization Process + +1. `CardSystemManager` initializes during the bootstrap process using `BootCompletionService` +2. UI components register with `BootCompletionService.RegisterInitAction()` for post-boot initialization +3. UI components access card data through `CardSystemManager.Instance` + +### Data Flow + +1. **Card Collection**: + - `CardSystemManager` manages the player's `CardInventory` + - Cards are added via `AddCardToInventory()` + - Card collection triggers `OnCardCollected` event + +2. **Booster Packs**: + - Added via `CardSystemManager.AddBoosterPack()` + - Opened via `CardSystemManager.OpenBoosterPack()` + - Booster count changes trigger `OnBoosterCountChanged` event + - Opening boosters triggers `OnBoosterOpened` event + +3. **Card Display**: + - `CardUIElement` displays a card using `SetupCard(cardData)` + - `AlbumViewPage` displays cards in a grid with filtering options + - `BoosterOpeningPage` handles interactive card reveals + +### Event System + +Key events that connect data and UI layers: + +- `OnBoosterCountChanged`: Triggered when booster count changes +- `OnBoosterOpened`: Triggered when a booster is opened +- `OnCardCollected`: Triggered when a new card is added to collection +- `OnCardRarityUpgraded`: Triggered when duplicates upgrade a card's rarity + +## Testing Tool: CardSystemTester + +The `CardSystemTester` provides a simple interface for testing the card system without requiring full game integration. + +### Features + +- Adding booster packs +- Opening the card menu +- Opening booster packs +- Browsing the album view +- Generating random test cards +- Clearing the card collection + +### Usage + +1. Add `CardSystemTester` component to a GameObject in your test scene +2. Reference the `CardAlbumUI` component +3. Enter Play mode and use the inspector buttons +4. All buttons are disabled in edit mode + +### Implementation Notes + +```csharp +public class CardSystemTester : MonoBehaviour +{ + // Only need reference to CardAlbumUI, the CardSystemManager is accessed via singleton + [SerializeField] private CardAlbumUI cardAlbumUI; + + // Other variables for test configuration + [SerializeField] [Range(1, 10)] private int boosterPacksToAdd = 3; + [SerializeField] [Range(1, 100)] private int cardsToGenerate = 10; + + // All operations use CardSystemManager.Instance + public void AddBoosterPacks() { + CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd); + // Other operations... + } + + // Uses CardAlbumUI to simulate UI interactions + public void SimulateBackpackClick() { + // Trigger the backpack button's onClick event + } + + // Additional test methods... +} +``` + +### Test Scene Setup + +1. Create a new scene or use an existing test scene +2. Add a Canvas with proper UI configuration +3. Add the CardSystem prefab (containing CardAlbumUI) +4. Add the CardSystemTester component +5. Make sure you have card definitions configured + +## Current Implementation Status + +1. **Complete**: + - Core data management through `CardSystemManager` + - Card collection and inventory management + - Basic UI navigation system + - Booster pack opening flow + - Album view with filtering + +2. **Added API Methods**: + - `GetAllCardDefinitions()`: Returns list of all card definitions + - `GetCardInventory()`: Returns reference to player's card inventory + - `ClearAllCards()`: Resets the player's collection + - Various utility methods for filtering and statistics + +3. **UI Improvements**: + - Simplified card display in album view + - Properly integrated card reveal animations + - Back button functionality for all pages + +## Known Issues and Considerations + +1. **Performance**: Large collections may require optimization +2. **Save System**: Currently not implemented, needs integration with game save system +3. **Card Definition Loading**: Ensure card definitions are loaded before use +4. **Testing Workflow**: Test specific state scenarios using the CardSystemTester +5. **Animation Timing**: May need adjustment for smoother experience + +## Next Steps + +1. Implement save/load system for card collection +2. Add collection statistics display +3. Implement rarity-specific effects for card reveals +4. Create more comprehensive test coverage + +## Technical References + +- Bootstrap system: Use `BootCompletionService.RegisterInitAction(InitializePostBoot)` for initialization +- Data access: Always use `CardSystemManager.Instance` for data access +- Page navigation: Use `UIPageController.Instance.PushPage()` and `PopPage()` +- Card UI: Use `CardUIElement.SetupCard()` to configure card display