From f2173d2c735354699a33fbb39b86927c35504173 Mon Sep 17 00:00:00 2001 From: Konstantin Dyachenko Date: Sat, 28 Mar 2026 12:53:34 +0700 Subject: [PATCH] [Add] Game Loop Playable --- Assets/Data/Run.meta | 8 + Assets/Data/Run/RunBalanceConfig.asset | 23 + Assets/Data/Run/RunBalanceConfig.asset.meta | 8 + .../Prefab/UI/Category/Score Card View.prefab | 2 +- Assets/Prefab/UI/Dice/Dice Panel View.prefab | 4 +- .../Prefab/UI/Game Info/Game Info View.prefab | 897 +++++++++++++++++- Assets/Scenes/Scene.unity | 194 +++- Assets/Scripts/Game/GameLoopController.cs | 32 +- .../Editor/ModifierInventoryDebugWindow.cs | 2 +- .../Modifiers/Pipeline/ModifierPipeline.cs | 2 +- Assets/Scripts/Run/RunLoopService.cs | 107 ++- Assets/Scripts/Run/RunState.cs | 4 + Assets/Scripts/Shop/ShopController.cs | 10 + Assets/Scripts/Shop/ShopView.cs | 10 +- .../Tests/Editor/RunLoopServiceTests.cs | 97 +- Assets/Scripts/UI/DicePanelView.cs | 6 + Assets/Scripts/UI/GameInfoView.cs | 87 +- .../UI/Presentation/DicePanelPresenter.cs | 4 +- .../UI/Presentation/GameFlowPresenter.cs | 53 +- .../UI/Presentation/GameInfoPresenter.cs | 5 + 20 files changed, 1433 insertions(+), 122 deletions(-) create mode 100644 Assets/Data/Run.meta create mode 100644 Assets/Data/Run/RunBalanceConfig.asset create mode 100644 Assets/Data/Run/RunBalanceConfig.asset.meta diff --git a/Assets/Data/Run.meta b/Assets/Data/Run.meta new file mode 100644 index 0000000..e46bb4b --- /dev/null +++ b/Assets/Data/Run.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ba2d461ab345d24bb0ddf5375b9ca51 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Run/RunBalanceConfig.asset b/Assets/Data/Run/RunBalanceConfig.asset new file mode 100644 index 0000000..65658c3 --- /dev/null +++ b/Assets/Data/Run/RunBalanceConfig.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5917f01e056f9c24988a1e0e726becc0, type: 3} + m_Name: RunBalanceConfig + m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.Run.RunBalanceConfigSO + startingBaseQuota: 18 + quotaGrowthPerCycle: 6 + stageTargetMultipliers: + - 1 + - 1.33 + - 1.75 + stageClearReward: 25 + cycleStoredRollBonusMultiplier: 10 + baseRollsPerStage: 3 diff --git a/Assets/Data/Run/RunBalanceConfig.asset.meta b/Assets/Data/Run/RunBalanceConfig.asset.meta new file mode 100644 index 0000000..b40d862 --- /dev/null +++ b/Assets/Data/Run/RunBalanceConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c5bc498b7678f74aa0e3e06434936e8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefab/UI/Category/Score Card View.prefab b/Assets/Prefab/UI/Category/Score Card View.prefab index f58ae09..366bdd3 100644 --- a/Assets/Prefab/UI/Category/Score Card View.prefab +++ b/Assets/Prefab/UI/Category/Score Card View.prefab @@ -1710,7 +1710,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_text - value: 1234 + value: Total Score Text objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_fontSize diff --git a/Assets/Prefab/UI/Dice/Dice Panel View.prefab b/Assets/Prefab/UI/Dice/Dice Panel View.prefab index f326b56..ed5e878 100644 --- a/Assets/Prefab/UI/Dice/Dice Panel View.prefab +++ b/Assets/Prefab/UI/Dice/Dice Panel View.prefab @@ -105,8 +105,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -597.0664, y: 0} - m_SizeDelta: {x: 120, y: 120} + m_AnchoredPosition: {x: -653, y: 0} + m_SizeDelta: {x: 220, y: 120} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2533106893686760601 CanvasRenderer: diff --git a/Assets/Prefab/UI/Game Info/Game Info View.prefab b/Assets/Prefab/UI/Game Info/Game Info View.prefab index eaaecb9..ba29232 100644 --- a/Assets/Prefab/UI/Game Info/Game Info View.prefab +++ b/Assets/Prefab/UI/Game Info/Game Info View.prefab @@ -30,16 +30,13 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1584173944617684199} - - {fileID: 2598258165833597008} - - {fileID: 6522987983137354928} - - {fileID: 2702683161231592557} + - {fileID: 8005882534472284770} m_Father: {fileID: 4736777721839866001} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 216.39, y: 0} - m_SizeDelta: {x: 632.78, y: 65} + m_AnchoredPosition: {x: 137, y: -21} + m_SizeDelta: {x: 616, y: 112} m_Pivot: {x: 0.5, y: 1} --- !u!222 &1522461280500938953 CanvasRenderer: @@ -79,6 +76,74 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2249597884087322520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8005882534472284770} + - component: {fileID: 6326362054929282231} + m_Layer: 5 + m_Name: Grid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8005882534472284770 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249597884087322520} + 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: 1584173944617684199} + - {fileID: 2598258165833597008} + - {fileID: 5336381240030531919} + - {fileID: 8890823772492865494} + - {fileID: 6914999108258352753} + - {fileID: 2474911662515804829} + - {fileID: 5290978124849395756} + - {fileID: 751564641204286872} + m_Father: {fileID: 5548169193612364454} + 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!114 &6326362054929282231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249597884087322520} + 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: 150, y: 50} + m_Spacing: {x: 0, y: 0} + m_Constraint: 0 + m_ConstraintCount: 2 --- !u!1 &2259539080145827372 GameObject: m_ObjectHideFlags: 0 @@ -105,19 +170,19 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2259539080145827372} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 7150581908722352719} - m_Father: {fileID: 5548169193612364454} + m_Father: {fileID: 751564641204286872} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -0.000015258789, y: 0} m_SizeDelta: {x: 100, y: 22.5} - m_Pivot: {x: 1, y: 0} + m_Pivot: {x: 0.5, y: 0} --- !u!222 &4740830140324922598 CanvasRenderer: m_ObjectHideFlags: 0 @@ -226,19 +291,19 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2983352794700302219} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 2665693838735808836} - m_Father: {fileID: 5548169193612364454} + m_Father: {fileID: 751564641204286872} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -0.000015258789, y: 0} m_SizeDelta: {x: 100, y: 22.5} - m_Pivot: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} --- !u!222 &3967456426286472812 CanvasRenderer: m_ObjectHideFlags: 0 @@ -321,6 +386,43 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!1 &5052072374921414073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 751564641204286872} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &751564641204286872 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5052072374921414073} + 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: 6522987983137354928} + - {fileID: 2702683161231592557} + m_Father: {fileID: 8005882534472284770} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &5166492354953205888 GameObject: m_ObjectHideFlags: 0 @@ -493,6 +595,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.UI.GameInfoView turnText: {fileID: 2160884260510689290} + phaseText: {fileID: 8357973608809232661} + betText: {fileID: 8357973608809232661} + stageText: {fileID: 4796707289148225420} + targetText: {fileID: 7351244364864824875} + quotaText: {fileID: 1993821173959635655} + storedRollsText: {fileID: 8115075664488386678} currencyText: {fileID: 3174970732356576445} shopButton: {fileID: 3479286380747720412} inventoryButton: {fileID: 2538249530350134154} @@ -712,7 +820,7 @@ PrefabInstance: serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 5548169193612364454} + m_TransformParent: {fileID: 8005882534472284770} m_Modifications: - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_Pivot.x @@ -728,7 +836,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMin.x @@ -736,15 +844,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_SizeDelta.x - value: 75 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_SizeDelta.y - value: 40 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalPosition.x @@ -764,23 +872,23 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchoredPosition.x - value: 37.158817 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchoredPosition.y - value: -20 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -796,7 +904,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_text - value: 41123 + value: Currency Text objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_fontSize @@ -851,6 +959,147 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI +--- !u!1001 &3142215969555641154 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8005882534472284770} + m_Modifications: + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_text + value: Quota Text + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSize + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSizeBase + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor32.rgba + value: 4278190080 + objectReference: {fileID: 0} + - target: {fileID: 5645542518666077773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Name + value: Quota Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0829148555ff32841afde9f6193a0b72, type: 3} +--- !u!114 &1993821173959635655 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 3142215969555641154} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI +--- !u!224 &2474911662515804829 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 3142215969555641154} + m_PrefabAsset: {fileID: 0} --- !u!1001 &3259957013280338075 PrefabInstance: m_ObjectHideFlags: 0 @@ -991,7 +1240,7 @@ PrefabInstance: serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 5548169193612364454} + m_TransformParent: {fileID: 8005882534472284770} m_Modifications: - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_Pivot.x @@ -1003,27 +1252,27 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMax.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMin.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_SizeDelta.x - value: 532.61 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_SizeDelta.y - value: 40 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalPosition.x @@ -1043,23 +1292,23 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchoredPosition.x - value: -266.48 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_AnchoredPosition.y - value: -20 + value: 0 objectReference: {fileID: 0} - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -1075,7 +1324,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_text - value: 123 + value: Turn Text objectReference: {fileID: 0} - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} propertyPath: m_fontSize @@ -1126,6 +1375,429 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} m_PrefabInstance: {fileID: 3300326833057212815} m_PrefabAsset: {fileID: 0} +--- !u!1001 &4660829101611225587 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8005882534472284770} + m_Modifications: + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_text + value: Stored Roll Text + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSize + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSizeBase + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor32.rgba + value: 4278190080 + objectReference: {fileID: 0} + - target: {fileID: 5645542518666077773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Name + value: Stored Roll Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0829148555ff32841afde9f6193a0b72, type: 3} +--- !u!224 &5290978124849395756 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 4660829101611225587} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8115075664488386678 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 4660829101611225587} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI +--- !u!1001 &4885668626692159632 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8005882534472284770} + m_Modifications: + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_text + value: Bet Text + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSize + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSizeBase + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor32.rgba + value: 4278190080 + objectReference: {fileID: 0} + - target: {fileID: 5645542518666077773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Name + value: Bet Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0829148555ff32841afde9f6193a0b72, type: 3} +--- !u!224 &5336381240030531919 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 4885668626692159632} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8357973608809232661 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 4885668626692159632} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI +--- !u!1001 &6211801720468826030 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8005882534472284770} + m_Modifications: + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_text + value: Target Text + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSize + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSizeBase + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor32.rgba + value: 4278190080 + objectReference: {fileID: 0} + - target: {fileID: 5645542518666077773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Name + value: Target Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0829148555ff32841afde9f6193a0b72, type: 3} +--- !u!224 &6914999108258352753 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 6211801720468826030} + m_PrefabAsset: {fileID: 0} +--- !u!114 &7351244364864824875 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 6211801720468826030} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI --- !u!1001 &6962202826082240757 PrefabInstance: m_ObjectHideFlags: 0 @@ -1387,3 +2059,144 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} m_PrefabInstance: {fileID: 7707976258900896656} m_PrefabAsset: {fileID: 0} +--- !u!1001 &8259969848954369545 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8005882534472284770} + m_Modifications: + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_text + value: Stage Text + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSize + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontSizeBase + value: 23 + objectReference: {fileID: 0} + - target: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_fontColor32.rgba + value: 4278190080 + objectReference: {fileID: 0} + - target: {fileID: 5645542518666077773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + propertyPath: m_Name + value: Stage Text + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0829148555ff32841afde9f6193a0b72, type: 3} +--- !u!114 &4796707289148225420 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3472307258458128773, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 8259969848954369545} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI +--- !u!224 &8890823772492865494 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 703621256034232799, guid: 0829148555ff32841afde9f6193a0b72, type: 3} + m_PrefabInstance: {fileID: 8259969848954369545} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Scenes/Scene.unity b/Assets/Scenes/Scene.unity index 9175560..7499b92 100644 --- a/Assets/Scenes/Scene.unity +++ b/Assets/Scenes/Scene.unity @@ -156,7 +156,7 @@ MonoBehaviour: categoryCatalog: {fileID: 11400000, guid: 4a72801517dbe4d48a74ea0f2ea9fc23, type: 2} diceCatalog: {fileID: 11400000, guid: 6460bb21b6829cf449eeb36e34749e4d, type: 2} shopCatalog: {fileID: 11400000, guid: 7efc21139c0b2234194047239dcf8a71, type: 2} - runBalanceConfig: {fileID: 0} + runBalanceConfig: {fileID: 11400000, guid: 7c5bc498b7678f74aa0e3e06434936e8, type: 2} scoringSystem: {fileID: 1016044386} currencyBank: {fileID: 389543052} gameLoopController: {fileID: 2136136801} @@ -2032,6 +2032,102 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 356280112} m_Modifications: + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 751564641204286872, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1584173944617684199, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2474911662515804829, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2598258165833597008, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4736777721839866001, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} propertyPath: m_Pivot.x value: 0.5 @@ -2116,6 +2212,102 @@ PrefabInstance: propertyPath: m_Name value: Game Info View objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5290978124849395756, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5336381240030531919, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6914999108258352753, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8890823772492865494, guid: 010ebb8b9becf6b45930c5fb7a5c95e0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/Assets/Scripts/Game/GameLoopController.cs b/Assets/Scripts/Game/GameLoopController.cs index 22daeb8..4e944a4 100644 --- a/Assets/Scripts/Game/GameLoopController.cs +++ b/Assets/Scripts/Game/GameLoopController.cs @@ -23,10 +23,10 @@ namespace YachtDice.Game public int MaxRollsPerTurn => _runLoopService != null ? _runLoopService.State.CurrentStageRollBudget : 0; public RunPhase CurrentPhase => _runLoopService != null ? _runLoopService.State.Phase : RunPhase.None; - public bool CanRoll => _runLoopService != null && _runLoopService.CanRoll() && !_diceManager.IsAnyRolling; + public bool CanRoll => _runLoopService != null && _runLoopService.CanBeginRoll() && !_diceManager.IsAnyRolling; public bool CanScore => _runLoopService != null && CurrentPhase == RunPhase.CategorySelection && !_diceManager.IsAnyRolling; public bool IsGameOver => _runLoopService != null && _runLoopService.State.IsFailed; - public bool IsShopOpen => CurrentPhase == RunPhase.Shop; + public bool IsShopAvailable => _runLoopService != null && _runLoopService.State.IsShopAvailable; public event Action OnTurnStarted; public event Action OnRollComplete; @@ -41,6 +41,7 @@ namespace YachtDice.Game public event Action OnQuotaChanged; public event Action OnCycleCompleted; public event Action OnPhaseChanged; + public event Action OnShopAvailabilityChanged; [Inject] public void Construct(DiceManager diceManager, RunLoopService runLoopService, ScoringSystem scoringSystem) @@ -50,6 +51,7 @@ namespace YachtDice.Game _scoringSystem = scoringSystem; _runLoopService.OnStageStarted += HandleStageStarted; + _runLoopService.OnCategoryRecorded += HandleCategoryRecorded; _runLoopService.OnStageCleared += HandleStageCleared; _runLoopService.OnRunFailed += HandleRunFailed; _runLoopService.OnBetStarted += HandleBetStarted; @@ -59,6 +61,7 @@ namespace YachtDice.Game _runLoopService.OnQuotaChanged += HandleQuotaChanged; _runLoopService.OnCycleCompleted += HandleCycleCompleted; _runLoopService.OnPhaseChanged += HandlePhaseChanged; + _runLoopService.OnShopAvailabilityChanged += HandleShopAvailabilityChanged; } private void OnDestroy() @@ -67,6 +70,7 @@ namespace YachtDice.Game return; _runLoopService.OnStageStarted -= HandleStageStarted; + _runLoopService.OnCategoryRecorded -= HandleCategoryRecorded; _runLoopService.OnStageCleared -= HandleStageCleared; _runLoopService.OnRunFailed -= HandleRunFailed; _runLoopService.OnBetStarted -= HandleBetStarted; @@ -76,6 +80,7 @@ namespace YachtDice.Game _runLoopService.OnQuotaChanged -= HandleQuotaChanged; _runLoopService.OnCycleCompleted -= HandleCycleCompleted; _runLoopService.OnPhaseChanged -= HandlePhaseChanged; + _runLoopService.OnShopAvailabilityChanged -= HandleShopAvailabilityChanged; } public void StartNewGame() @@ -86,23 +91,21 @@ namespace YachtDice.Game public void CompleteShop() { - if (!IsShopOpen) - return; - _runLoopService.CompleteShop(); OnShopClosed?.Invoke(); } - public void Roll() + public bool Roll() { if (!CanRoll) - return; + return false; if (!_runLoopService.TryBeginRoll()) - return; + return false; _diceManager.OnAllDiceSettled += HandleAllDiceSettled; _diceManager.RollUnlocked(); + return true; } private void HandleAllDiceSettled() @@ -139,7 +142,7 @@ namespace YachtDice.Game public bool CanOpenShopManually() { - return IsShopOpen; + return IsShopAvailable && !IsGameOver; } private void HandleStageStarted(RunStageState stage) @@ -148,10 +151,14 @@ namespace YachtDice.Game OnTurnStarted?.Invoke(stage.Index + 1); } + private void HandleCategoryRecorded(CategoryDefinition category, ScoreResult result) + { + OnScored?.Invoke(category, result.FinalScore); + } + private void HandleStageCleared(RunStageState stage, CategoryDefinition category, ScoreResult result) { _diceManager.UnlockAll(); - OnScored?.Invoke(category, result.FinalScore); } private void HandleRunFailed(RunState state) @@ -193,5 +200,10 @@ namespace YachtDice.Game { OnPhaseChanged?.Invoke(phase); } + + private void HandleShopAvailabilityChanged(bool isAvailable) + { + OnShopAvailabilityChanged?.Invoke(isAvailable); + } } } diff --git a/Assets/Scripts/Modifiers/Editor/ModifierInventoryDebugWindow.cs b/Assets/Scripts/Modifiers/Editor/ModifierInventoryDebugWindow.cs index 816063e..4e3c191 100644 --- a/Assets/Scripts/Modifiers/Editor/ModifierInventoryDebugWindow.cs +++ b/Assets/Scripts/Modifiers/Editor/ModifierInventoryDebugWindow.cs @@ -271,7 +271,7 @@ namespace YachtDice.Modifiers.Editor return; } - _inventoryController = FindObjectOfType(); + _inventoryController = FindAnyObjectByType(); } private void RefreshDefinitions() diff --git a/Assets/Scripts/Modifiers/Pipeline/ModifierPipeline.cs b/Assets/Scripts/Modifiers/Pipeline/ModifierPipeline.cs index 61267c8..fe37597 100644 --- a/Assets/Scripts/Modifiers/Pipeline/ModifierPipeline.cs +++ b/Assets/Scripts/Modifiers/Pipeline/ModifierPipeline.cs @@ -122,7 +122,7 @@ namespace YachtDice.Modifiers.Pipeline { string traceStr = trace.ToString(); context.DebugLog.Add(traceStr); - Debug.Log(traceStr); + // Debug.Log(traceStr); } _isExecuting = false; diff --git a/Assets/Scripts/Run/RunLoopService.cs b/Assets/Scripts/Run/RunLoopService.cs index c0b4b8f..74b3070 100644 --- a/Assets/Scripts/Run/RunLoopService.cs +++ b/Assets/Scripts/Run/RunLoopService.cs @@ -41,6 +41,7 @@ namespace YachtDice.Run public event Action OnBetStarted; public event Action OnShopOpened; public event Action OnStageStarted; + public event Action OnCategoryRecorded; public event Action OnStageCleared; public event Action OnStageFailed; public event Action OnStoredRollsChanged; @@ -49,22 +50,29 @@ namespace YachtDice.Run public event Action OnQuotaChanged; public event Action OnRunFailed; public event Action OnPhaseChanged; + public event Action OnShopAvailabilityChanged; public event Action OnCategoriesRefreshed; public void StartNewRun() { _scoringSystem.ResetScorecard(); _storedRollBank.Reset(); + if (_currencyBank != null) + _currencyBank.SetBalance(0); _state.BaseQuota = _config.StartingBaseQuota; _state.BetIndex = 0; _state.StageIndex = 0; + _state.CurrentStageGoal = _config.GetStageTarget(_state.BaseQuota, 0); _state.CurrentRoll = 0; _state.CurrentStageRollBudget = _config.BaseRollsPerStage; - _state.CurrentStageTarget = _config.GetStageTarget(_state.BaseQuota, 0); + _state.CurrentStageTarget = _state.CurrentStageGoal; _state.StoredRolls = _storedRollBank.Value; _state.IsActive = true; _state.IsFailed = false; + _state.IsShopUnlocked = false; + _state.IsShopAvailable = false; + _state.HasRolledThisStage = false; SetPhase(RunPhase.None); OnRunStarted?.Invoke(_state); @@ -73,10 +81,8 @@ namespace YachtDice.Run public void CompleteShop() { - if (_state.Phase != RunPhase.Shop || !_state.IsActive) + if (!_state.IsActive) return; - - StartStage(0); } public bool CanRoll() @@ -89,9 +95,14 @@ namespace YachtDice.Run || _state.Phase == RunPhase.Rolling; } + public bool CanBeginRoll() + { + return CanRoll() && HasRemainingRollCapacity(); + } + public bool TryBeginRoll() { - if (!CanRoll()) + if (!CanBeginRoll()) return false; if (_state.CurrentRoll >= _state.CurrentStageRollBudget) @@ -103,6 +114,13 @@ namespace YachtDice.Run _state.StoredRolls = _storedRollBank.Value; } + if (!_state.HasRolledThisStage) + { + _state.HasRolledThisStage = true; + if (_state.IsShopAvailable) + SetShopAvailable(false); + } + _state.CurrentRoll += 1; SetPhase(RunPhase.Rolling); return true; @@ -130,8 +148,7 @@ namespace YachtDice.Run if (_state.CurrentRoll <= 0) return false; - var preview = PreviewScore(dice, category); - return preview.FinalScore >= _state.CurrentStageTarget; + return true; } public ScoreResult PreviewScore(IReadOnlyList dice, CategoryDefinition category) @@ -182,19 +199,36 @@ namespace YachtDice.Run if (remainingRolls > 0) _storedRollBank.Add(remainingRolls); - if (_config.StageClearReward > 0 && _currencyBank != null) - _currencyBank.Add(_config.StageClearReward); + _state.CurrentStageTarget = Math.Max(0, _state.CurrentStageTarget - result.FinalScore); + OnCategoryRecorded?.Invoke(category, result); - SetPhase(RunPhase.StageResolved); - OnStageCleared?.Invoke(clearedStage, category, result); - - if (_state.StageIndex >= _config.StageCount - 1) + if (_state.CurrentStageTarget <= 0) { - ResolveBet(); + if (_config.StageClearReward > 0 && _currencyBank != null) + _currencyBank.Add(_config.StageClearReward); + + if (!_state.IsShopUnlocked) + _state.IsShopUnlocked = true; + + SetPhase(RunPhase.StageResolved); + OnStageCleared?.Invoke(clearedStage, category, result); + + if (_state.StageIndex >= _config.StageCount - 1) + { + ResolveBet(); + } + else + { + StartStage(_state.StageIndex + 1); + } + } + else if (HasAnyAvailableCategory()) + { + StartStageAttempt(); } else { - StartStage(_state.StageIndex + 1); + FailCurrentStage(); } return true; @@ -220,22 +254,30 @@ namespace YachtDice.Run _state.StageIndex = 0; _state.CurrentRoll = 0; _state.CurrentStageRollBudget = _config.BaseRollsPerStage; - _state.CurrentStageTarget = _config.GetStageTarget(_state.BaseQuota, 0); + _state.CurrentStageGoal = _config.GetStageTarget(_state.BaseQuota, 0); + _state.CurrentStageTarget = _state.CurrentStageGoal; SetPhase(RunPhase.StartBet); OnCategoriesRefreshed?.Invoke(); OnBetStarted?.Invoke(_state); - - SetPhase(RunPhase.Shop); - OnShopOpened?.Invoke(_state); + StartStage(0); } private void StartStage(int stageIndex) { _state.StageIndex = stageIndex; + _state.CurrentStageGoal = _config.GetStageTarget(_state.BaseQuota, stageIndex); + _state.CurrentStageTarget = _state.CurrentStageGoal; + StartStageAttempt(_state.IsShopUnlocked); + } + + private void StartStageAttempt(bool allowShopAtStart = false) + { _state.CurrentRoll = 0; _state.CurrentStageRollBudget = _config.BaseRollsPerStage; - _state.CurrentStageTarget = _config.GetStageTarget(_state.BaseQuota, stageIndex); + _state.HasRolledThisStage = false; + + SetShopAvailable(allowShopAtStart); SetPhase(RunPhase.StageStart); OnStageStarted?.Invoke(GetCurrentStageState()); @@ -279,6 +321,15 @@ namespace YachtDice.Run OnPhaseChanged?.Invoke(phase); } + private void SetShopAvailable(bool isAvailable) + { + _state.IsShopAvailable = isAvailable; + OnShopAvailabilityChanged?.Invoke(isAvailable); + + if (isAvailable) + OnShopOpened?.Invoke(_state); + } + private void HandleStoredRollsChanged(int value) { _state.StoredRolls = value; @@ -289,5 +340,21 @@ namespace YachtDice.Run { OnCurrencyChanged?.Invoke(value); } + + private bool HasAnyAvailableCategory() + { + var catalog = _scoringSystem.Catalog; + if (catalog == null) + return false; + + var categories = catalog.All; + for (var i = 0; i < categories.Count; i++) + { + if (!_scoringSystem.IsCategoryUsed(categories[i])) + return true; + } + + return false; + } } } diff --git a/Assets/Scripts/Run/RunState.cs b/Assets/Scripts/Run/RunState.cs index d9cc862..40884da 100644 --- a/Assets/Scripts/Run/RunState.cs +++ b/Assets/Scripts/Run/RunState.cs @@ -8,12 +8,16 @@ namespace YachtDice.Run public int BaseQuota; public int BetIndex; public int StageIndex; + public int CurrentStageGoal; public int CurrentStageTarget; public int CurrentRoll; public int CurrentStageRollBudget; public int StoredRolls; public bool IsActive; public bool IsFailed; + public bool IsShopUnlocked; + public bool IsShopAvailable; + public bool HasRolledThisStage; public RunPhase Phase; public int StageNumber => StageIndex + 1; diff --git a/Assets/Scripts/Shop/ShopController.cs b/Assets/Scripts/Shop/ShopController.cs index ffd9d0b..16b85c1 100644 --- a/Assets/Scripts/Shop/ShopController.cs +++ b/Assets/Scripts/Shop/ShopController.cs @@ -13,6 +13,7 @@ namespace YachtDice.Shop private ShopModel _model; public ShopCatalog Catalog => _catalog; + public event System.Action OnCloseRequested; [Inject] public void Construct(ShopCatalog catalog, CurrencyBank currencyBank, ShopModel model) @@ -25,6 +26,7 @@ namespace YachtDice.Shop private void Start() { shopView.OnBuyClicked += HandleBuyClicked; + shopView.OnCloseRequested += HandleCloseRequested; _currencyBank.OnBalanceChanged += HandleCurrencyChanged; _model.OnItemPurchased += HandleItemPurchased; @@ -35,7 +37,10 @@ namespace YachtDice.Shop private void OnDestroy() { if (shopView != null) + { shopView.OnBuyClicked -= HandleBuyClicked; + shopView.OnCloseRequested -= HandleCloseRequested; + } if (_currencyBank != null) _currencyBank.OnBalanceChanged -= HandleCurrencyChanged; @@ -83,5 +88,10 @@ namespace YachtDice.Shop { shopView.RefreshStates(_catalog.All, _model); } + + private void HandleCloseRequested() + { + OnCloseRequested?.Invoke(); + } } } diff --git a/Assets/Scripts/Shop/ShopView.cs b/Assets/Scripts/Shop/ShopView.cs index efa1abf..e8da87c 100644 --- a/Assets/Scripts/Shop/ShopView.cs +++ b/Assets/Scripts/Shop/ShopView.cs @@ -17,17 +17,18 @@ namespace YachtDice.Shop private readonly List _spawnedItems = new(); public event Action OnBuyClicked; + public event Action OnCloseRequested; private void Awake() { if (closeButton != null) - closeButton.onClick.AddListener(Hide); + closeButton.onClick.AddListener(HandleCloseClicked); } private void OnDestroy() { if (closeButton != null) - closeButton.onClick.RemoveListener(Hide); + closeButton.onClick.RemoveListener(HandleCloseClicked); } public void Show() => gameObject.SetActive(true); @@ -92,5 +93,10 @@ namespace YachtDice.Shop if (tooltipView != null) tooltipView.Hide(); } + + private void HandleCloseClicked() + { + OnCloseRequested?.Invoke(); + } } } diff --git a/Assets/Scripts/Tests/Editor/RunLoopServiceTests.cs b/Assets/Scripts/Tests/Editor/RunLoopServiceTests.cs index d88d784..2aef0e3 100644 --- a/Assets/Scripts/Tests/Editor/RunLoopServiceTests.cs +++ b/Assets/Scripts/Tests/Editor/RunLoopServiceTests.cs @@ -53,7 +53,7 @@ namespace YachtDice.Tests } [Test] - public void StartNewRun_EntersShopWithConfigQuota() + public void StartNewRun_StartsFirstStageWithoutShop() { var categories = CreateFixedCatalog(100, 100, 100); var service = CreateService(categories); @@ -62,8 +62,10 @@ namespace YachtDice.Tests Assert.AreEqual(30, service.State.BaseQuota); Assert.AreEqual(1, service.State.BetIndex); - Assert.AreEqual(RunPhase.Shop, service.State.Phase); + Assert.AreEqual(RunPhase.StageStart, service.State.Phase); Assert.AreEqual(0, service.State.StoredRolls); + Assert.AreEqual(0, _currencyBank.Balance); + Assert.IsFalse(service.State.IsShopAvailable); } [Test] @@ -73,7 +75,6 @@ namespace YachtDice.Tests var service = CreateService(categories); service.StartNewRun(); - service.CompleteShop(); service.TryBeginRoll(); service.NotifyRollResolved(_emptyDice); @@ -84,6 +85,41 @@ namespace YachtDice.Tests Assert.AreEqual(2, service.State.StoredRolls); Assert.AreEqual(2, service.State.StageNumber); Assert.AreEqual(RunPhase.StageStart, service.State.Phase); + Assert.IsTrue(service.State.IsShopAvailable); + } + + [Test] + public void CategoryCanBeScored_WithZeroResultAfterFirstRoll() + { + var categories = CreateFixedCatalog(0, 100, 100); + var service = CreateService(categories); + + service.StartNewRun(); + service.TryBeginRoll(); + service.NotifyRollResolved(_emptyDice); + + Assert.IsTrue(service.CanScoreCategory(_emptyDice, categories.All[0])); + Assert.IsTrue(service.TryScoreCategoryAsync(_emptyDice, categories.All[0]).GetAwaiter().GetResult()); + Assert.AreEqual(30, service.State.CurrentStageTarget); + Assert.AreEqual(1, service.State.StageNumber); + Assert.AreEqual(RunPhase.StageStart, service.State.Phase); + } + + [Test] + public void TargetDecreasesByRecordedScore_AndStageContinues() + { + var categories = CreateFixedCatalog(5, 100, 100); + var service = CreateService(categories); + + service.StartNewRun(); + service.TryBeginRoll(); + service.NotifyRollResolved(_emptyDice); + + Assert.IsTrue(service.TryScoreCategoryAsync(_emptyDice, categories.All[0]).GetAwaiter().GetResult()); + + Assert.AreEqual(25, service.State.CurrentStageTarget); + Assert.AreEqual(1, service.State.StageNumber); + Assert.AreEqual(RunPhase.StageStart, service.State.Phase); } [Test] @@ -93,7 +129,6 @@ namespace YachtDice.Tests var service = CreateService(categories); service.StartNewRun(); - service.CompleteShop(); service.TryBeginRoll(); service.NotifyRollResolved(_emptyDice); service.TryScoreCategoryAsync(_emptyDice, categories.All[0]).GetAwaiter().GetResult(); @@ -117,8 +152,6 @@ namespace YachtDice.Tests var service = CreateService(categories); service.StartNewRun(); - service.CompleteShop(); - ClearStageInOneRoll(service, categories.All[0]); ClearStageInOneRoll(service, categories.All[1]); ClearStageInOneRoll(service, categories.All[2]); @@ -126,9 +159,10 @@ namespace YachtDice.Tests Assert.AreEqual(135, _currencyBank.Balance); Assert.AreEqual(60, service.State.BaseQuota); Assert.AreEqual(2, service.State.BetIndex); - Assert.AreEqual(RunPhase.Shop, service.State.Phase); + Assert.AreEqual(RunPhase.StageStart, service.State.Phase); Assert.AreEqual(6, service.State.StoredRolls); Assert.AreEqual(0, _scoringSystem.CategoriesFilledCount); + Assert.IsTrue(service.State.IsShopAvailable); } [Test] @@ -138,37 +172,56 @@ namespace YachtDice.Tests var service = CreateService(categories); service.StartNewRun(); - service.CompleteShop(); + Assert.IsTrue(service.TryBeginRoll()); + service.NotifyRollResolved(_emptyDice); - for (var i = 0; i < 3; i++) - { - Assert.IsTrue(service.TryBeginRoll()); - service.NotifyRollResolved(_emptyDice); - } - - Assert.IsTrue(service.State.IsFailed); - Assert.AreEqual(RunPhase.RunFailed, service.State.Phase); + Assert.IsFalse(service.State.IsFailed); + Assert.AreEqual(RunPhase.CategorySelection, service.State.Phase); } [Test] - public void Shop_ReopensOnlyAtStartOfNextBet() + public void ShopUnlocksAfterFirstClear_AndClosesAfterFirstRoll() { var categories = CreateFixedCatalog(100, 100, 100, 100); var service = CreateService(categories); service.StartNewRun(); - Assert.AreEqual(RunPhase.Shop, service.State.Phase); + Assert.IsFalse(service.State.IsShopAvailable); - service.CompleteShop(); ClearStageInOneRoll(service, categories.All[0]); + Assert.IsTrue(service.State.IsShopAvailable); Assert.AreEqual(RunPhase.StageStart, service.State.Phase); - ClearStageInOneRoll(service, categories.All[1]); - Assert.AreEqual(RunPhase.StageStart, service.State.Phase); + Assert.IsTrue(service.TryBeginRoll()); + Assert.IsFalse(service.State.IsShopAvailable); + service.NotifyRollResolved(_emptyDice); + Assert.IsTrue(service.TryScoreCategoryAsync(_emptyDice, categories.All[1]).GetAwaiter().GetResult()); + + Assert.IsTrue(service.State.IsShopAvailable); ClearStageInOneRoll(service, categories.All[2]); - Assert.AreEqual(RunPhase.Shop, service.State.Phase); + Assert.AreEqual(RunPhase.StageStart, service.State.Phase); Assert.AreEqual(2, service.State.BetIndex); + Assert.IsTrue(service.State.IsShopAvailable); + } + + [Test] + public void CanBeginRoll_BecomesFalse_WhenNoRollsOrStoredRollsRemain() + { + var categories = CreateFixedCatalog(100, 100, 100, 100); + var service = CreateService(categories); + + service.StartNewRun(); + + Assert.IsTrue(service.TryBeginRoll()); + service.NotifyRollResolved(_emptyDice); + Assert.IsTrue(service.TryBeginRoll()); + service.NotifyRollResolved(_emptyDice); + Assert.IsTrue(service.TryBeginRoll()); + service.NotifyRollResolved(_emptyDice); + + Assert.IsFalse(service.CanBeginRoll()); + Assert.AreEqual(RunPhase.CategorySelection, service.State.Phase); } private RunLoopService CreateService(CategoryCatalog catalog) diff --git a/Assets/Scripts/UI/DicePanelView.cs b/Assets/Scripts/UI/DicePanelView.cs index f2d7c76..cfb991a 100644 --- a/Assets/Scripts/UI/DicePanelView.cs +++ b/Assets/Scripts/UI/DicePanelView.cs @@ -82,6 +82,12 @@ namespace YachtDice.UI rollButtonText.text = $"Бросок {currentRoll + 1}/{maxRolls}"; } + public void SetRollButtonPending() + { + rollButton.interactable = false; + rollButtonText.text = "Бросок..."; + } + public void SetRollButtonInteractable(bool interactable) { rollButton.interactable = interactable; diff --git a/Assets/Scripts/UI/GameInfoView.cs b/Assets/Scripts/UI/GameInfoView.cs index a5d6283..c6a5dcf 100644 --- a/Assets/Scripts/UI/GameInfoView.cs +++ b/Assets/Scripts/UI/GameInfoView.cs @@ -7,8 +7,14 @@ namespace YachtDice.UI { public class GameInfoView : MonoBehaviour { - [Header("Turn Info")] + [Header("Run HUD")] [SerializeField] private TMP_Text turnText; + [SerializeField] private TMP_Text phaseText; + [SerializeField] private TMP_Text betText; + [SerializeField] private TMP_Text stageText; + [SerializeField] private TMP_Text targetText; + [SerializeField] private TMP_Text quotaText; + [SerializeField] private TMP_Text storedRollsText; [Header("Currency")] [SerializeField] private TMP_Text currencyText; @@ -28,6 +34,9 @@ namespace YachtDice.UI private void Awake() { + EnsureHudBindings(); + EnsureGameOverBindings(); + newGameButton.onClick.AddListener(() => OnNewGameClicked?.Invoke()); gameOverPanel.SetActive(false); @@ -43,9 +52,27 @@ namespace YachtDice.UI } public void SetRunInfoText(string text) + { + if (phaseText != null) + phaseText.text = text; + } + + public void SetRunHud(string phase, int bet, int stage, int stageCount, int target, int quota, int storedRolls) { if (turnText != null) - turnText.text = text; + turnText.text = $"Turn {stage}/{stageCount}"; + if (phaseText != null) + phaseText.text = $"Phase: {phase}"; + if (betText != null) + betText.text = $"Bet: {bet}"; + if (stageText != null) + stageText.text = $"Stage: {stage}/{stageCount}"; + if (targetText != null) + targetText.text = $"Target: {target}"; + if (quotaText != null) + quotaText.text = $"Quota: {quota}"; + if (storedRollsText != null) + storedRollsText.text = $"Stored Rolls: {storedRolls}"; } public void SetCurrencyText(int amount) @@ -80,5 +107,61 @@ namespace YachtDice.UI if (inventoryButton != null) inventoryButton.onClick.RemoveAllListeners(); } + + private void EnsureHudBindings() + { + if (turnText == null) + return; + + phaseText ??= turnText; + betText ??= CreateHudLabel("Bet Text", -34); + stageText ??= CreateHudLabel("Stage Text", -68); + targetText ??= CreateHudLabel("Target Text", -102); + quotaText ??= CreateHudLabel("Quota Text", -136); + storedRollsText ??= CreateHudLabel("Stored Rolls Text", -170); + } + + private void EnsureGameOverBindings() + { + if (gameOverPanel == null) + return; + + if (finalScoreText == null || finalScoreText == currencyText) + { + TMP_Text source = turnText != null ? turnText : currencyText; + if (source == null) + return; + + finalScoreText = Instantiate(source, gameOverPanel.transform); + finalScoreText.name = "Final Score Text"; + + if (finalScoreText.transform is RectTransform rect) + { + rect.anchorMin = new Vector2(0.5f, 0.5f); + rect.anchorMax = new Vector2(0.5f, 0.5f); + rect.pivot = new Vector2(0.5f, 0.5f); + rect.anchoredPosition = new Vector2(0f, 40f); + rect.sizeDelta = new Vector2(360f, 60f); + } + } + } + + private TMP_Text CreateHudLabel(string objectName, float yOffset) + { + var clone = Instantiate(turnText, turnText.transform.parent); + clone.name = objectName; + clone.text = string.Empty; + + if (clone.transform is RectTransform rect && turnText.transform is RectTransform sourceRect) + { + rect.anchorMin = sourceRect.anchorMin; + rect.anchorMax = sourceRect.anchorMax; + rect.pivot = sourceRect.pivot; + rect.sizeDelta = sourceRect.sizeDelta; + rect.anchoredPosition = sourceRect.anchoredPosition + new Vector2(0f, yOffset); + } + + return clone; + } } } diff --git a/Assets/Scripts/UI/Presentation/DicePanelPresenter.cs b/Assets/Scripts/UI/Presentation/DicePanelPresenter.cs index 4ba147d..1b1f31b 100644 --- a/Assets/Scripts/UI/Presentation/DicePanelPresenter.cs +++ b/Assets/Scripts/UI/Presentation/DicePanelPresenter.cs @@ -41,7 +41,7 @@ namespace YachtDice.UI.Presentation public void PrepareForRoll() { - _view.SetRollButtonState(false, _gameLoopController.CurrentRoll, _gameLoopController.MaxRollsPerTurn); + _view.SetRollButtonPending(); _view.SetDiceInteractable(false); } @@ -49,7 +49,7 @@ namespace YachtDice.UI.Presentation { var canRollAgain = _gameLoopController.CanRoll; _view.SetRollButtonState(canRollAgain, rollNumber, _gameLoopController.MaxRollsPerTurn); - _view.SetDiceInteractable(true); + _view.SetDiceInteractable(canRollAgain); _view.SetAllDiceValues(_diceManager.GetCurrentValues()); } diff --git a/Assets/Scripts/UI/Presentation/GameFlowPresenter.cs b/Assets/Scripts/UI/Presentation/GameFlowPresenter.cs index 5713adc..a738c03 100644 --- a/Assets/Scripts/UI/Presentation/GameFlowPresenter.cs +++ b/Assets/Scripts/UI/Presentation/GameFlowPresenter.cs @@ -65,6 +65,7 @@ namespace YachtDice.UI.Presentation _gameLoopController.OnQuotaChanged += HandleQuotaChanged; _gameLoopController.OnCycleCompleted += HandleCycleCompleted; _gameLoopController.OnPhaseChanged += HandlePhaseChanged; + _gameLoopController.OnShopAvailabilityChanged += HandleShopAvailabilityChanged; _dicePanelPresenter.RollClicked += HandleRollClicked; _dicePanelPresenter.DiceToggled += HandleDiceToggled; @@ -72,13 +73,14 @@ namespace YachtDice.UI.Presentation _gameInfoPresenter.NewGameClicked += HandleNewGameClicked; _gameInfoPresenter.ShopClicked += HandleShopClicked; _gameInfoPresenter.InventoryClicked += HandleInventoryClicked; + _shopController.OnCloseRequested += HandleShopCloseRequested; _currencyBank.OnBalanceChanged += HandleCurrencyChanged; _playerModel.OnChanged += HandlePlayerChangedForSave; _saveService.Load(); _gameInfoPresenter.SetCurrencyText(_currencyBank.Balance); - _gameInfoPresenter.SetShopButtonInteractable(false); + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); _gameLoopController.StartNewGame(); } @@ -95,6 +97,7 @@ namespace YachtDice.UI.Presentation _gameLoopController.OnQuotaChanged -= HandleQuotaChanged; _gameLoopController.OnCycleCompleted -= HandleCycleCompleted; _gameLoopController.OnPhaseChanged -= HandlePhaseChanged; + _gameLoopController.OnShopAvailabilityChanged -= HandleShopAvailabilityChanged; _dicePanelPresenter.RollClicked -= HandleRollClicked; _dicePanelPresenter.DiceToggled -= HandleDiceToggled; @@ -102,6 +105,7 @@ namespace YachtDice.UI.Presentation _gameInfoPresenter.NewGameClicked -= HandleNewGameClicked; _gameInfoPresenter.ShopClicked -= HandleShopClicked; _gameInfoPresenter.InventoryClicked -= HandleInventoryClicked; + _shopController.OnCloseRequested -= HandleShopCloseRequested; _currencyBank.OnBalanceChanged -= HandleCurrencyChanged; @@ -115,12 +119,14 @@ namespace YachtDice.UI.Presentation _dicePanelPresenter.ResetForNewTurn(); _dicePanelPresenter.SetRollingEnabled(true); _scoreCardPresenter.ClearAllPreviews(); + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); } private void HandleRollComplete(int rollNumber) { _dicePanelPresenter.HandleRollComplete(rollNumber); _scoreCardPresenter.UpdatePreviewScores(); + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); } private void HandleScored(CategoryDefinition category, int finalScore) @@ -143,9 +149,11 @@ namespace YachtDice.UI.Presentation private void HandleRollClicked() { + if (!_gameLoopController.Roll()) + return; + _dicePanelPresenter.PrepareForRoll(); _scoreCardPresenter.SetAllInteractable(false); - _gameLoopController.Roll(); } private void HandleDiceToggled(int index) @@ -175,14 +183,9 @@ namespace YachtDice.UI.Presentation return; if (_shopController.IsOpen) - { _shopController.Close(); - _gameLoopController.CompleteShop(); - } else - { _shopController.Open(); - } } private void HandleInventoryClicked() @@ -208,16 +211,14 @@ namespace YachtDice.UI.Presentation private void HandleShopOpened() { - _shopController.Open(); - _gameInfoPresenter.SetShopButtonInteractable(true); - _dicePanelPresenter.SetRollingEnabled(false); + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); UpdateRunInfoText(); } private void HandleShopClosed() { _shopController.Close(); - _gameInfoPresenter.SetShopButtonInteractable(false); + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); UpdateRunInfoText(); } @@ -240,16 +241,36 @@ namespace YachtDice.UI.Presentation private void HandlePhaseChanged(RunPhase phase) { - if (phase != RunPhase.Shop) - _gameInfoPresenter.SetShopButtonInteractable(false); - + _gameInfoPresenter.SetShopButtonInteractable(_gameLoopController.CanOpenShopManually()); UpdateRunInfoText(); } private void UpdateRunInfoText() { - var info = $"Bet {_gameLoopController.CurrentBet} | Stage {_gameLoopController.CurrentStage}/3 | Target {_gameLoopController.CurrentStageTarget} | Quota {_gameLoopController.CurrentBaseQuota} | Bank {_gameLoopController.StoredRolls}"; - _gameInfoPresenter.SetRunInfoText(info); + var phase = _gameLoopController.CurrentPhase.ToString(); + _gameInfoPresenter.SetRunHud( + phase, + _gameLoopController.CurrentBet, + _gameLoopController.CurrentStage, + 3, + _gameLoopController.CurrentStageTarget, + _gameLoopController.CurrentBaseQuota, + _gameLoopController.StoredRolls); + } + + private void HandleShopCloseRequested() + { + _shopController.Close(); + _gameLoopController.CompleteShop(); + } + + private void HandleShopAvailabilityChanged(bool isAvailable) + { + if (!isAvailable && _shopController.IsOpen) + _shopController.Close(); + + _gameInfoPresenter.SetShopButtonInteractable(isAvailable); + UpdateRunInfoText(); } } } diff --git a/Assets/Scripts/UI/Presentation/GameInfoPresenter.cs b/Assets/Scripts/UI/Presentation/GameInfoPresenter.cs index acb4cd5..0994e92 100644 --- a/Assets/Scripts/UI/Presentation/GameInfoPresenter.cs +++ b/Assets/Scripts/UI/Presentation/GameInfoPresenter.cs @@ -39,6 +39,11 @@ namespace YachtDice.UI.Presentation _view.SetRunInfoText(text); } + public void SetRunHud(string phase, int bet, int stage, int stageCount, int target, int quota, int storedRolls) + { + _view.SetRunHud(phase, bet, stage, stageCount, target, quota, storedRolls); + } + public void SetCurrencyText(int amount) { _view.SetCurrencyText(amount);