Setup booster page opening

This commit is contained in:
Michal Pikulski
2025-11-06 10:10:54 +01:00
parent 5792c01908
commit b6d8586eab
9 changed files with 1299 additions and 374 deletions

View File

@@ -1,369 +1,267 @@
// using UnityEditor; using UnityEditor;
// using UnityEngine; using UnityEngine;
// using AppleHills.Data.CardSystem; using AppleHills.Data.CardSystem;
// using Data.CardSystem; using Data.CardSystem;
// using Core; using Core;
// using UI.CardSystem; using UI.CardSystem;
// using UnityEngine.UI; using UnityEngine.UI;
// using System.Collections.Generic; using System.Collections.Generic;
//
// namespace Editor.CardSystem namespace Editor.CardSystem
// { {
// /// <summary> /// <summary>
// /// Editor window for testing the Card System in play mode. /// Editor window for testing the Card System in play mode.
// /// Provides buttons to test core functionalities like adding booster packs, opening packs, and generating cards. /// Provides buttons to test core functionalities like adding booster packs, opening packs, and generating cards.
// /// </summary> /// </summary>
// public class CardSystemTesterWindow : EditorWindow public class CardSystemTesterWindow : EditorWindow
// { {
// // Test Settings // Test Settings
// private int boosterPacksToAdd = 3; private int boosterPacksToAdd = 3;
// private int cardsToGenerate = 10; private int cardsToGenerate = 10;
// private bool autoOpenPacksWhenAdded = false;
// // Debug Info
// // Debug Info private int currentBoosterCount;
// private int currentBoosterCount; private int totalCardsInCollection;
// private int totalCardsInCollection; private string lastActionMessage = "";
// private string lastActionMessage = "";
// // UI State
// // UI State private Vector2 scrollPosition;
// private Vector2 scrollPosition;
// private CardAlbumUI cachedCardAlbumUI; [MenuItem("AppleHills/Card System Tester")]
// public static void ShowWindow()
// [MenuItem("AppleHills/Card System Tester")] {
// public static void ShowWindow() var window = GetWindow<CardSystemTesterWindow>(false, "Card System Tester", true);
// { window.minSize = new Vector2(400, 500);
// var window = GetWindow<CardSystemTesterWindow>(false, "Card System Tester", true); }
// window.minSize = new Vector2(400, 500);
// } private void OnEnable()
// {
// private void OnEnable() EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
// { }
// EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
// } private void OnDisable()
// {
// private void OnDisable() EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
// { }
// EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
// } private void OnPlayModeStateChanged(PlayModeStateChange state)
// {
// private void OnPlayModeStateChanged(PlayModeStateChange state) if (state == PlayModeStateChange.EnteredPlayMode)
// { {
// if (state == PlayModeStateChange.EnteredPlayMode) RefreshDebugInfo();
// { }
// cachedCardAlbumUI = null; else if (state == PlayModeStateChange.ExitingPlayMode)
// RefreshDebugInfo(); {
// } lastActionMessage = "";
// else if (state == PlayModeStateChange.ExitingPlayMode) }
// {
// cachedCardAlbumUI = null; Repaint();
// lastActionMessage = ""; }
// }
// private void OnGUI()
// Repaint(); {
// } scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
//
// private void OnGUI() // Header
// { EditorGUILayout.Space(10);
// scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); EditorGUILayout.LabelField("Card System Tester", EditorStyles.boldLabel);
// EditorGUILayout.HelpBox("This tool allows you to test the card system in play mode. " +
// // Header "Enter play mode to enable the testing functions.", MessageType.Info);
// EditorGUILayout.Space(10);
// EditorGUILayout.LabelField("Card System Tester", EditorStyles.boldLabel); EditorGUILayout.Space(10);
// EditorGUILayout.HelpBox("This tool allows you to test the card system in play mode. " +
// "Enter play mode to enable the testing functions.", MessageType.Info); // Test Settings Section
// DrawTestSettings();
// EditorGUILayout.Space(10);
// EditorGUILayout.Space(10);
// // Test Settings Section
// DrawTestSettings(); // Debug Info Section
// DrawDebugInfo();
// EditorGUILayout.Space(10);
// EditorGUILayout.Space(10);
// // Debug Info Section
// DrawDebugInfo(); // Test Actions Section
// DrawTestActions();
// EditorGUILayout.Space(10);
// EditorGUILayout.EndScrollView();
// // Test Actions Section }
// DrawTestActions();
// private void DrawTestSettings()
// EditorGUILayout.EndScrollView(); {
// } EditorGUILayout.LabelField("Test Settings", EditorStyles.boldLabel);
//
// private void DrawTestSettings() EditorGUI.BeginDisabledGroup(!Application.isPlaying);
// {
// EditorGUILayout.LabelField("Test Settings", EditorStyles.boldLabel); boosterPacksToAdd = EditorGUILayout.IntSlider("Booster Packs to Add", boosterPacksToAdd, 1, 10);
// cardsToGenerate = EditorGUILayout.IntSlider("Cards to Generate", cardsToGenerate, 1, 100);
// EditorGUI.BeginDisabledGroup(!Application.isPlaying);
// EditorGUI.EndDisabledGroup();
// boosterPacksToAdd = EditorGUILayout.IntSlider("Booster Packs to Add", boosterPacksToAdd, 1, 10); }
// cardsToGenerate = EditorGUILayout.IntSlider("Cards to Generate", cardsToGenerate, 1, 100);
// autoOpenPacksWhenAdded = EditorGUILayout.Toggle("Auto-Open Packs When Added", autoOpenPacksWhenAdded); private void DrawDebugInfo()
// {
// EditorGUI.EndDisabledGroup(); EditorGUILayout.LabelField("Debug Info", EditorStyles.boldLabel);
// }
// if (Application.isPlaying)
// private void DrawDebugInfo() {
// { EditorGUI.BeginDisabledGroup(true);
// EditorGUILayout.LabelField("Debug Info", EditorStyles.boldLabel); EditorGUILayout.IntField("Current Booster Count", currentBoosterCount);
// EditorGUILayout.IntField("Total Cards in Collection", totalCardsInCollection);
// if (Application.isPlaying) EditorGUI.EndDisabledGroup();
// {
// EditorGUI.BeginDisabledGroup(true); if (!string.IsNullOrEmpty(lastActionMessage))
// EditorGUILayout.IntField("Current Booster Count", currentBoosterCount); {
// EditorGUILayout.IntField("Total Cards in Collection", totalCardsInCollection); EditorGUILayout.Space(5);
// EditorGUI.EndDisabledGroup(); EditorGUILayout.HelpBox(lastActionMessage, MessageType.None);
// }
// if (!string.IsNullOrEmpty(lastActionMessage))
// { EditorGUILayout.Space(5);
// EditorGUILayout.Space(5); if (GUILayout.Button("Refresh Debug Info"))
// EditorGUILayout.HelpBox(lastActionMessage, MessageType.None); {
// } RefreshDebugInfo();
// }
// EditorGUILayout.Space(5); }
// if (GUILayout.Button("Refresh Debug Info")) else
// { {
// RefreshDebugInfo(); EditorGUILayout.HelpBox("Debug info available in play mode.", MessageType.Warning);
// } }
// } }
// else
// { private void DrawTestActions()
// EditorGUILayout.HelpBox("Debug info available in play mode.", MessageType.Warning); {
// } EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel);
// }
// if (!Application.isPlaying)
// private void DrawTestActions() {
// { EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Warning);
// EditorGUILayout.LabelField("Test Actions", EditorStyles.boldLabel); return;
// }
// if (!Application.isPlaying)
// { // Booster Pack Actions
// EditorGUILayout.HelpBox("Enter Play Mode to use these testing functions.", MessageType.Warning); EditorGUILayout.Space(5);
// return; EditorGUILayout.LabelField("Booster Pack Actions", EditorStyles.miniBoldLabel);
// }
// if (GUILayout.Button("Add Booster Packs", GUILayout.Height(30)))
// // Booster Pack Actions {
// EditorGUILayout.Space(5); AddBoosterPacks();
// EditorGUILayout.LabelField("Booster Pack Actions", EditorStyles.miniBoldLabel); }
//
// if (GUILayout.Button("Add Booster Packs", GUILayout.Height(30))) // Card Generation Actions
// { EditorGUILayout.Space(10);
// AddBoosterPacks(); EditorGUILayout.LabelField("Card Generation Actions", EditorStyles.miniBoldLabel);
// }
// if (GUILayout.Button("Generate Random Cards", GUILayout.Height(30)))
// if (GUILayout.Button("Open Card Menu", GUILayout.Height(30))) {
// { GenerateRandomCards();
// SimulateBackpackClick(); }
// }
// EditorGUILayout.Space(5);
// if (GUILayout.Button("Open Booster Pack", GUILayout.Height(30)))
// { // Danger Zone
// OpenBoosterPack(); EditorGUILayout.Space(10);
// } EditorGUILayout.LabelField("Danger Zone", EditorStyles.miniBoldLabel);
//
// if (GUILayout.Button("Open Album View", GUILayout.Height(30))) GUI.backgroundColor = new Color(1f, 0.6f, 0.6f);
// { if (GUILayout.Button("Clear All Cards", GUILayout.Height(30)))
// OpenAlbumView(); {
// } if (EditorUtility.DisplayDialog("Clear All Cards",
// "Are you sure you want to clear all cards from the inventory? This cannot be undone in this play session.",
// // Card Generation Actions "Clear All", "Cancel"))
// EditorGUILayout.Space(10); {
// EditorGUILayout.LabelField("Card Generation Actions", EditorStyles.miniBoldLabel); ClearAllCards();
// }
// if (GUILayout.Button("Generate Random Cards", GUILayout.Height(30))) }
// { GUI.backgroundColor = Color.white;
// GenerateRandomCards(); }
// }
// // Refresh the debug information
// EditorGUILayout.Space(5); private void RefreshDebugInfo()
// {
// // Danger Zone if (!Application.isPlaying)
// EditorGUILayout.Space(10); return;
// EditorGUILayout.LabelField("Danger Zone", EditorStyles.miniBoldLabel);
// if (CardSystemManager.Instance != null)
// GUI.backgroundColor = new Color(1f, 0.6f, 0.6f); {
// if (GUILayout.Button("Clear All Cards", GUILayout.Height(30))) currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount();
// { totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
// if (EditorUtility.DisplayDialog("Clear All Cards", Repaint();
// "Are you sure you want to clear all cards from the inventory? This cannot be undone in this play session.", }
// "Clear All", "Cancel")) }
// {
// ClearAllCards(); // Test Action Methods
// }
// } private void AddBoosterPacks()
// GUI.backgroundColor = Color.white; {
// } if (CardSystemManager.Instance != null)
// {
// // Refresh the debug information CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd);
// private void RefreshDebugInfo() lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)";
// { Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// if (!Application.isPlaying) RefreshDebugInfo();
// return; }
// else
// if (CardSystemManager.Instance != null) {
// { lastActionMessage = "Error: CardSystemManager instance not found!";
// currentBoosterCount = CardSystemManager.Instance.GetBoosterPackCount(); Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
// totalCardsInCollection = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count; Repaint();
// Repaint(); }
// } }
// }
// private void GenerateRandomCards()
// private CardAlbumUI GetCardAlbumUI() {
// { if (CardSystemManager.Instance != null)
// if (cachedCardAlbumUI == null) {
// { int cardsAdded = 0;
// cachedCardAlbumUI = Object.FindAnyObjectByType<CardAlbumUI>(); List<CardDefinition> allDefinitions = CardSystemManager.Instance.GetAllCardDefinitions();
//
// if (cachedCardAlbumUI == null) if (allDefinitions.Count == 0)
// { {
// lastActionMessage = "Error: No CardAlbumUI found in the scene!"; lastActionMessage = "Error: No card definitions available";
// Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage); Logging.Warning($"[CardSystemTesterWindow] {lastActionMessage}");
// Repaint(); Repaint();
// } return;
// } }
//
// return cachedCardAlbumUI; for (int i = 0; i < cardsToGenerate; i++)
// } {
// // Get a random card definition
// // Test Action Methods CardDefinition randomDef = allDefinitions[Random.Range(0, allDefinitions.Count)];
//
// private void AddBoosterPacks() // Create a card data instance and add it to inventory
// { CardData newCard = randomDef.CreateCardData();
// if (CardSystemManager.Instance != null) CardSystemManager.Instance.GetCardInventory().AddCard(newCard);
// { cardsAdded++;
// CardSystemManager.Instance.AddBoosterPack(boosterPacksToAdd); }
// lastActionMessage = $"Added {boosterPacksToAdd} booster pack(s)";
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}"); lastActionMessage = $"Generated {cardsAdded} random cards";
// RefreshDebugInfo(); Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// RefreshDebugInfo();
// if (autoOpenPacksWhenAdded && GetCardAlbumUI() != null) }
// { else
// SimulateBackpackClick(); {
// cachedCardAlbumUI.OpenBoosterPack(); lastActionMessage = "Error: CardSystemManager instance not found!";
// } Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
// } Repaint();
// else }
// { }
// lastActionMessage = "Error: CardSystemManager instance not found!";
// Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage); private void ClearAllCards()
// Repaint(); {
// } if (CardSystemManager.Instance != null)
// } {
// int count = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
// private void SimulateBackpackClick() CardSystemManager.Instance.GetCardInventory().ClearAllCards();
// { lastActionMessage = $"Cleared {count} cards from inventory";
// CardAlbumUI cardAlbumUI = GetCardAlbumUI(); Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// RefreshDebugInfo();
// if (cardAlbumUI != null) }
// { else
// if (cardAlbumUI.BackpackIcon != null) {
// { lastActionMessage = "Error: CardSystemManager instance not found!";
// Button backpackButton = cardAlbumUI.BackpackIcon.GetComponent<Button>(); Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
// if (backpackButton != null) Repaint();
// { }
// backpackButton.onClick.Invoke(); }
// lastActionMessage = "Opened card menu via backpack click"; }
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}"); }
// }
// else
// {
// lastActionMessage = "Failed to find Button component on backpack icon";
// Logging.Warning($"[CardSystemTesterWindow] {lastActionMessage}");
// }
// }
// else
// {
// lastActionMessage = "BackpackIcon reference is null";
// Logging.Warning($"[CardSystemTesterWindow] {lastActionMessage}");
// }
//
// Repaint();
// }
// }
//
// private void OpenBoosterPack()
// {
// CardAlbumUI cardAlbumUI = GetCardAlbumUI();
//
// if (cardAlbumUI != null)
// {
// SimulateBackpackClick();
// cardAlbumUI.OpenBoosterPack();
// lastActionMessage = "Opening booster pack";
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// RefreshDebugInfo();
// }
// }
//
// private void OpenAlbumView()
// {
// CardAlbumUI cardAlbumUI = GetCardAlbumUI();
//
// if (cardAlbumUI != null)
// {
// SimulateBackpackClick();
// cardAlbumUI.OpenAlbumView();
// lastActionMessage = "Opening album view";
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// Repaint();
// }
// }
//
// private void GenerateRandomCards()
// {
// if (CardSystemManager.Instance != null)
// {
// int cardsAdded = 0;
// List<CardDefinition> allDefinitions = CardSystemManager.Instance.GetAllCardDefinitions();
//
// if (allDefinitions.Count == 0)
// {
// lastActionMessage = "Error: No card definitions available";
// Logging.Warning($"[CardSystemTesterWindow] {lastActionMessage}");
// Repaint();
// return;
// }
//
// for (int i = 0; i < cardsToGenerate; i++)
// {
// // Get a random card definition
// CardDefinition randomDef = allDefinitions[Random.Range(0, allDefinitions.Count)];
//
// // Create a card data instance and add it to inventory
// CardData newCard = randomDef.CreateCardData();
// CardSystemManager.Instance.GetCardInventory().AddCard(newCard);
// cardsAdded++;
// }
//
// lastActionMessage = $"Generated {cardsAdded} random cards";
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// RefreshDebugInfo();
// }
// else
// {
// lastActionMessage = "Error: CardSystemManager instance not found!";
// Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
// Repaint();
// }
// }
//
// private void ClearAllCards()
// {
// if (CardSystemManager.Instance != null)
// {
// int count = CardSystemManager.Instance.GetCardInventory().GetAllCards().Count;
// CardSystemManager.Instance.GetCardInventory().ClearAllCards();
// lastActionMessage = $"Cleared {count} cards from inventory";
// Logging.Debug($"[CardSystemTesterWindow] {lastActionMessage}");
// RefreshDebugInfo();
// }
// else
// {
// lastActionMessage = "Error: CardSystemManager instance not found!";
// Debug.LogError("[CardSystemTesterWindow] " + lastActionMessage);
// Repaint();
// }
// }
// }
// }
//

