From 6e466cd7aaa390b86a999637848866ca9e6bb31f Mon Sep 17 00:00:00 2001 From: Michal Pikulski Date: Fri, 7 Nov 2025 17:49:43 +0100 Subject: [PATCH] Add dev options ot the minigame menu --- Assets/Prefabs/UI/PauseMenu.prefab | 470 +++++++++++++++++- .../Data/CardSystem/CardSystemManager.cs | 19 +- Assets/Scripts/UI/PauseMenu.cs | 92 ++++ 3 files changed, 577 insertions(+), 4 deletions(-) diff --git a/Assets/Prefabs/UI/PauseMenu.prefab b/Assets/Prefabs/UI/PauseMenu.prefab index b4300dd4..99c6d9be 100644 --- a/Assets/Prefabs/UI/PauseMenu.prefab +++ b/Assets/Prefabs/UI/PauseMenu.prefab @@ -1,5 +1,83 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &511275990325051221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8251498226431799150} + - component: {fileID: 8048467747487978610} + - component: {fileID: 8715265251219887933} + m_Layer: 0 + m_Name: DevButtons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8251498226431799150 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511275990325051221} + 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: 7689186332346484199} + - {fileID: 6468639774908699391} + - {fileID: 3190171609966749241} + m_Father: {fileID: 1302888740346723223} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.25412482, y: 0.22863281} + m_AnchorMax: {x: 0.7471072, y: 0.67300004} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -0.000044160523, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8048467747487978610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511275990325051221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GridLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 200, y: 200} + m_Spacing: {x: 100, y: 100} + m_Constraint: 1 + m_ConstraintCount: 2 +--- !u!114 &8715265251219887933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511275990325051221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter + m_AspectMode: 2 + m_AspectRatio: 1.0827775 --- !u!1 &667683895919791839 GameObject: m_ObjectHideFlags: 0 @@ -35,6 +113,7 @@ RectTransform: m_Children: - {fileID: 1639126667473908565} - {fileID: 5605205583985027889} + - {fileID: 8251498226431799150} - {fileID: 9052230212113207254} m_Father: {fileID: 1596438591304698361} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -110,6 +189,9 @@ MonoBehaviour: pauseMenuPanel: {fileID: 667683895919791839} pauseButton: {fileID: 2741683265562644894} canvasGroup: {fileID: 0} + devOptionsButton: {fileID: 3801156735001504240} + mainOptionsContainer: {fileID: 9039430485754110792} + devOptionsContainer: {fileID: 511275990325051221} --- !u!114 &2181820907823665012 MonoBehaviour: m_ObjectHideFlags: 0 @@ -341,6 +423,138 @@ MonoBehaviour: m_BlockingMask: serializedVersion: 2 m_Bits: 4294967295 +--- !u!1 &2364804940449778366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7689186332346484199} + - component: {fileID: 4934815337806418604} + - component: {fileID: 3115384282291981250} + - component: {fileID: 3988503693081324047} + m_Layer: 0 + m_Name: ResetAll + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7689186332346484199 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364804940449778366} + 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: 8251498226431799150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 152.26892, y: -129.16074} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4934815337806418604 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364804940449778366} + m_CullTransparentMesh: 1 +--- !u!114 &3115384282291981250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364804940449778366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + 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: -1083306995931140661, guid: 9d084ac2438d6f9448c61a62639581ba, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3988503693081324047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2364804940449778366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 0.85165936, b: 0.5058824, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3115384282291981250} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3083882772934295339} + m_TargetAssemblyTypeName: UI.PauseMenu, AppleHillsScripts + m_MethodName: DevResetAndReload + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &2741683265562644894 GameObject: m_ObjectHideFlags: 0 @@ -618,6 +832,126 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!1 &4043066030284804420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3190171609966749241} + - component: {fileID: 3944772580628863841} + - component: {fileID: 500835664005007083} + - component: {fileID: 4615815710691098141} + m_Layer: 0 + m_Name: ExitDev + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3190171609966749241 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043066030284804420} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.57} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8251498226431799150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 152.26892, y: -429.16074} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3944772580628863841 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043066030284804420} + m_CullTransparentMesh: 1 +--- !u!114 &500835664005007083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043066030284804420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + 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: -4346244404228752641, guid: 7b5d036a9fa30484e911f4752e3a64c8, 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!114 &4615815710691098141 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043066030284804420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 500835664005007083} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &4393876071688605581 GameObject: m_ObjectHideFlags: 0 @@ -1180,6 +1514,138 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!1 &6345139731443986799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6468639774908699391} + - component: {fileID: 8103997363025124610} + - component: {fileID: 4839534564758666043} + - component: {fileID: 8926505797013142345} + m_Layer: 0 + m_Name: Boosters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6468639774908699391 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345139731443986799} + 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: 8251498226431799150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 452.26892, y: -129.16074} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8103997363025124610 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345139731443986799} + m_CullTransparentMesh: 1 +--- !u!114 &4839534564758666043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345139731443986799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + 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: 4365544765984126881, guid: 9dac643e78ad86e4988c11a92f9c7a6d, 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!114 &8926505797013142345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345139731443986799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4839534564758666043} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3083882772934295339} + m_TargetAssemblyTypeName: UI.PauseMenu, AppleHillsScripts + m_MethodName: DevGiveBoosters + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &6742380579958252912 GameObject: m_ObjectHideFlags: 0 @@ -1296,14 +1762,14 @@ MonoBehaviour: m_PressedTrigger: Pressed m_SelectedTrigger: Selected m_DisabledTrigger: Disabled - m_Interactable: 0 + m_Interactable: 1 m_TargetGraphic: {fileID: 3509344351066108678} m_OnClick: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3083882772934295339} m_TargetAssemblyTypeName: UI.PauseMenu, AppleHillsScripts - m_MethodName: ExitGame + m_MethodName: ShowDevOptions m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} diff --git a/Assets/Scripts/Data/CardSystem/CardSystemManager.cs b/Assets/Scripts/Data/CardSystem/CardSystemManager.cs index 621d4f30..3e775ea5 100644 --- a/Assets/Scripts/Data/CardSystem/CardSystemManager.cs +++ b/Assets/Scripts/Data/CardSystem/CardSystemManager.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using AppleHills.Data.CardSystem; using Core; using Core.Lifecycle; -using Core.SaveLoad; using UnityEngine; namespace Data.CardSystem @@ -703,6 +702,22 @@ namespace Data.CardSystem } } + /// + /// Clears all card collection data - inventory, pending cards, boosters, and placement tracking + /// Used for dev reset functionality + /// + public void ClearAllCollectionData() + { + playerInventory.ClearAllCards(); + playerInventory.BoosterPackCount = 0; + _pendingRevealCards.Clear(); + _placedInAlbumCardIds.Clear(); + + OnBoosterCountChanged?.Invoke(0); + + Logging.Debug("[CardSystemManager] Cleared all collection data (inventory, boosters, pending, placement tracking)"); + } + #region Save/Load Lifecycle Hooks protected override string OnGlobalSaveRequested() diff --git a/Assets/Scripts/UI/PauseMenu.cs b/Assets/Scripts/UI/PauseMenu.cs index a6aef1f3..7ec8c2f1 100644 --- a/Assets/Scripts/UI/PauseMenu.cs +++ b/Assets/Scripts/UI/PauseMenu.cs @@ -1,6 +1,7 @@ using System; using Core; using Core.SaveLoad; +using Data.CardSystem; using UnityEngine; using UnityEngine.SceneManagement; using UI.Core; @@ -21,6 +22,11 @@ namespace UI [SerializeField] private GameObject pauseMenuPanel; [SerializeField] private GameObject pauseButton; [SerializeField] private CanvasGroup canvasGroup; + + [Header("Dev Options")] + [SerializeField] private UnityEngine.UI.Button devOptionsButton; + [SerializeField] private GameObject mainOptionsContainer; + [SerializeField] private GameObject devOptionsContainer; // After UIPageController (50) public override int ManagedAwakePriority => 55; @@ -373,5 +379,91 @@ namespace UI // Just ensure the parent is active. Do not force pause or transitions here. parent.SetActive(true); } + + #region Dev Options + + /// + /// Shows dev options panel and hides main options + /// + public void ShowDevOptions() + { + if (mainOptionsContainer != null) mainOptionsContainer.SetActive(false); + if (devOptionsContainer != null) devOptionsContainer.SetActive(true); + Logging.Debug("[PauseMenu] Showing dev options"); + } + + /// + /// Hides dev options panel and shows main options + /// + public void HideDevOptions() + { + if (devOptionsContainer != null) devOptionsContainer.SetActive(false); + if (mainOptionsContainer != null) mainOptionsContainer.SetActive(true); + Logging.Debug("[PauseMenu] Hiding dev options"); + } + + /// + /// Dev option: Completely wipes all save data and reloads the current level + /// + public async void DevResetAndReload() + { + Logging.Debug("[PauseMenu] Dev Reset: Clearing all save data and reloading level"); + + // Clear the card collection + if (CardSystemManager.Instance != null) + { + CardSystemManager.Instance.ClearAllCollectionData(); + Logging.Debug("[PauseMenu] Cleared card collection"); + } + + // Clear all save data from memory + if (SaveLoadManager.Instance != null && SaveLoadManager.Instance.currentSaveData != null) + { + SaveLoadManager.Instance.currentSaveData.participantStates.Clear(); + SaveLoadManager.Instance.currentSaveData.unlockedMinigames.Clear(); + Logging.Debug("[PauseMenu] Cleared all save data from memory"); + } + + // Delete the save file + string saveFolder = System.IO.Path.Combine(Application.persistentDataPath, "GameSaves"); + if (System.IO.Directory.Exists(saveFolder)) + { + try + { + string[] files = System.IO.Directory.GetFiles(saveFolder); + foreach (string file in files) + { + System.IO.File.Delete(file); + Logging.Debug($"[PauseMenu] Deleted save file: {file}"); + } + } + catch (Exception ex) + { + Logging.Warning($"[PauseMenu] Failed to delete some save files: {ex.Message}"); + } + } + + // Now reload the current scene - skipSave=true prevents re-saving the cleared data + var progress = new Progress(p => Logging.Debug($"Loading progress: {p * 100:F0}%")); + await SceneManagerService.Instance.ReloadCurrentScene(progress, autoHideLoadingScreen: true, skipSave: true); + } + + /// + /// Dev option: Gives the player 3 booster packs + /// + public void DevGiveBoosters() + { + if (CardSystemManager.Instance != null) + { + CardSystemManager.Instance.AddBoosterPack(3); + Logging.Debug("[PauseMenu] Dev: Granted 3 booster packs"); + } + else + { + Logging.Warning("[PauseMenu] Dev: CardSystemManager not available"); + } + } + + #endregion } }