Kind of working booster packs
This commit is contained in:
@@ -44,6 +44,13 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 8d80347e4bd04c87be23a9399860783d, type: 3}
|
m_Script: {fileID: 11500000, guid: 8d80347e4bd04c87be23a9399860783d, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: AppleHillsScripts::Data.CardSystem.CardSystemManager
|
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:
|
playerInventory:
|
||||||
boosterPackCount: 0
|
boosterPackCount: 0
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ MonoBehaviour:
|
|||||||
boosterPackObject: {fileID: 4219171218593530538}
|
boosterPackObject: {fileID: 4219171218593530538}
|
||||||
cardRevealContainer: {fileID: 8941221421597332096}
|
cardRevealContainer: {fileID: 8941221421597332096}
|
||||||
cardPrefab: {fileID: 3326706725254864107, guid: 594aad71e4281174da8fb4f47a8d19b0, type: 3}
|
cardPrefab: {fileID: 3326706725254864107, guid: 594aad71e4281174da8fb4f47a8d19b0, type: 3}
|
||||||
cardBackPrefab: {fileID: 1385409402919571665, guid: 1d048f366a1113d4ab16b5d332bfc11d, type: 3}
|
|
||||||
openBoosterButton: {fileID: 7440552304132850408}
|
openBoosterButton: {fileID: 7440552304132850408}
|
||||||
continueButton: {fileID: 5542651507418784372}
|
continueButton: {fileID: 5542651507418784372}
|
||||||
canvasGroup: {fileID: 4766500435349212810}
|
canvasGroup: {fileID: 4766500435349212810}
|
||||||
@@ -89,6 +88,7 @@ GameObject:
|
|||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 8941221421597332096}
|
- component: {fileID: 8941221421597332096}
|
||||||
- component: {fileID: 418545990734724097}
|
- component: {fileID: 418545990734724097}
|
||||||
|
- component: {fileID: 8234492749045289478}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: CardRevealContainer
|
m_Name: CardRevealContainer
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -107,13 +107,16 @@ RectTransform:
|
|||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children:
|
||||||
|
- {fileID: 8423460607813885254}
|
||||||
|
- {fileID: 4629474234990118368}
|
||||||
|
- {fileID: 4937963996820091238}
|
||||||
m_Father: {fileID: 2026295995152435872}
|
m_Father: {fileID: 2026295995152435872}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &418545990734724097
|
--- !u!114 &418545990734724097
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@@ -132,8 +135,8 @@ MonoBehaviour:
|
|||||||
m_Right: 0
|
m_Right: 0
|
||||||
m_Top: 0
|
m_Top: 0
|
||||||
m_Bottom: 0
|
m_Bottom: 0
|
||||||
m_ChildAlignment: 0
|
m_ChildAlignment: 4
|
||||||
m_Spacing: 0
|
m_Spacing: 50
|
||||||
m_ChildForceExpandWidth: 1
|
m_ChildForceExpandWidth: 1
|
||||||
m_ChildForceExpandHeight: 1
|
m_ChildForceExpandHeight: 1
|
||||||
m_ChildControlWidth: 0
|
m_ChildControlWidth: 0
|
||||||
@@ -141,6 +144,20 @@ MonoBehaviour:
|
|||||||
m_ChildScaleWidth: 0
|
m_ChildScaleWidth: 0
|
||||||
m_ChildScaleHeight: 0
|
m_ChildScaleHeight: 0
|
||||||
m_ReverseArrangement: 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
|
--- !u!1 &4219171218593530538
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1027,3 +1044,309 @@ MonoBehaviour:
|
|||||||
m_hasFontAssetChanged: 0
|
m_hasFontAssetChanged: 0
|
||||||
m_baseMaterial: {fileID: 0}
|
m_baseMaterial: {fileID: 0}
|
||||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 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}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 0
|
m_IsActive: 1
|
||||||
--- !u!224 &4459518969173100332
|
--- !u!224 &4459518969173100332
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -536,10 +536,6 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: BoosterOpeningPage
|
value: BoosterOpeningPage
|
||||||
objectReference: {fileID: 0}
|
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}
|
- target: {fileID: 2026295995152435872, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_Pivot.x
|
propertyPath: m_Pivot.x
|
||||||
value: 0.5
|
value: 0.5
|
||||||
@@ -622,37 +618,106 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchorMin.y
|
propertyPath: m_AnchorMin.y
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.x
|
propertyPath: m_AnchoredPosition.x
|
||||||
value: 125
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 3492318441088451548, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: -25
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchorMin.y
|
propertyPath: m_AnchorMin.y
|
||||||
value: 1
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.x
|
propertyPath: m_AnchoredPosition.x
|
||||||
value: 375
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
- target: {fileID: 4525022388006312158, guid: 06de8e223a669fe48b043983963d1e6a, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: -25
|
value: 0
|
||||||
objectReference: {fileID: 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_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents: []
|
m_AddedComponents: []
|
||||||
|
|||||||
@@ -119,6 +119,68 @@ NavMeshSettings:
|
|||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 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
|
--- !u!1 &1860325688
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -264,10 +326,58 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 0}
|
m_TransformParent: {fileID: 0}
|
||||||
m_Modifications:
|
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}
|
- target: {fileID: 1151296155612236777, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||||
propertyPath: m_SizeDelta.x
|
propertyPath: m_SizeDelta.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 3334079986954822490, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||||
propertyPath: m_text
|
propertyPath: m_text
|
||||||
value: Card Album Main Page
|
value: Card Album Main Page
|
||||||
@@ -276,6 +386,30 @@ PrefabInstance:
|
|||||||
propertyPath: m_text
|
propertyPath: m_text
|
||||||
value: Browse your cards!
|
value: Browse your cards!
|
||||||
objectReference: {fileID: 0}
|
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}
|
- target: {fileID: 4825712728562046718, guid: 840f3d8a936b39a41b5896328a692005, type: 3}
|
||||||
propertyPath: m_IsActive
|
propertyPath: m_IsActive
|
||||||
value: 0
|
value: 0
|
||||||
@@ -479,3 +613,4 @@ SceneRoots:
|
|||||||
m_Roots:
|
m_Roots:
|
||||||
- {fileID: 7454556111239468018}
|
- {fileID: 7454556111239468018}
|
||||||
- {fileID: 1860325691}
|
- {fileID: 1860325691}
|
||||||
|
- {fileID: 205824280}
|
||||||
|
|||||||
@@ -50,7 +50,27 @@ namespace AppleHills.Data.CardSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public List<CardData> GetAllCards()
|
public List<CardData> GetAllCards()
|
||||||
{
|
{
|
||||||
return new List<CardData>(collectedCards.Values);
|
return collectedCards.Values.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clears all cards from the inventory
|
||||||
|
/// Primarily used for testing
|
||||||
|
/// </summary>
|
||||||
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -273,5 +273,79 @@ namespace Data.CardSystem
|
|||||||
|
|
||||||
return (float)collectedInZone / totalInZone * 100f;
|
return (float)collectedInZone / totalInZone * 100f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns all available card definitions in the system
|
||||||
|
/// </summary>
|
||||||
|
public List<CardDefinition> GetAllCardDefinitions()
|
||||||
|
{
|
||||||
|
return new List<CardDefinition>(availableCards);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns direct access to the player's card inventory
|
||||||
|
/// For advanced operations and testing
|
||||||
|
/// </summary>
|
||||||
|
public CardInventory GetCardInventory()
|
||||||
|
{
|
||||||
|
return playerInventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns cards filtered by both zone and rarity
|
||||||
|
/// </summary>
|
||||||
|
public List<CardData> GetCardsByZoneAndRarity(CardZone zone, CardRarity rarity)
|
||||||
|
{
|
||||||
|
List<CardData> zoneCards = GetCardsByZone(zone);
|
||||||
|
return zoneCards.FindAll(c => c.Rarity == rarity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the count of cards by rarity
|
||||||
|
/// </summary>
|
||||||
|
public int GetCardCountByRarity(CardRarity rarity)
|
||||||
|
{
|
||||||
|
return playerInventory.GetCardsByRarity(rarity).Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the count of cards by zone
|
||||||
|
/// </summary>
|
||||||
|
public int GetCardCountByZone(CardZone zone)
|
||||||
|
{
|
||||||
|
return playerInventory.GetCardsByZone(zone).Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the total number of card definitions available in the system
|
||||||
|
/// </summary>
|
||||||
|
public int GetTotalCardDefinitionsCount()
|
||||||
|
{
|
||||||
|
return availableCards.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the total collection completion percentage (0-100)
|
||||||
|
/// </summary>
|
||||||
|
public float GetTotalCompletionPercentage()
|
||||||
|
{
|
||||||
|
if (availableCards.Count == 0) return 0;
|
||||||
|
return (float)GetUniqueCardCount() / availableCards.Count * 100f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets total completion percentage for a specific rarity (0-100)
|
||||||
|
/// </summary>
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ namespace AppleHills.Tests
|
|||||||
public class CardSystemTester : MonoBehaviour
|
public class CardSystemTester : MonoBehaviour
|
||||||
{
|
{
|
||||||
[Header("References")]
|
[Header("References")]
|
||||||
[SerializeField] private CardSystemManager cardSystemManager;
|
|
||||||
[SerializeField] private CardAlbumUI cardAlbumUI;
|
[SerializeField] private CardAlbumUI cardAlbumUI;
|
||||||
|
|
||||||
[Header("Test Settings")]
|
[Header("Test Settings")]
|
||||||
@@ -32,16 +31,10 @@ namespace AppleHills.Tests
|
|||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
// Auto-find references if needed
|
// Auto-find references if needed
|
||||||
if (cardSystemManager == null)
|
|
||||||
cardSystemManager = FindAnyObjectByType<CardSystemManager>();
|
|
||||||
|
|
||||||
if (cardAlbumUI == null)
|
if (cardAlbumUI == null)
|
||||||
cardAlbumUI = FindAnyObjectByType<CardAlbumUI>();
|
cardAlbumUI = FindAnyObjectByType<CardAlbumUI>();
|
||||||
|
|
||||||
// Log missing references
|
// Log missing references
|
||||||
if (cardSystemManager == null)
|
|
||||||
Debug.LogError("CardSystemTester: No CardSystemManager found in the scene!");
|
|
||||||
|
|
||||||
if (cardAlbumUI == null)
|
if (cardAlbumUI == null)
|
||||||
Debug.LogError("CardSystemTester: No CardAlbumUI found in the scene!");
|
Debug.LogError("CardSystemTester: No CardAlbumUI found in the scene!");
|
||||||
}
|
}
|
||||||
@@ -54,10 +47,11 @@ namespace AppleHills.Tests
|
|||||||
// Refresh the debug information displayed in the inspector
|
// Refresh the debug information displayed in the inspector
|
||||||
private void RefreshDebugInfo()
|
private void RefreshDebugInfo()
|
||||||
{
|
{
|
||||||
if (cardSystemManager != null)
|
// Access CardSystemManager through the singleton Instance
|
||||||
|
if (CardSystemManager.Instance != null)
|
||||||
{
|
{
|
||||||
currentBoosterCount = cardSystemManager.GetBoosterPackCount();
|
currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount();
|
||||||
totalCardsInCollection = cardSystemManager.GetCardInventory().GetAllCards().Count;
|
totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +59,10 @@ namespace AppleHills.Tests
|
|||||||
// Custom editor buttons for testing
|
// Custom editor buttons for testing
|
||||||
public void AddBoosterPacks()
|
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)";
|
lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)";
|
||||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||||
RefreshDebugInfo();
|
RefreshDebugInfo();
|
||||||
@@ -135,10 +130,11 @@ namespace AppleHills.Tests
|
|||||||
|
|
||||||
public void GenerateRandomCards()
|
public void GenerateRandomCards()
|
||||||
{
|
{
|
||||||
if (cardSystemManager != null)
|
// Access CardSystemManager through the singleton Instance
|
||||||
|
if (CardSystemManager.Instance != null)
|
||||||
{
|
{
|
||||||
int cardsAdded = 0;
|
int cardsAdded = 0;
|
||||||
List<CardDefinition> allDefinitions = cardSystemManager.GetAllCardDefinitions();
|
List<CardDefinition> allDefinitions = CardSystemManager.Instance.GetAllCardDefinitions();
|
||||||
|
|
||||||
if (allDefinitions.Count == 0)
|
if (allDefinitions.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -154,7 +150,7 @@ namespace AppleHills.Tests
|
|||||||
|
|
||||||
// Create a card data instance and add it to inventory
|
// Create a card data instance and add it to inventory
|
||||||
CardData newCard = randomDef.CreateCardData();
|
CardData newCard = randomDef.CreateCardData();
|
||||||
cardSystemManager.GetCardInventory().AddCard(newCard);
|
CardSystemManager.Instance.GetCardInventory().AddCard(newCard);
|
||||||
cardsAdded++;
|
cardsAdded++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,21 +162,17 @@ namespace AppleHills.Tests
|
|||||||
|
|
||||||
public void ClearAllCards()
|
public void ClearAllCards()
|
||||||
{
|
{
|
||||||
if (cardSystemManager != null)
|
// Access CardSystemManager through the singleton Instance
|
||||||
|
if (CardSystemManager.Instance != null)
|
||||||
{
|
{
|
||||||
int count = cardSystemManager.GetCardInventory().GetAllCards().Count;
|
int count = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
|
||||||
cardSystemManager.GetCardInventory().ClearAllCards();
|
CardSystemManager.Instance.GetCardInventory().ClearAllCards();
|
||||||
lastActionMessage = $"Cleared {count} cards from inventory";
|
lastActionMessage = $"Cleared {count} cards from inventory";
|
||||||
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
Logging.Debug($"[CardSystemTester] {lastActionMessage}");
|
||||||
RefreshDebugInfo();
|
RefreshDebugInfo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Update is called once per frame
|
|
||||||
void Update()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
@@ -196,6 +188,9 @@ namespace AppleHills.Tests
|
|||||||
EditorGUILayout.Space();
|
EditorGUILayout.Space();
|
||||||
EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel);
|
||||||
|
|
||||||
|
// Only enable buttons when in play mode
|
||||||
|
GUI.enabled = Application.isPlaying;
|
||||||
|
|
||||||
if (GUILayout.Button("Add Booster Packs"))
|
if (GUILayout.Button("Add Booster Packs"))
|
||||||
{
|
{
|
||||||
tester.AddBoosterPacks();
|
tester.AddBoosterPacks();
|
||||||
@@ -227,6 +222,13 @@ namespace AppleHills.Tests
|
|||||||
{
|
{
|
||||||
tester.ClearAllCards();
|
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
|
#endif
|
||||||
|
|||||||
@@ -77,158 +77,108 @@ namespace AppleHills.UI.CardSystem
|
|||||||
if (collectedCards.Count > 0)
|
if (collectedCards.Count > 0)
|
||||||
{
|
{
|
||||||
// Create card UI elements
|
// Create card UI elements
|
||||||
CreateCardStack(collectedCards);
|
DisplayCards(collectedCards);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates UI elements for the player's collected cards
|
/// Creates UI elements for the player's collected cards
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void CreateCardStack(List<CardData> cards)
|
private void DisplayCards(List<CardData> cards)
|
||||||
{
|
{
|
||||||
if (albumGrid == null || cardPrefab == null) return;
|
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
|
// Sort cards by collection index
|
||||||
cards.Sort((a, b) => a.CollectionIndex.CompareTo(b.CollectionIndex));
|
cards.Sort((a, b) => a.CollectionIndex.CompareTo(b.CollectionIndex));
|
||||||
|
|
||||||
// Create card UI elements
|
// Create card UI elements
|
||||||
for (int i = 0; i < cards.Count; i++)
|
foreach (var cardData in cards)
|
||||||
{
|
{
|
||||||
GameObject cardObj = Instantiate(cardPrefab, albumGrid.transform);
|
GameObject cardObj = Instantiate(cardPrefab, albumGrid.transform);
|
||||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
|
||||||
|
|
||||||
|
// Configure the card UI with the card data
|
||||||
|
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||||
if (cardUI != null)
|
if (cardUI != null)
|
||||||
{
|
{
|
||||||
// Position in stack
|
cardUI.SetupCard(cardData);
|
||||||
cardObj.GetComponent<RectTransform>().anchoredPosition = basePosition + (stackOffset * i);
|
|
||||||
|
|
||||||
// Set up card data
|
|
||||||
cardUI.SetupCard(cards[i]);
|
|
||||||
|
|
||||||
// Add drag handlers
|
|
||||||
SetupCardDragHandlers(cardUI);
|
|
||||||
|
|
||||||
// Add to tracked cards
|
|
||||||
_displayedCards.Add(cardUI);
|
_displayedCards.Add(cardUI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets up drag and drop handlers for a card
|
/// Clears all card UI elements from the album
|
||||||
/// </summary>
|
|
||||||
private void SetupCardDragHandlers(CardUIElement cardUI)
|
|
||||||
{
|
|
||||||
// Add click listener to handle card clicks
|
|
||||||
Button cardButton = cardUI.GetComponent<Button>();
|
|
||||||
if (cardButton != null)
|
|
||||||
{
|
|
||||||
cardButton.onClick.AddListener(() => OnCardClicked(cardUI));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subscribe to the card's own click event
|
|
||||||
cardUI.OnCardClicked += OnCardClicked;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Handles when a card is clicked (simplistic alternative to drag and drop)
|
|
||||||
/// </summary>
|
|
||||||
private void OnCardClicked(CardUIElement cardUI)
|
|
||||||
{
|
|
||||||
CardData cardData = cardUI.GetCardData();
|
|
||||||
|
|
||||||
// Currently, clicking a card does not perform any action
|
|
||||||
// This can be expanded to show card details or other interactions
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clears all cards from the album
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ClearAlbum()
|
private void ClearAlbum()
|
||||||
{
|
{
|
||||||
// Clear card UI elements
|
|
||||||
foreach (var card in _displayedCards)
|
foreach (var card in _displayedCards)
|
||||||
{
|
{
|
||||||
if (card != null && card.gameObject != null)
|
if (card != null && card.gameObject != null)
|
||||||
{
|
|
||||||
Destroy(card.gameObject);
|
Destroy(card.gameObject);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_displayedCards.Clear();
|
_displayedCards.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialize filtering UI and set up listeners
|
/// Initializes filter dropdowns
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeFilters()
|
private void InitializeFilters()
|
||||||
{
|
{
|
||||||
// Setup zone filter
|
// Setup zone filter dropdown
|
||||||
if (zoneFilterDropdown != null)
|
if (zoneFilterDropdown != null)
|
||||||
{
|
{
|
||||||
zoneFilterDropdown.ClearOptions();
|
zoneFilterDropdown.ClearOptions();
|
||||||
|
|
||||||
// Add "All Zones" option
|
// Add "All Zones" option
|
||||||
List<string> zoneOptions = new List<string> { "All Zones" };
|
List<string> zoneOptions = new List<string>() { "All Zones" };
|
||||||
|
|
||||||
// Add each zone
|
// Add options for each zone
|
||||||
foreach (CardZone zone in System.Enum.GetValues(typeof(CardZone)))
|
foreach (CardZone zone in System.Enum.GetValues(typeof(CardZone)))
|
||||||
{
|
{
|
||||||
zoneOptions.Add(zone.ToString());
|
zoneOptions.Add(zone.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneFilterDropdown.AddOptions(zoneOptions);
|
zoneFilterDropdown.AddOptions(zoneOptions);
|
||||||
zoneFilterDropdown.onValueChanged.AddListener(OnZoneFilterChanged);
|
zoneFilterDropdown.onValueChanged.AddListener(OnFilterChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup rarity filter
|
// Setup rarity filter dropdown
|
||||||
if (rarityFilterDropdown != null)
|
if (rarityFilterDropdown != null)
|
||||||
{
|
{
|
||||||
rarityFilterDropdown.ClearOptions();
|
rarityFilterDropdown.ClearOptions();
|
||||||
|
|
||||||
// Add "All Rarities" option
|
// Add "All Rarities" option
|
||||||
List<string> rarityOptions = new List<string> { "All Rarities" };
|
List<string> rarityOptions = new List<string>() { "All Rarities" };
|
||||||
|
|
||||||
// Add each rarity
|
// Add options for each rarity
|
||||||
foreach (CardRarity rarity in System.Enum.GetValues(typeof(CardRarity)))
|
foreach (CardRarity rarity in System.Enum.GetValues(typeof(CardRarity)))
|
||||||
{
|
{
|
||||||
rarityOptions.Add(rarity.ToString());
|
rarityOptions.Add(rarity.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
rarityFilterDropdown.AddOptions(rarityOptions);
|
rarityFilterDropdown.AddOptions(rarityOptions);
|
||||||
rarityFilterDropdown.onValueChanged.AddListener(OnRarityFilterChanged);
|
rarityFilterDropdown.onValueChanged.AddListener(OnFilterChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup reset button
|
// Setup reset filters button
|
||||||
if (resetFiltersButton != null)
|
if (resetFiltersButton != null)
|
||||||
{
|
{
|
||||||
resetFiltersButton.onClick.AddListener(ResetFilters);
|
resetFiltersButton.onClick.AddListener(OnResetFiltersClicked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called when zone filter dropdown changes
|
/// Handles changes to the filter dropdowns
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void OnZoneFilterChanged(int index)
|
private void OnFilterChanged(int value)
|
||||||
{
|
{
|
||||||
ApplyFilters();
|
ApplyFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called when rarity filter dropdown changes
|
/// Resets all filters to their default values
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void OnRarityFilterChanged(int index)
|
private void OnResetFiltersClicked()
|
||||||
{
|
|
||||||
ApplyFilters();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reset all filters to default values
|
|
||||||
/// </summary>
|
|
||||||
private void ResetFilters()
|
|
||||||
{
|
{
|
||||||
if (zoneFilterDropdown != null)
|
if (zoneFilterDropdown != null)
|
||||||
zoneFilterDropdown.value = 0;
|
zoneFilterDropdown.value = 0;
|
||||||
@@ -240,97 +190,68 @@ namespace AppleHills.UI.CardSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Apply current filter settings to the displayed cards
|
/// Applies the current filter selections to the displayed cards
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ApplyFilters()
|
private void ApplyFilters()
|
||||||
{
|
{
|
||||||
if (_cardManager == null) return;
|
// Clear current cards
|
||||||
|
ClearAlbum();
|
||||||
|
|
||||||
// Get all cards
|
// Get selected filters
|
||||||
List<CardData> allCards = _cardManager.GetAllCollectedCards();
|
CardZone? selectedZone = null;
|
||||||
List<CardData> filteredCards = new List<CardData>(allCards);
|
CardRarity? selectedRarity = null;
|
||||||
|
|
||||||
// Apply zone filter
|
// Get zone filter value
|
||||||
if (zoneFilterDropdown != null && zoneFilterDropdown.value > 0)
|
if (zoneFilterDropdown != null && zoneFilterDropdown.value > 0)
|
||||||
{
|
{
|
||||||
CardZone selectedZone = (CardZone)(zoneFilterDropdown.value - 1);
|
selectedZone = (CardZone)(zoneFilterDropdown.value - 1);
|
||||||
filteredCards = filteredCards.FindAll(card => card.Zone == selectedZone);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply rarity filter
|
// Get rarity filter value
|
||||||
if (rarityFilterDropdown != null && rarityFilterDropdown.value > 0)
|
if (rarityFilterDropdown != null && rarityFilterDropdown.value > 0)
|
||||||
{
|
{
|
||||||
CardRarity selectedRarity = (CardRarity)(rarityFilterDropdown.value - 1);
|
selectedRarity = (CardRarity)(rarityFilterDropdown.value - 1);
|
||||||
filteredCards = filteredCards.FindAll(card => card.Rarity == selectedRarity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the displayed cards
|
// Get filtered cards
|
||||||
ClearAlbum();
|
List<CardData> filteredCards = GetFilteredCards(selectedZone, selectedRarity);
|
||||||
CreateCardStack(filteredCards);
|
|
||||||
|
// Create card UI elements for the filtered cards
|
||||||
|
DisplayCards(filteredCards);
|
||||||
|
|
||||||
|
Logging.Debug($"[AlbumViewPage] Applied filters. Showing {filteredCards.Count} cards.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override for transition animations
|
/// <summary>
|
||||||
protected override void DoTransitionIn(System.Action onComplete)
|
/// Gets cards filtered by zone and/or rarity
|
||||||
|
/// </summary>
|
||||||
|
private List<CardData> GetFilteredCards(CardZone? zone, CardRarity? rarity)
|
||||||
{
|
{
|
||||||
// Reset the canvas group
|
List<CardData> result;
|
||||||
if (canvasGroup != null)
|
|
||||||
|
// Get all collected cards
|
||||||
|
if (zone == null && rarity == null)
|
||||||
{
|
{
|
||||||
canvasGroup.alpha = 0f;
|
// No filters, return all cards
|
||||||
Tween.Value(0f, 1f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
result = _cardManager.GetAllCollectedCards();
|
||||||
|
}
|
||||||
|
else if (zone != null && rarity != null)
|
||||||
|
{
|
||||||
|
// Both filters, get cards by zone and rarity
|
||||||
|
result = _cardManager.GetCardsByZoneAndRarity(zone.Value, rarity.Value);
|
||||||
|
}
|
||||||
|
else if (zone != null)
|
||||||
|
{
|
||||||
|
// Only zone filter
|
||||||
|
result = _cardManager.GetCardsByZone(zone.Value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Simple scale animation if no canvas group
|
// Only rarity filter
|
||||||
transform.localScale = Vector3.zero;
|
result = _cardManager.GetCardsByRarity(rarity.Value);
|
||||||
Tween.LocalScale(transform, Vector3.one, transitionDuration, 0f, Tween.EaseOutBack, Tween.LoopType.None, null, onComplete);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
protected override void DoTransitionOut(System.Action onComplete)
|
|
||||||
{
|
|
||||||
// Simple fade animation
|
|
||||||
if (canvasGroup != null)
|
|
||||||
{
|
|
||||||
Tween.Value(canvasGroup.alpha, 0f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Tween.LocalScale(transform, Vector3.zero, transitionDuration, 0f, Tween.EaseInBack, Tween.LoopType.None, null, onComplete);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDestroy()
|
|
||||||
{
|
|
||||||
// Clean up filter listeners
|
|
||||||
if (zoneFilterDropdown != null)
|
|
||||||
zoneFilterDropdown.onValueChanged.RemoveListener(OnZoneFilterChanged);
|
|
||||||
|
|
||||||
if (rarityFilterDropdown != null)
|
|
||||||
rarityFilterDropdown.onValueChanged.RemoveListener(OnRarityFilterChanged);
|
|
||||||
|
|
||||||
if (resetFiltersButton != null)
|
|
||||||
resetFiltersButton.onClick.RemoveListener(ResetFilters);
|
|
||||||
|
|
||||||
// Clean up back button listener
|
return result;
|
||||||
if (backButton != null)
|
|
||||||
backButton.onClick.RemoveListener(OnBackButtonClicked);
|
|
||||||
|
|
||||||
// Clean up card listeners
|
|
||||||
foreach (var card in _displayedCards)
|
|
||||||
{
|
|
||||||
if (card != null)
|
|
||||||
{
|
|
||||||
// Unsubscribe from card events
|
|
||||||
card.OnCardClicked -= OnCardClicked;
|
|
||||||
|
|
||||||
// Remove button listeners
|
|
||||||
Button cardButton = card.GetComponent<Button>();
|
|
||||||
if (cardButton != null)
|
|
||||||
{
|
|
||||||
cardButton.onClick.RemoveAllListeners();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -345,5 +266,66 @@ namespace AppleHills.UI.CardSystem
|
|||||||
pageController.PopPage();
|
pageController.PopPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void DoTransitionIn(System.Action onComplete)
|
||||||
|
{
|
||||||
|
// Simple fade in animation
|
||||||
|
if (canvasGroup != null)
|
||||||
|
{
|
||||||
|
canvasGroup.alpha = 0f;
|
||||||
|
Tween.Value(0f, 1f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Fallback if no CanvasGroup
|
||||||
|
onComplete?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void DoTransitionOut(System.Action onComplete)
|
||||||
|
{
|
||||||
|
// Simple fade out animation
|
||||||
|
if (canvasGroup != null)
|
||||||
|
{
|
||||||
|
Tween.Value(canvasGroup.alpha, 0f, (value) => canvasGroup.alpha = value, transitionDuration, 0f, Tween.EaseInOut, Tween.LoopType.None, null, onComplete);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Fallback if no CanvasGroup
|
||||||
|
onComplete?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
// Clean up button listeners
|
||||||
|
if (backButton != null)
|
||||||
|
{
|
||||||
|
backButton.onClick.RemoveListener(OnBackButtonClicked);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zoneFilterDropdown != null)
|
||||||
|
{
|
||||||
|
zoneFilterDropdown.onValueChanged.RemoveListener(OnFilterChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rarityFilterDropdown != null)
|
||||||
|
{
|
||||||
|
rarityFilterDropdown.onValueChanged.RemoveListener(OnFilterChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resetFiltersButton != null)
|
||||||
|
{
|
||||||
|
resetFiltersButton.onClick.RemoveListener(OnResetFiltersClicked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
if (_cardManager == null)
|
||||||
|
{
|
||||||
|
_cardManager = CardSystemManager.Instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,8 @@ namespace AppleHills.UI.CardSystem
|
|||||||
{
|
{
|
||||||
[Header("UI Elements")]
|
[Header("UI Elements")]
|
||||||
[SerializeField] private GameObject boosterPackObject;
|
[SerializeField] private GameObject boosterPackObject;
|
||||||
[SerializeField] private RectTransform cardRevealContainer; // This should have a HorizontalLayoutGroup component
|
[SerializeField] private RectTransform cardRevealContainer; // This should have a HorizontalLayoutGroup component with pre-populated card backs
|
||||||
[SerializeField] private GameObject cardPrefab;
|
[SerializeField] private GameObject cardPrefab;
|
||||||
[SerializeField] private GameObject cardBackPrefab;
|
|
||||||
[SerializeField] private Button openBoosterButton;
|
[SerializeField] private Button openBoosterButton;
|
||||||
[SerializeField] private Button continueButton;
|
[SerializeField] private Button continueButton;
|
||||||
[SerializeField] private CanvasGroup canvasGroup;
|
[SerializeField] private CanvasGroup canvasGroup;
|
||||||
@@ -45,7 +44,7 @@ namespace AppleHills.UI.CardSystem
|
|||||||
|
|
||||||
private OpeningState _currentState = OpeningState.BoosterReady;
|
private OpeningState _currentState = OpeningState.BoosterReady;
|
||||||
private List<CardUIElement> _revealedCards = new List<CardUIElement>();
|
private List<CardUIElement> _revealedCards = new List<CardUIElement>();
|
||||||
private List<GameObject> _cardBacks = new List<GameObject>();
|
private List<Button> _cardBackButtons = new List<Button>();
|
||||||
private List<CardData> _boosterCards = new List<CardData>();
|
private List<CardData> _boosterCards = new List<CardData>();
|
||||||
private int _revealedCardCount = 0;
|
private int _revealedCardCount = 0;
|
||||||
private CardSystemManager _cardManager;
|
private CardSystemManager _cardManager;
|
||||||
@@ -80,6 +79,47 @@ namespace AppleHills.UI.CardSystem
|
|||||||
canvasGroup = GetComponent<CanvasGroup>();
|
canvasGroup = GetComponent<CanvasGroup>();
|
||||||
if (canvasGroup == null)
|
if (canvasGroup == null)
|
||||||
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
||||||
|
|
||||||
|
// Cache card back buttons from container
|
||||||
|
CacheCardBackButtons();
|
||||||
|
|
||||||
|
// Initially hide all card backs
|
||||||
|
HideAllCardBacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cache all card back buttons from the container
|
||||||
|
/// </summary>
|
||||||
|
private void CacheCardBackButtons()
|
||||||
|
{
|
||||||
|
_cardBackButtons.Clear();
|
||||||
|
|
||||||
|
if (cardRevealContainer != null)
|
||||||
|
{
|
||||||
|
// Get all buttons in the container (these are our card backs)
|
||||||
|
Button[] buttonsInContainer = cardRevealContainer.GetComponentsInChildren<Button>(true);
|
||||||
|
_cardBackButtons.AddRange(buttonsInContainer);
|
||||||
|
|
||||||
|
Debug.Log($"[BoosterOpeningPage] Found {_cardBackButtons.Count} card back buttons in container");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogError("[BoosterOpeningPage] Card reveal container is null, can't find card backs!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Hides all card backs in the container
|
||||||
|
/// </summary>
|
||||||
|
private void HideAllCardBacks()
|
||||||
|
{
|
||||||
|
foreach (var cardBack in _cardBackButtons)
|
||||||
|
{
|
||||||
|
if (cardBack != null && cardBack.gameObject != null)
|
||||||
|
{
|
||||||
|
cardBack.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
@@ -148,22 +188,31 @@ namespace AppleHills.UI.CardSystem
|
|||||||
}
|
}
|
||||||
_revealedCards.Clear();
|
_revealedCards.Clear();
|
||||||
|
|
||||||
// Clear card backs
|
// Re-cache card backs in case they changed
|
||||||
foreach (var cardBack in _cardBacks)
|
CacheCardBackButtons();
|
||||||
|
|
||||||
|
// Reset all card backs - both visibility and scale
|
||||||
|
foreach (var cardBack in _cardBackButtons)
|
||||||
{
|
{
|
||||||
if (cardBack != null)
|
if (cardBack != null && cardBack.gameObject != null)
|
||||||
Destroy(cardBack);
|
{
|
||||||
|
cardBack.gameObject.SetActive(false);
|
||||||
|
cardBack.transform.localScale = Vector3.one; // Reset scale
|
||||||
|
cardBack.transform.localRotation = Quaternion.identity; // Reset rotation
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_cardBacks.Clear();
|
|
||||||
|
|
||||||
// Reset state
|
// Reset state
|
||||||
_currentState = OpeningState.BoosterReady;
|
_currentState = OpeningState.BoosterReady;
|
||||||
_revealedCardCount = 0;
|
_revealedCardCount = 0;
|
||||||
|
_boosterCards.Clear();
|
||||||
|
|
||||||
// Show booster pack, show open button, hide continue button
|
// Show booster pack, show open button, hide continue button
|
||||||
if (boosterPackObject != null)
|
if (boosterPackObject != null)
|
||||||
{
|
{
|
||||||
boosterPackObject.SetActive(true);
|
boosterPackObject.SetActive(true);
|
||||||
|
boosterPackObject.transform.localScale = Vector3.one; // Reset scale
|
||||||
|
boosterPackObject.transform.localRotation = Quaternion.identity; // Reset rotation
|
||||||
}
|
}
|
||||||
|
|
||||||
if (openBoosterButton != null)
|
if (openBoosterButton != null)
|
||||||
@@ -174,6 +223,7 @@ namespace AppleHills.UI.CardSystem
|
|||||||
if (continueButton != null)
|
if (continueButton != null)
|
||||||
{
|
{
|
||||||
continueButton.gameObject.SetActive(false);
|
continueButton.gameObject.SetActive(false);
|
||||||
|
continueButton.transform.localScale = Vector3.one; // Reset scale
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make back button visible
|
// Make back button visible
|
||||||
@@ -181,6 +231,8 @@ namespace AppleHills.UI.CardSystem
|
|||||||
{
|
{
|
||||||
backButton.gameObject.SetActive(true);
|
backButton.gameObject.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug.Log("[BoosterOpeningPage] State reset complete, all scales and rotations reset to defaults");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -229,32 +281,46 @@ namespace AppleHills.UI.CardSystem
|
|||||||
// Wait a short delay before showing card backs
|
// Wait a short delay before showing card backs
|
||||||
yield return new WaitForSeconds(0.5f);
|
yield return new WaitForSeconds(0.5f);
|
||||||
|
|
||||||
// Create card backs for each position (usually 3)
|
// Check if we have proper container setup
|
||||||
for (int i = 0; i < Mathf.Min(_boosterCards.Count, cardRevealContainer.childCount); i++)
|
if (cardRevealContainer == null)
|
||||||
{
|
{
|
||||||
if (cardBackPrefab == null || cardRevealContainer.GetChild(i) == null) continue;
|
Debug.LogError("[BoosterOpeningPage] Card reveal container is null!");
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we found any card backs
|
||||||
|
if (_cardBackButtons.Count == 0)
|
||||||
|
{
|
||||||
|
Debug.LogError("[BoosterOpeningPage] No card back buttons found in container!");
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine how many cards to show based on the booster cards and available card backs
|
||||||
|
int cardsToShow = Mathf.Min(_boosterCards.Count, _cardBackButtons.Count);
|
||||||
|
|
||||||
|
// Activate and animate the card backs
|
||||||
|
for (int i = 0; i < cardsToShow; i++)
|
||||||
|
{
|
||||||
|
Button cardBack = _cardBackButtons[i];
|
||||||
|
if (cardBack == null) continue;
|
||||||
|
|
||||||
// Instantiate card back object at the correct position
|
GameObject cardBackObj = cardBack.gameObject;
|
||||||
GameObject cardBackObj = Instantiate(cardBackPrefab, cardRevealContainer.GetChild(i));
|
|
||||||
cardBackObj.transform.localPosition = Vector3.zero;
|
// Ensure the card back is active
|
||||||
_cardBacks.Add(cardBackObj);
|
cardBackObj.SetActive(true);
|
||||||
|
|
||||||
// Store the index for later reference when clicked
|
// Store the index for later reference when clicked
|
||||||
int cardIndex = i;
|
int cardIndex = i;
|
||||||
|
|
||||||
// Add click handler to the card back
|
|
||||||
Button cardBackButton = cardBackObj.GetComponent<Button>();
|
|
||||||
if (cardBackButton == null)
|
|
||||||
{
|
|
||||||
cardBackButton = cardBackObj.AddComponent<Button>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure the button
|
// Configure the button
|
||||||
cardBackButton.onClick.AddListener(() => OnCardBackClicked(cardIndex));
|
cardBack.onClick.RemoveAllListeners(); // Clear any previous listeners
|
||||||
|
cardBack.onClick.AddListener(() => OnCardBackClicked(cardIndex));
|
||||||
|
|
||||||
// Set initial scale to zero for animation
|
// Set initial scale to zero for animation
|
||||||
cardBackObj.transform.localScale = Vector3.zero;
|
cardBackObj.transform.localScale = Vector3.zero;
|
||||||
|
|
||||||
|
Debug.Log($"[BoosterOpeningPage] Card back {i} activated");
|
||||||
|
|
||||||
// Play reveal animation using Pixelplacement.Tween
|
// Play reveal animation using Pixelplacement.Tween
|
||||||
Tween.LocalScale(cardBackObj.transform, Vector3.one, 0.5f, 0f, Tween.EaseOutBack);
|
Tween.LocalScale(cardBackObj.transform, Vector3.one, 0.5f, 0f, Tween.EaseOutBack);
|
||||||
|
|
||||||
@@ -264,6 +330,7 @@ namespace AppleHills.UI.CardSystem
|
|||||||
|
|
||||||
// Update state
|
// Update state
|
||||||
_currentState = OpeningState.CardBacksVisible;
|
_currentState = OpeningState.CardBacksVisible;
|
||||||
|
Debug.Log($"[BoosterOpeningPage] All {cardsToShow} card backs should now be visible");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -271,140 +338,213 @@ namespace AppleHills.UI.CardSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void OnCardBackClicked(int cardIndex)
|
private void OnCardBackClicked(int cardIndex)
|
||||||
{
|
{
|
||||||
|
Logging.Debug($"[BoosterOpeningPage] Card back clicked at index {cardIndex}");
|
||||||
|
|
||||||
// Only respond to clicks when in the appropriate state
|
// Only respond to clicks when in the appropriate state
|
||||||
if (_currentState != OpeningState.CardBacksVisible) return;
|
if (_currentState != OpeningState.CardBacksVisible)
|
||||||
|
{
|
||||||
|
Logging.Warning($"[BoosterOpeningPage] Card clicked in wrong state: {_currentState}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure the index is valid
|
// Ensure the index is valid
|
||||||
if (cardIndex < 0 || cardIndex >= _boosterCards.Count || cardIndex >= _cardBacks.Count) return;
|
if (cardIndex < 0 || cardIndex >= _boosterCards.Count || cardIndex >= _cardBackButtons.Count)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[BoosterOpeningPage] Invalid card index: {cardIndex}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the card data and card back
|
// Get the card data and card back
|
||||||
CardData cardData = _boosterCards[cardIndex];
|
CardData cardData = _boosterCards[cardIndex];
|
||||||
GameObject cardBack = _cardBacks[cardIndex];
|
Button cardBack = _cardBackButtons[cardIndex];
|
||||||
|
|
||||||
// Start the reveal animation for this specific card
|
// Start the reveal animation for this specific card
|
||||||
StartCoroutine(RevealCard(cardIndex, cardData, cardBack));
|
StartCoroutine(RevealCard(cardIndex, cardData, cardBack.gameObject));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reveals an individual card with animation
|
/// Reveals an individual card with animation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IEnumerator RevealCard(int cardIndex, CardData cardData, GameObject cardBack)
|
private IEnumerator RevealCard(int cardIndex, CardData cardData, GameObject cardBack)
|
||||||
{
|
{
|
||||||
if (cardBack == null || cardRevealContainer.GetChild(cardIndex) == null) yield break;
|
if (cardBack == null)
|
||||||
|
yield break;
|
||||||
|
|
||||||
// Start flip animation
|
// Start flip animation
|
||||||
Transform cardBackTransform = cardBack.transform;
|
Transform cardBackTransform = cardBack.transform;
|
||||||
|
|
||||||
// Step 1: Flip the card 90 degrees (showing the edge)
|
// Step 1: Flip the card 90 degrees (showing the edge)
|
||||||
Tween.LocalRotation(cardBackTransform, new Vector3(0, 90, 0), flipAnimationDuration * 0.5f, 0);
|
Tween.LocalRotation(cardBackTransform, new Vector3(0, 90, 0), flipAnimationDuration * 0.5f, 0);
|
||||||
|
|
||||||
// Wait for half the flip duration
|
// Wait for half the flip duration
|
||||||
yield return new WaitForSeconds(flipAnimationDuration * 0.5f);
|
yield return new WaitForSeconds(flipAnimationDuration * 0.5f);
|
||||||
|
|
||||||
// Step 2: Remove the card back and create the actual card
|
// Step 2: Hide the card back and show the actual card
|
||||||
Destroy(cardBack);
|
cardBack.SetActive(false);
|
||||||
_cardBacks[cardIndex] = null;
|
|
||||||
|
// Instantiate the card prefab at the same position
|
||||||
// Create the actual card at the same position
|
if (cardPrefab != null)
|
||||||
GameObject cardObj = Instantiate(cardPrefab, cardRevealContainer.GetChild(cardIndex));
|
|
||||||
cardObj.transform.localPosition = Vector3.zero;
|
|
||||||
cardObj.transform.localRotation = Quaternion.Euler(0, 90, 0); // Start at 90 degrees
|
|
||||||
|
|
||||||
// Set up the card data
|
|
||||||
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
|
||||||
if (cardUI != null)
|
|
||||||
{
|
{
|
||||||
cardUI.SetupCard(cardData);
|
// Instantiate the card in the same parent as the card back and at the same position
|
||||||
_revealedCards.Add(cardUI);
|
GameObject cardObj = Instantiate(cardPrefab, cardBack.transform.parent);
|
||||||
}
|
cardObj.transform.SetSiblingIndex(cardBackTransform.GetSiblingIndex()); // Keep the same order in hierarchy
|
||||||
|
cardObj.transform.position = cardBackTransform.position; // Same world position
|
||||||
// Step 3: Complete the flip animation
|
|
||||||
Tween.LocalRotation(cardObj.transform, Vector3.zero, flipAnimationDuration * 0.5f, 0);
|
// Set initial rotation to continue the flip animation
|
||||||
|
cardObj.transform.localRotation = Quaternion.Euler(0, 90, 0);
|
||||||
// Increment the revealed card count
|
|
||||||
_revealedCardCount++;
|
// Configure the card UI with the card data
|
||||||
|
CardUIElement cardUI = cardObj.GetComponent<CardUIElement>();
|
||||||
// If all cards have been revealed, show the continue button
|
if (cardUI != null)
|
||||||
if (_revealedCardCount >= _boosterCards.Count)
|
|
||||||
{
|
|
||||||
_currentState = OpeningState.CardsRevealed;
|
|
||||||
if (continueButton != null)
|
|
||||||
{
|
{
|
||||||
continueButton.gameObject.SetActive(true);
|
cardUI.SetupCard(cardData);
|
||||||
|
_revealedCards.Add(cardUI);
|
||||||
// Animate button appearance
|
|
||||||
continueButton.transform.localScale = Vector3.zero;
|
// Play special effects based on card rarity
|
||||||
Tween.LocalScale(continueButton.transform, Vector3.one, 0.3f, 0f, Tween.EaseOutBack);
|
PlayRevealEffect(cardObj, cardData.Rarity);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3: Finish the flip animation (from 90 degrees to 0)
|
||||||
|
Tween.LocalRotation(cardObj.transform, Vector3.zero, flipAnimationDuration * 0.5f, 0);
|
||||||
|
|
||||||
|
// Increment counter of revealed cards
|
||||||
|
_revealedCardCount++;
|
||||||
|
|
||||||
|
// Update state if all cards are revealed
|
||||||
|
if (_revealedCardCount >= _boosterCards.Count)
|
||||||
|
{
|
||||||
|
_currentState = OpeningState.CardsRevealed;
|
||||||
|
|
||||||
|
// Show continue button after a short delay
|
||||||
|
StartCoroutine(ShowContinueButton());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles click on the continue button after cards are revealed
|
/// Plays reveal effect for a card based on its rarity
|
||||||
|
/// </summary>
|
||||||
|
private void PlayRevealEffect(GameObject cardObject, CardRarity rarity)
|
||||||
|
{
|
||||||
|
// Add visual effect based on rarity
|
||||||
|
if (rarity >= CardRarity.Rare)
|
||||||
|
{
|
||||||
|
// For rare cards and above, add a particle effect
|
||||||
|
var particleSystem = cardObject.GetComponentInChildren<ParticleSystem>();
|
||||||
|
if (particleSystem != null)
|
||||||
|
{
|
||||||
|
particleSystem.Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scale up and down for emphasis
|
||||||
|
Transform cardTransform = cardObject.transform;
|
||||||
|
Vector3 originalScale = cardTransform.localScale;
|
||||||
|
|
||||||
|
// Sequence: Scale up slightly, then back to normal
|
||||||
|
Tween.LocalScale(cardTransform, originalScale * 1.2f, 0.2f, 0.1f, Tween.EaseOutBack);
|
||||||
|
Tween.LocalScale(cardTransform, originalScale, 0.15f, 0.3f, Tween.EaseIn);
|
||||||
|
|
||||||
|
// Play sound effect based on rarity (if available)
|
||||||
|
// This would require audio source components to be set up
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Shows the continue button after all cards are revealed
|
||||||
|
/// </summary>
|
||||||
|
private IEnumerator ShowContinueButton()
|
||||||
|
{
|
||||||
|
// Wait for a moment to let the user see all cards
|
||||||
|
yield return new WaitForSeconds(1.0f);
|
||||||
|
|
||||||
|
if (continueButton != null)
|
||||||
|
{
|
||||||
|
// Show the continue button with a nice animation
|
||||||
|
continueButton.gameObject.SetActive(true);
|
||||||
|
continueButton.transform.localScale = Vector3.zero;
|
||||||
|
|
||||||
|
Tween.LocalScale(continueButton.transform, Vector3.one, 0.3f, 0f, Tween.EaseOutBack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles click on the continue button
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void OnContinueClicked()
|
private void OnContinueClicked()
|
||||||
{
|
{
|
||||||
if (_currentState != OpeningState.CardsRevealed) return;
|
if (_currentState != OpeningState.CardsRevealed) return;
|
||||||
|
|
||||||
_currentState = OpeningState.MovingToBackpack;
|
_currentState = OpeningState.MovingToBackpack;
|
||||||
|
|
||||||
|
// Hide continue button
|
||||||
if (continueButton != null)
|
if (continueButton != null)
|
||||||
{
|
{
|
||||||
continueButton.gameObject.SetActive(false);
|
continueButton.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start moving cards to backpack animation
|
// Hide back button during transition
|
||||||
|
if (backButton != null)
|
||||||
|
{
|
||||||
|
backButton.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start animation to move cards to backpack
|
||||||
_moveToBackpackCoroutine = StartCoroutine(MoveCardsToBackpack());
|
_moveToBackpackCoroutine = StartCoroutine(MoveCardsToBackpack());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Animates cards moving to the backpack
|
/// Animates cards moving to the backpack icon
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IEnumerator MoveCardsToBackpack()
|
private IEnumerator MoveCardsToBackpack()
|
||||||
{
|
{
|
||||||
// Use the backpackIcon from CardAlbumUI as the target
|
// Find the backpack icon position if available
|
||||||
Vector3 targetPosition;
|
Transform backpackTransform = null;
|
||||||
|
if (_cardAlbumUI != null && _cardAlbumUI.BackpackIcon != null)
|
||||||
if (_cardAlbumUI != null && _cardAlbumUI.transform.Find("BackpackIcon") != null)
|
|
||||||
{
|
{
|
||||||
// Get the world position of the backpack icon
|
backpackTransform = _cardAlbumUI.BackpackIcon.transform;
|
||||||
targetPosition = _cardAlbumUI.transform.Find("BackpackIcon").position;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (backpackTransform == null)
|
||||||
{
|
{
|
||||||
// Fallback to a default position (lower-right corner)
|
// If no backpack is found, just return to the menu
|
||||||
targetPosition = new Vector3(Screen.width * 0.9f, Screen.height * 0.1f, 0f);
|
UIPageController.Instance.PopPage();
|
||||||
Logging.Warning("[BoosterOpeningPage] Couldn't find backpack icon, using default position.");
|
yield break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move each card to backpack with animation
|
// Move each card to the backpack with slight delay between cards
|
||||||
foreach (var cardUI in _revealedCards)
|
for (int i = 0; i < _revealedCards.Count; i++)
|
||||||
{
|
{
|
||||||
if (cardUI != null)
|
CardUIElement card = _revealedCards[i];
|
||||||
|
if (card != null)
|
||||||
{
|
{
|
||||||
// Call card's move to backpack animation
|
// Get the world position of the backpack
|
||||||
cardUI.OnMoveToBackpackAnimation();
|
Vector3 backpackWorldPos = backpackTransform.position;
|
||||||
|
|
||||||
// Animate movement to backpack
|
// Convert to local space of the card's parent for Tween
|
||||||
Tween.Position(cardUI.transform, targetPosition, 0.5f, 0f, Tween.EaseInBack);
|
Vector3 targetPos = card.transform.parent.InverseTransformPoint(backpackWorldPos);
|
||||||
Tween.LocalScale(cardUI.transform, Vector3.zero, 0.5f, 0f, Tween.EaseInBack);
|
|
||||||
|
// Start the move animation
|
||||||
// Wait for delay between cards
|
Tween.LocalPosition(card.transform, targetPos, 0.5f, cardMoveToBackpackDelay * i);
|
||||||
yield return new WaitForSeconds(0.2f);
|
Tween.LocalScale(card.transform, Vector3.zero, 0.5f, cardMoveToBackpackDelay * i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wait before starting the next card
|
||||||
|
yield return new WaitForSeconds(cardMoveToBackpackDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for final animation
|
// Wait a bit after the last card
|
||||||
yield return new WaitForSeconds(0.5f);
|
yield return new WaitForSeconds(0.5f);
|
||||||
|
|
||||||
// Update state to completed
|
// Update state
|
||||||
_currentState = OpeningState.Completed;
|
_currentState = OpeningState.Completed;
|
||||||
|
|
||||||
// Return to previous page
|
// Return to the menu
|
||||||
UIPageController.Instance.PopPage();
|
UIPageController.Instance.PopPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override for transition animations
|
/// <summary>
|
||||||
|
/// Override for transition in animation using Pixelplacement.Tween
|
||||||
|
/// </summary>
|
||||||
protected override void DoTransitionIn(System.Action onComplete)
|
protected override void DoTransitionIn(System.Action onComplete)
|
||||||
{
|
{
|
||||||
// Simple fade in animation
|
// Simple fade in animation
|
||||||
@@ -415,10 +555,14 @@ namespace AppleHills.UI.CardSystem
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Fallback if no CanvasGroup
|
||||||
onComplete?.Invoke();
|
onComplete?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Override for transition out animation using Pixelplacement.Tween
|
||||||
|
/// </summary>
|
||||||
protected override void DoTransitionOut(System.Action onComplete)
|
protected override void DoTransitionOut(System.Action onComplete)
|
||||||
{
|
{
|
||||||
// Simple fade out animation
|
// Simple fade out animation
|
||||||
@@ -428,8 +572,29 @@ namespace AppleHills.UI.CardSystem
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Fallback if no CanvasGroup
|
||||||
onComplete?.Invoke();
|
onComplete?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OnEnable override to ensure proper initialization
|
||||||
|
/// </summary>
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
if (_cardManager == null)
|
||||||
|
{
|
||||||
|
_cardManager = CardSystemManager.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cardAlbumUI == null)
|
||||||
|
{
|
||||||
|
_cardAlbumUI = FindObjectOfType<CardAlbumUI>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-cache card backs in case they changed while disabled
|
||||||
|
CacheCardBackButtons();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,12 @@ namespace AppleHills.UI.CardSystem
|
|||||||
if (_hasUnseenCards)
|
if (_hasUnseenCards)
|
||||||
{
|
{
|
||||||
_hasUnseenCards = false;
|
_hasUnseenCards = false;
|
||||||
UpdateBoosterVisibility();
|
}
|
||||||
|
|
||||||
|
// Hide the backpack button when entering menu
|
||||||
|
if (backpackButton != null)
|
||||||
|
{
|
||||||
|
backpackButton.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_pageController.CurrentPage == mainMenuPage)
|
else if (_pageController.CurrentPage == mainMenuPage)
|
||||||
@@ -176,8 +181,8 @@ namespace AppleHills.UI.CardSystem
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (backpackIcon != null)
|
if (backpackButton != null)
|
||||||
backpackIcon.SetActive(false);
|
backpackButton.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update menu if it's the main menu page
|
// Update menu if it's the main menu page
|
||||||
@@ -193,13 +198,21 @@ namespace AppleHills.UI.CardSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void ShowOnlyBackpackIcon()
|
private void ShowOnlyBackpackIcon()
|
||||||
{
|
{
|
||||||
if (backpackIcon != null)
|
if (backpackButton != null)
|
||||||
backpackIcon.SetActive(true);
|
{
|
||||||
|
backpackButton.gameObject.SetActive(true);
|
||||||
|
|
||||||
// Update booster notification visibility
|
// Update notification visibility based on booster count
|
||||||
UpdateBoosterVisibility();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the album view page
|
/// Opens the album view page
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
159
docs/card_system_integration_and_testing.md
Normal file
159
docs/card_system_integration_and_testing.md
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user