View File

@@ -0,0 +1,334 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3555924788298046233
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2510839793683184596}
- component: {fileID: 7931090856607470176}
- component: {fileID: 3867938905670777662}
m_Layer: 5
m_Name: NotificationDot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2510839793683184596
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3555924788298046233}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8243838592031101330}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7931090856607470176
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3555924788298046233}
m_CullTransparentMesh: 1
--- !u!114 &3867938905670777662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3555924788298046233}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 1454986794490068504, guid: dad47d8bcf29e4742803088801ae4b04, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3813704348964656314
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8243838592031101330}
m_Layer: 5
m_Name: Container
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8243838592031101330
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3813704348964656314}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2510839793683184596}
- {fileID: 912809337432025300}
m_Father: {fileID: 4399514539281523652}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &4367103374191057909
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 912809337432025300}
- component: {fileID: 2674835159736628855}
- component: {fileID: 7140808185011848511}
m_Layer: 5
m_Name: BoosterCount
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &912809337432025300
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4367103374191057909}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8243838592031101330}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2674835159736628855
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4367103374191057909}
m_CullTransparentMesh: 1
--- !u!114 &7140808185011848511
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4367103374191057909}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: 1
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 40
m_fontSizeBase: 40
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &6686144552275602124
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4399514539281523652}
- component: {fileID: 7701049314552813552}
- component: {fileID: 6728421751561708195}
m_Layer: 5
m_Name: BoosterNotifications
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4399514539281523652
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6686144552275602124}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8243838592031101330}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 37.5, y: 37.5}
m_SizeDelta: {x: 75, y: 75}
m_Pivot: {x: 1, y: 1}
--- !u!114 &7701049314552813552
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6686144552275602124}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5845ed3764635fe429b6f1063effdd8a, type: 3}
m_Name:
m_EditorClassIdentifier: AppleHillsScripts::AppleHills.UI.CardSystem.BoosterNotificationDot
dotBackground: {fileID: 3555924788298046233}
countText: {fileID: 7140808185011848511}
hideWhenZero: 1
useAnimation: 1
textPrefix:
textSuffix:
textColor: {r: 1, g: 1, b: 1, a: 1}
useTween: 1
pulseDuration: 0.3
pulseScale: 1.2
animator: {fileID: 0}
animationTrigger: Update
--- !u!95 &6728421751561708195
Animator:
serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6686144552275602124}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 0}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_AnimatePhysics: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fd3f9527253841847a5a204072bec7bb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -140,6 +140,81 @@ MonoBehaviour:
selectedScale: 2 selectedScale: 2
normalScale: 1 normalScale: 1
scaleTransitionDuration: 0.2 scaleTransitionDuration: 0.2
--- !u!1 &1216465079156012345
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 350533035305033130}
- component: {fileID: 8048204881213048739}
- component: {fileID: 5738749057790084506}
m_Layer: 5
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &350533035305033130
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1216465079156012345}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 691082512065824864}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8048204881213048739
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1216465079156012345}
m_CullTransparentMesh: 1
--- !u!114 &5738749057790084506
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1216465079156012345}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.43137255}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1661343575874124514 --- !u!1 &1661343575874124514
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -606,7 +681,7 @@ GameObject:
- component: {fileID: 4655070334633964078} - component: {fileID: 4655070334633964078}
- component: {fileID: 982405227736437572} - component: {fileID: 982405227736437572}
m_Layer: 5 m_Layer: 5
m_Name: Button (2) m_Name: Booster2
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -727,6 +802,76 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
m_AspectMode: 1 m_AspectMode: 1
m_AspectRatio: 0.56378603 m_AspectRatio: 0.56378603
--- !u!1 &5184507515108885408
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 691082512065824864}
- component: {fileID: 3129206684028946970}
- component: {fileID: 304904072851265091}
m_Layer: 0
m_Name: BoosterOpeningPage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &691082512065824864
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5184507515108885408}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 350533035305033130}
m_Father: {fileID: 8113036759791843642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!225 &3129206684028946970
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5184507515108885408}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!114 &304904072851265091
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5184507515108885408}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 91691a5efb1346b5b34482dd8200c868, type: 3}
m_Name:
m_EditorClassIdentifier: AppleHillsScripts::UI.CardSystem.BoosterOpeningPage
PageName: Booster Opening Page
transitionDuration: 0.3
canvasGroup: {fileID: 3129206684028946970}
closeButton: {fileID: 0}
cardDisplayContainer: {fileID: 0}
cardDisplayPrefab: {fileID: 0}
cardRevealDelay: 0.5
cardSpacing: 50
--- !u!1 &5894929957585504571 --- !u!1 &5894929957585504571
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -962,7 +1107,8 @@ 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: 8268404978292125473}
m_Father: {fileID: 8113036759791843642} m_Father: {fileID: 8113036759791843642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
@@ -1118,7 +1264,7 @@ GameObject:
- component: {fileID: 3176006474186944314} - component: {fileID: 3176006474186944314}
- component: {fileID: 2938846613341841058} - component: {fileID: 2938846613341841058}
m_Layer: 5 m_Layer: 5
m_Name: Button m_Name: Booster3
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -1272,6 +1418,7 @@ RectTransform:
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 5906828909529466605} - {fileID: 5906828909529466605}
- {fileID: 691082512065824864}
- {fileID: 4472180225153869618} - {fileID: 4472180225153869618}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1371,7 +1518,7 @@ GameObject:
- component: {fileID: 2682813042770983550} - component: {fileID: 2682813042770983550}
- component: {fileID: 7409731688398821684} - component: {fileID: 7409731688398821684}
m_Layer: 5 m_Layer: 5
m_Name: Button (1) m_Name: Booster1
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -1600,6 +1747,26 @@ PrefabInstance:
propertyPath: exitButton propertyPath: exitButton
value: value:
objectReference: {fileID: 2193243227233893301} objectReference: {fileID: 2193243227233893301}
- target: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: boosterOpeningPage
value:
objectReference: {fileID: 304904072851265091}
- target: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: boosterPackButtons.Array.size
value: 3
objectReference: {fileID: 0}
- target: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: 'boosterPackButtons.Array.data[0]'
value:
objectReference: {fileID: 9208173931017297427}
- target: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: 'boosterPackButtons.Array.data[1]'
value:
objectReference: {fileID: 4385084760331272994}
- target: {fileID: 2162084082982493373, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: 'boosterPackButtons.Array.data[2]'
value:
objectReference: {fileID: 8678042374005579956}
- target: {fileID: 2432304785419660060, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3} - target: {fileID: 2432304785419660060, guid: 88a05fdd940194543ade1cc2bcdada5f, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 0
@@ -2003,3 +2170,105 @@ MonoBehaviour:
selectedScale: 1.5 selectedScale: 1.5
normalScale: 1 normalScale: 1
scaleTransitionDuration: 0.2 scaleTransitionDuration: 0.2
--- !u!1001 &5742495987250154725
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 4472180225153869618}
m_Modifications:
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_Pivot.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_Pivot.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchorMin.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_SizeDelta.x
value: 75
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_SizeDelta.y
value: 75
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_AnchoredPosition.y
value: -164
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6686144552275602124, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
propertyPath: m_Name
value: BoosterNotifications
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
--- !u!224 &8268404978292125473 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 4399514539281523652, guid: fd3f9527253841847a5a204072bec7bb, type: 3}
m_PrefabInstance: {fileID: 5742495987250154725}
m_PrefabAsset: {fileID: 0}

View File

@@ -1,4 +1,6 @@
using Pixelplacement; using Bootstrap;
using Data.CardSystem;
using Pixelplacement;
using UI.Core; using UI.Core;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@@ -7,12 +9,18 @@ namespace UI.CardSystem
{ {
/// <summary> /// <summary>
/// UI page for viewing the player's card collection in an album. /// UI page for viewing the player's card collection in an album.
/// Manages booster pack button visibility and opening flow.
/// </summary> /// </summary>
public class AlbumViewPage : UIPage public class AlbumViewPage : UIPage
{ {
[Header("UI References")]
[SerializeField] private CanvasGroup canvasGroup; [SerializeField] private CanvasGroup canvasGroup;
[SerializeField] private Button exitButton; [SerializeField] private Button exitButton;
[SerializeField] private BookCurlPro.BookPro book; [SerializeField] private BookCurlPro.BookPro book;
[Header("Booster Pack UI")]
[SerializeField] private GameObject[] boosterPackButtons;
[SerializeField] private BoosterOpeningPage boosterOpeningPage;
private void Awake() private void Awake()
{ {
@@ -28,16 +36,73 @@ namespace UI.CardSystem
exitButton.onClick.AddListener(OnExitButtonClicked); exitButton.onClick.AddListener(OnExitButtonClicked);
} }
// Set up booster pack button listeners
SetupBoosterButtonListeners();
// Register for post-boot initialization
BootCompletionService.RegisterInitAction(InitializePostBoot);
// UI pages should start disabled // UI pages should start disabled
gameObject.SetActive(false); gameObject.SetActive(false);
} }
private void InitializePostBoot()
{
// Subscribe to CardSystemManager events
if (CardSystemManager.Instance != null)
{
CardSystemManager.Instance.OnBoosterCountChanged += OnBoosterCountChanged;
// Update initial button visibility
int initialCount = CardSystemManager.Instance.GetBoosterPackCount();
UpdateBoosterButtons(initialCount);
}
}
private void SetupBoosterButtonListeners()
{
if (boosterPackButtons == null) return;
for (int i = 0; i < boosterPackButtons.Length; i++)
{
if (boosterPackButtons[i] == null) continue;
Button button = boosterPackButtons[i].GetComponent<Button>();
if (button != null)
{
button.onClick.AddListener(OnBoosterButtonClicked);
}
}
}
private void OnDestroy() private void OnDestroy()
{ {
// Unsubscribe from CardSystemManager
if (CardSystemManager.Instance != null)
{
CardSystemManager.Instance.OnBoosterCountChanged -= OnBoosterCountChanged;
}
// Clean up exit button
if (exitButton != null) if (exitButton != null)
{ {
exitButton.onClick.RemoveListener(OnExitButtonClicked); exitButton.onClick.RemoveListener(OnExitButtonClicked);
} }
// Clean up booster button listeners
if (boosterPackButtons != null)
{
foreach (var buttonObj in boosterPackButtons)
{
if (buttonObj == null) continue;
Button button = buttonObj.GetComponent<Button>();
if (button != null)
{
button.onClick.RemoveListener(OnBoosterButtonClicked);
}
}
}
} }
private void OnExitButtonClicked() private void OnExitButtonClicked()
@@ -63,6 +128,34 @@ namespace UI.CardSystem
} }
} }
} }
private void OnBoosterCountChanged(int newCount)
{
UpdateBoosterButtons(newCount);
}
private void UpdateBoosterButtons(int boosterCount)
{
if (boosterPackButtons == null || boosterPackButtons.Length == 0) return;
int visibleCount = Mathf.Min(boosterCount, boosterPackButtons.Length);
for (int i = 0; i < boosterPackButtons.Length; i++)
{
if (boosterPackButtons[i] != null)
{
boosterPackButtons[i].SetActive(i < visibleCount);
}
}
}
private void OnBoosterButtonClicked()
{
if (boosterOpeningPage != null && UIPageController.Instance != null)
{
UIPageController.Instance.PushPage(boosterOpeningPage);
}
}
protected override void DoTransitionIn(System.Action onComplete) protected override void DoTransitionIn(System.Action onComplete)
{ {

View File

@@ -0,0 +1,225 @@
using Bootstrap;
using Data.CardSystem;
using Pixelplacement;
using Pixelplacement.TweenSystem;
using TMPro;
using UnityEngine;
namespace UI.CardSystem
{
/// <summary>
/// Manages a notification dot that displays a count (e.g., booster packs)
/// Can be reused across different UI elements that need to show numeric notifications
/// Automatically syncs with CardSystemManager to display booster pack count
/// </summary>
public class BoosterNotificationDot : MonoBehaviour
{
[Header("UI References")]
[SerializeField] private GameObject dotBackground;
[SerializeField] private TextMeshProUGUI countText;
[Header("Settings")]
[SerializeField] private bool hideWhenZero = true;
[SerializeField] private bool useAnimation = false;
[SerializeField] private string textPrefix = "";
[SerializeField] private string textSuffix = "";
[SerializeField] private Color textColor = Color.white;
[Header("Animation")]
[SerializeField] private bool useTween = true;
[SerializeField] private float pulseDuration = 0.3f;
[SerializeField] private float pulseScale = 1.2f;
// Optional animator reference
[SerializeField] private Animator animator;
[SerializeField] private string animationTrigger = "Update";
// Current count value
private int _currentCount;
private Vector3 _originalScale;
private TweenBase _activeTween;
private void Awake()
{
// Store original scale for pulse animation
if (dotBackground != null)
{
_originalScale = dotBackground.transform.localScale;
}
// Apply text color
if (countText != null)
{
countText.color = textColor;
}
// Register for post-boot initialization
BootCompletionService.RegisterInitAction(InitializePostBoot);
}
private void InitializePostBoot()
{
// Subscribe to CardSystemManager events
if (CardSystemManager.Instance != null)
{
CardSystemManager.Instance.OnBoosterCountChanged += OnBoosterCountChanged;
// Poll initial count and display it
int initialCount = CardSystemManager.Instance.GetBoosterPackCount();
SetCount(initialCount);
}
else
{
// If CardSystemManager isn't available yet, set to default count
SetCount(_currentCount);
}
}
private void OnDestroy()
{
// Unsubscribe from CardSystemManager events to prevent memory leaks
if (CardSystemManager.Instance != null)
{
CardSystemManager.Instance.OnBoosterCountChanged -= OnBoosterCountChanged;
}
}
/// <summary>
/// Callback when booster count changes in CardSystemManager
/// </summary>
private void OnBoosterCountChanged(int newCount)
{
SetCount(newCount);
}
/// <summary>
/// Sets the count displayed on the notification dot
/// Also handles visibility based on settings
/// </summary>
public void SetCount(int count)
{
bool countChanged = count != _currentCount;
_currentCount = count;
// Update text
if (countText != null)
{
countText.text = textPrefix + count.ToString() + textSuffix;
}
// Handle visibility
if (hideWhenZero)
{
SetVisibility(count > 0);
}
// Play animation if value changed and animation is enabled
if (countChanged && count > 0)
{
if (useAnimation)
{
Animate();
}
}
}
/// <summary>
/// Gets the current count value
/// </summary>
public int GetCount()
{
return _currentCount;
}
/// <summary>
/// Set text formatting options
/// </summary>
public void SetFormatting(string prefix, string suffix, Color color)
{
textPrefix = prefix;
textSuffix = suffix;
textColor = color;
if (countText != null)
{
countText.color = color;
// Update text with new formatting
countText.text = textPrefix + _currentCount.ToString() + textSuffix;
}
}
/// <summary>
/// Explicitly control the notification dot visibility
/// </summary>
public void SetVisibility(bool isVisible)
{
if (dotBackground != null)
{
dotBackground.SetActive(isVisible);
}
if (countText != null)
{
countText.gameObject.SetActive(isVisible);
}
}
/// <summary>
/// Show the notification dot
/// </summary>
public void Show()
{
SetVisibility(true);
}
/// <summary>
/// Hide the notification dot
/// </summary>
public void Hide()
{
SetVisibility(false);
}
/// <summary>
/// Play animation manually - either using Animator or Tween
/// </summary>
public void Animate()
{
if (useAnimation)
{
if (animator != null)
{
animator.SetTrigger(animationTrigger);
}
else if (useTween && dotBackground != null)
{
// Cancel any existing tweens on this transform
if(_activeTween != null)
_activeTween.Cancel();
// Reset to original scale
dotBackground.transform.localScale = _originalScale;
// Pulse animation using Tween
_activeTween = Tween.LocalScale(dotBackground.transform,
_originalScale * pulseScale,
pulseDuration/2,
0,
Tween.EaseOut,
Tween.LoopType.None,
null,
() => {
// Scale back to original size
Tween.LocalScale(dotBackground.transform,
_originalScale,
pulseDuration/2,
0,
Tween.EaseIn);
},
obeyTimescale: false);
}
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5845ed3764635fe429b6f1063effdd8a

View File

@@ -0,0 +1,94 @@
using System.Collections;
using System.Collections.Generic;
using AppleHills.Data.CardSystem;
using Data.CardSystem;
using Pixelplacement;
using UI.Core;
using UnityEngine;
using UnityEngine.UI;
namespace UI.CardSystem
{
/// <summary>
/// UI page for opening booster packs and displaying the cards received.
/// Automatically triggers the opening when the page is shown.
/// </summary>
public class BoosterOpeningPage : UIPage
{
[Header("UI References")]
[SerializeField] private CanvasGroup canvasGroup;
[SerializeField] private Button closeButton;
[Header("Card Display")]
[SerializeField] private Transform cardDisplayContainer;
[SerializeField] private CardDisplay cardDisplayPrefab;
[Header("Settings")]
[SerializeField] private float cardRevealDelay = 0.5f;
[SerializeField] private float cardSpacing = 50f;
private void Awake()
{
// Make sure we have a CanvasGroup for transitions
if (canvasGroup == null)
canvasGroup = GetComponent<CanvasGroup>();
if (canvasGroup == null)
canvasGroup = gameObject.AddComponent<CanvasGroup>();
// Set up close button
if (closeButton != null)
{
closeButton.onClick.AddListener(OnCloseButtonClicked);
}
// UI pages should start disabled
gameObject.SetActive(false);
}
private void OnDestroy()
{
if (closeButton != null)
{
closeButton.onClick.RemoveListener(OnCloseButtonClicked);
}
}
private void OnCloseButtonClicked()
{
if (UIPageController.Instance != null)
{
UIPageController.Instance.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, obeyTimescale: false);
}
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, obeyTimescale: false);
}
else
{
// Fallback if no CanvasGroup
onComplete?.Invoke();
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 91691a5efb1346b5b34482dd8200c868
timeCreated: 1762418615