diff --git a/AGENTS.md b/AGENTS.md index 5a7d1b5..bbe7e52 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -16,6 +16,12 @@ - Перед изменениями читать через `unityMCP` релевантные ресурсы и состояние Unity Editor. После изменений проверять результат через `unityMCP`, включая состояние компиляции, консоль, тесты и снимки экрана, когда это применимо. - Не считать работу с Unity завершённой без проверки через `unityMCP`. Если сервер недоступен, явно сообщить об этом пользователю и не подменять обязательную Unity-проверку неподтверждёнными предположениями. +## DOTween + +- В проекте новые `Tween` и `Sequence` не запускаются автоматически. +- После создания анимации обязательно явно вызывать `PlayForward()` или `Play()`. +- Если метод только собирает и возвращает анимацию, явный запуск обязан выполнить вызывающий код. + ## Память и контекст проекта - В любой задаче без исключений обязательно использовать MCP-сервер `agentmemory` для получения и сохранения контекста проекта. diff --git a/Assets/Prefabs/Balance View.prefab b/Assets/Prefabs/Balance View.prefab index 2205154..aa5bc4d 100644 --- a/Assets/Prefabs/Balance View.prefab +++ b/Assets/Prefabs/Balance View.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 1895890848705907550} - component: {fileID: 2784997725963247869} - component: {fileID: 8832587068814696019} + - component: {fileID: 5097586531671081733} m_Layer: 5 m_Name: NotEnough sign m_TagString: Untagged @@ -137,6 +138,18 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!225 &5097586531671081733 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2905554012299072495} + m_Enabled: 1 + m_Alpha: 0 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 --- !u!1 &5319338895588357567 GameObject: m_ObjectHideFlags: 0 @@ -267,6 +280,8 @@ MonoBehaviour: m_EditorClassIdentifier: balanceLabel: {fileID: 5484307841612921866} balanceSignGroup: {fileID: 2250837123488975911} + _notEnoughSignGroup: {fileID: 5097586531671081733} + _notEnoughSign: {fileID: 1895890848705907550} --- !u!1 &6737473297796179700 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/GameScene3D.unity b/Assets/Scenes/GameScene3D.unity index 3c2a7ae..fcc703e 100644 --- a/Assets/Scenes/GameScene3D.unity +++ b/Assets/Scenes/GameScene3D.unity @@ -2761,6 +2761,7 @@ MonoBehaviour: leaderboard: {fileID: 0} CharactersConfigurator: {fileID: 141381088} menuGameplayTransit: {fileID: 29868612} + _backToMenu: {fileID: 1620402278} turnManager: {fileID: 1329752846} _fieldCleaner: {fileID: 1768372457} endGameHandler: {fileID: 240039283} @@ -7205,9 +7206,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1620402275} - - {fileID: 2004955257} - - {fileID: 1760265188} - - {fileID: 1483985610} - {fileID: 1779969964} m_Father: {fileID: 1081324697} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -7717,143 +7715,6 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 1909234588782507268, guid: e45c4d0b012452f40ad1dc153ae38811, type: 3} m_PrefabInstance: {fileID: 740947896} m_PrefabAsset: {fileID: 0} ---- !u!1 &752525799 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 752525800} - - component: {fileID: 752525802} - - component: {fileID: 752525801} - m_Layer: 5 - m_Name: Text (TMP).2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &752525800 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752525799} - 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: 2004955257} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.6998816, y: -17.00004} - m_SizeDelta: {x: 177.84, y: 34.32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &752525801 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752525799} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: "\u0432\u0440\u0435\u043C\u044F: 6,0" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_sharedMaterial: {fileID: -7443843586772838647, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 21 - m_fontSizeBase: 21 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 16 - m_fontSizeMax: 64 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_characterHorizontalScale: 1 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &752525802 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752525799} - m_CullTransparentMesh: 1 --- !u!1 &767780635 GameObject: m_ObjectHideFlags: 0 @@ -13698,82 +13559,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1483181577} m_CullTransparentMesh: 1 ---- !u!1 &1483985609 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1483985610} - - component: {fileID: 1483985612} - - component: {fileID: 1483985611} - m_Layer: 5 - m_Name: notif2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1483985610 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483985609} - 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: 2062013012} - m_Father: {fileID: 689075010} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 36.44507, y: -114.360016} - m_SizeDelta: {x: 394.61, y: 81.46} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1483985611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483985609} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 614207522507337508, guid: dc142ba18b2f32e46b05e49345242b5a, 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!222 &1483985612 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1483985609} - m_CullTransparentMesh: 1 --- !u!1 &1490957894 GameObject: m_ObjectHideFlags: 0 @@ -15323,6 +15108,8 @@ GameObject: - component: {fileID: 1620402275} - component: {fileID: 1620402277} - component: {fileID: 1620402276} + - component: {fileID: 1620402279} + - component: {fileID: 1620402278} m_Layer: 5 m_Name: BackToMenu m_TagString: Untagged @@ -15390,6 +15177,31 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1620402274} m_CullTransparentMesh: 1 +--- !u!114 &1620402278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1620402274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01e117bf94ab37247bf61b231f5d7d49, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::BackToMenuController + _fadeDuration: 0.5 +--- !u!225 &1620402279 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1620402274} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 --- !u!1 &1635073818 GameObject: m_ObjectHideFlags: 0 @@ -16574,82 +16386,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1753366813} m_CullTransparentMesh: 1 ---- !u!1 &1760265187 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1760265188} - - component: {fileID: 1760265190} - - component: {fileID: 1760265189} - m_Layer: 5 - m_Name: notif1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1760265188 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1760265187} - 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: 1933433628} - m_Father: {fileID: 689075010} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 36.44507, y: -13.459991} - m_SizeDelta: {x: 394.61, y: 81.46} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1760265189 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1760265187} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 614207522507337508, guid: dc142ba18b2f32e46b05e49345242b5a, 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!222 &1760265190 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1760265187} - m_CullTransparentMesh: 1 --- !u!1 &1765056704 GameObject: m_ObjectHideFlags: 0 @@ -16981,143 +16717,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1779969963} m_CullTransparentMesh: 1 ---- !u!1 &1786366767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1786366768} - - component: {fileID: 1786366770} - - component: {fileID: 1786366769} - m_Layer: 5 - m_Name: Text (TMP).1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1786366768 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1786366767} - 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: 2004955257} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.00006198883, y: 20.89999} - m_SizeDelta: {x: 149.42, y: 34.32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1786366769 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1786366767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: "\u0445\u043E\u0434\u044B: 13" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_sharedMaterial: {fileID: -7443843586772838647, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 21 - m_fontSizeBase: 21 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 16 - m_fontSizeMax: 64 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_characterHorizontalScale: 1 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &1786366770 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1786366767} - m_CullTransparentMesh: 1 --- !u!1 &1812392301 GameObject: m_ObjectHideFlags: 0 @@ -18803,143 +18402,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1931747178} m_CullTransparentMesh: 1 ---- !u!1 &1933433627 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1933433628} - - component: {fileID: 1933433630} - - component: {fileID: 1933433629} - m_Layer: 5 - m_Name: Text (TMP).3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1933433628 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933433627} - 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: 1760265188} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 19.875, y: 0} - m_SizeDelta: {x: -39.749996, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1933433629 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933433627} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: "\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0435 \u043F\u0440\u0438\u0437\u044B\n\u0437\u0430\u043A\u043E\u043D\u0447\u0438\u043B\u0438\u0441\u044C" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_sharedMaterial: {fileID: -7443843586772838647, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 16 - m_fontSizeMax: 64 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_characterHorizontalScale: 1 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &1933433630 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933433627} - m_CullTransparentMesh: 1 --- !u!1 &1948752562 GameObject: m_ObjectHideFlags: 0 @@ -20259,83 +19721,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1997844673} m_CullTransparentMesh: 1 ---- !u!1 &2004955256 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2004955257} - - component: {fileID: 2004955259} - - component: {fileID: 2004955258} - m_Layer: 5 - m_Name: Time&Moves - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2004955257 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2004955256} - 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: 1786366768} - - {fileID: 752525800} - m_Father: {fileID: 689075010} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -28.964966, y: 173.94003} - m_SizeDelta: {x: 273.55, y: 154.63} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2004955258 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2004955256} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 2653502420703579899, guid: dc142ba18b2f32e46b05e49345242b5a, 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!222 &2004955259 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2004955256} - m_CullTransparentMesh: 1 --- !u!1 &2009546232 GameObject: m_ObjectHideFlags: 0 @@ -21322,143 +20707,6 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 ---- !u!1 &2062013011 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2062013012} - - component: {fileID: 2062013014} - - component: {fileID: 2062013013} - m_Layer: 5 - m_Name: Text (TMP).3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2062013012 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062013011} - 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: 1483985610} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 19.875, y: 0} - m_SizeDelta: {x: -39.749996, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2062013013 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062013011} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: "\u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0435 \u043F\u0440\u0438\u0437\u044B\n\u0437\u0430\u043A\u043E\u043D\u0447\u0438\u043B\u0438\u0441\u044C" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_sharedMaterial: {fileID: -7443843586772838647, guid: 4f645b7426b379248bf44c703f8fbd2a, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4278190080 - m_fontColor: {r: 0, g: 0, b: 0, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 16 - m_fontSizeMax: 64 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_characterHorizontalScale: 1 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &2062013014 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062013011} - m_CullTransparentMesh: 1 --- !u!1 &2068472955 GameObject: m_ObjectHideFlags: 0 @@ -24507,7 +23755,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 5544866098104471712, guid: f99466ff04084264e9e9fc17b47090bf, type: 3} propertyPath: m_AnchoredPosition.x - value: 55.32739 + value: 55.327393 objectReference: {fileID: 0} - target: {fileID: 5544866098104471712, guid: f99466ff04084264e9e9fc17b47090bf, type: 3} propertyPath: m_AnchoredPosition.y diff --git a/Assets/Scripts/Characters/VisualModule.cs b/Assets/Scripts/Characters/VisualModule.cs index 2a553bc..5da2955 100644 --- a/Assets/Scripts/Characters/VisualModule.cs +++ b/Assets/Scripts/Characters/VisualModule.cs @@ -94,7 +94,7 @@ namespace CharacterSystem Message(gameEvent, forceMessage, shouldShowName); if (gameEvent == GameEvent.Appear || gameEvent == GameEvent.Return) - _animator.SetTrigger("Appear"); + PlayAppearAnimation(); if (gameEvent == GameEvent.PlayerWin) _animator.SetTrigger("Lose"); @@ -118,6 +118,13 @@ namespace CharacterSystem _audioSource.volume = SettingsManager.GetFloat(SettingKey.SOUNDS_VOLUME); } + private void PlayAppearAnimation() + { + _animator.ResetTrigger("Appear"); + _animator.SetTrigger("Sleep"); + _animator.SetTrigger("Appear"); + } + private void Message(GameEvent replicaType, bool force, bool showName) { if (_replicas == null || _messageBox == null || _replicas.WillPlay(replicaType) == false) diff --git a/Assets/Scripts/Common/CoinCounter.cs b/Assets/Scripts/Common/CoinCounter.cs index c1a68b4..88a99f3 100644 --- a/Assets/Scripts/Common/CoinCounter.cs +++ b/Assets/Scripts/Common/CoinCounter.cs @@ -1,29 +1,44 @@ using TMPro; using UnityEngine; +using DG.Tweening; public class CoinCounter : MonoBehaviour { public TextMeshProUGUI balanceLabel; public CanvasGroup balanceSignGroup; - private bool initialized = false; + [SerializeField] private CanvasGroup _notEnoughSignGroup; + [SerializeField] private RectTransform _notEnoughSign; - public void Initialize() + private bool _initialized; + private Sequence _notEnoughSequence; + private Vector3 _notEnoughBaseScale; + + private void OnEnable() { - UpdateBalanceLabelBySettings(); - PaymentSystem.OnBalanceChanged += UpdateBalanceLabel; - SettingsManager.OnSettingsChanged += UpdateBalanceLabelBySettings; - - initialized = true; + if (_initialized) + Subscribe(); } private void OnDisable() { - if (!initialized) return; + if (!_initialized) + return; - PaymentSystem.OnBalanceChanged -= UpdateBalanceLabel; - SettingsManager.OnSettingsChanged -= UpdateBalanceLabelBySettings; + Unsubscribe(); + StopNotEnoughAnimation(); } + public void Initialize() + { + _notEnoughBaseScale = _notEnoughSign.localScale; + ResetNotEnoughSign(); + UpdateBalanceLabelBySettings(); + _initialized = true; + Subscribe(); + } + + public void UpdateBalanceLabel(int newCount) => balanceLabel.text = PaymentSystem.GetPluralizedMoney(newCount); + private void UpdateBalanceLabelBySettings() { bool freeplay = SettingsManager.GetBool(SettingKey.FREEPLAY); @@ -39,5 +54,50 @@ public class CoinCounter : MonoBehaviour } } - public void UpdateBalanceLabel(int newCount) => balanceLabel.text = PaymentSystem.GetPluralizedMoney(newCount); -} \ No newline at end of file + private void PlayNotEnoughAnimation() + { + const int flashesCount = 5; + const float halfFlashDuration = 0.15f; + + StopNotEnoughAnimation(); + _notEnoughSignGroup.alpha = 0f; + _notEnoughSign.localScale = _notEnoughBaseScale * 0.85f; + + _notEnoughSequence = DOTween.Sequence(); + _notEnoughSequence.Append(_notEnoughSignGroup.DOFade(1f, halfFlashDuration)); + _notEnoughSequence.Join(_notEnoughSign.DOScale(_notEnoughBaseScale, halfFlashDuration).SetEase(Ease.OutBack)); + _notEnoughSequence.Append(_notEnoughSignGroup.DOFade(0f, halfFlashDuration)); + _notEnoughSequence.Join(_notEnoughSign.DOScale(_notEnoughBaseScale * 0.85f, halfFlashDuration).SetEase(Ease.InQuad)); + _notEnoughSequence.SetLoops(flashesCount); + _notEnoughSequence.OnComplete(ResetNotEnoughSign); + _notEnoughSequence.PlayForward(); + } + + private void StopNotEnoughAnimation() + { + _notEnoughSequence?.Kill(); + _notEnoughSequence = null; + } + + private void ResetNotEnoughSign() + { + _notEnoughSignGroup.alpha = 0f; + _notEnoughSign.localScale = _notEnoughBaseScale; + _notEnoughSequence = null; + } + + private void Subscribe() + { + Unsubscribe(); + PaymentSystem.OnBalanceChanged += UpdateBalanceLabel; + PaymentSystem.OnNotEnoughMoney += PlayNotEnoughAnimation; + SettingsManager.OnSettingsChanged += UpdateBalanceLabelBySettings; + } + + private void Unsubscribe() + { + PaymentSystem.OnBalanceChanged -= UpdateBalanceLabel; + PaymentSystem.OnNotEnoughMoney -= PlayNotEnoughAnimation; + SettingsManager.OnSettingsChanged -= UpdateBalanceLabelBySettings; + } +} diff --git a/Assets/Scripts/Common/GameManager.cs b/Assets/Scripts/Common/GameManager.cs index 8996b5b..c9c6273 100644 --- a/Assets/Scripts/Common/GameManager.cs +++ b/Assets/Scripts/Common/GameManager.cs @@ -53,6 +53,7 @@ public class GameManager : MonoBehaviour [Header("Переходы")] [SerializeField] private MenuGameplayTransit menuGameplayTransit; + [SerializeField] private BackToMenuController _backToMenu; [SerializeField] TurnManager turnManager; [SerializeField] private FieldCleaner _fieldCleaner; @@ -89,9 +90,8 @@ public class GameManager : MonoBehaviour public void TryEnterGame(GameMode mode) { - //ДЛЯ ОТЛАДКИ - //if (!PaymentSystem.TryPayForMode(mode)) - // return; + if (!PaymentSystem.TryPayForMode(mode)) + return; SetMode(mode); _isLeavingGameplay = false; @@ -106,6 +106,8 @@ public class GameManager : MonoBehaviour void OnGameplayOpened() { menuGameplayTransit.GameplayOpened -= OnGameplayOpened; + turnTracker.ResetTracking(); + _backToMenu.Show(); OnGameStarted?.Invoke(gameMode); if (gameMode == GameMode.pve) @@ -155,6 +157,8 @@ public class GameManager : MonoBehaviour public void SetMode(GameMode mode) => gameMode = mode; + public void DisableEarlyMenuExit() => _backToMenu.Hide(); + public void PerformRevenge() => ContinueAfterPveLoss(); @@ -291,8 +295,6 @@ public class GameManager : MonoBehaviour private void StartRound() { - turnTracker.ResetTracking(); - turnTracker.EnableTimer(true); turnManager.StartGame(gameMode); PrepareRound(Team.Player1); OnRoundStarted?.Invoke(); diff --git a/Assets/Scripts/Gameplay/BackToMenuController.cs b/Assets/Scripts/Gameplay/BackToMenuController.cs new file mode 100644 index 0000000..c370445 --- /dev/null +++ b/Assets/Scripts/Gameplay/BackToMenuController.cs @@ -0,0 +1,51 @@ +using DG.Tweening; +using UnityEngine; + +[RequireComponent(typeof(CanvasGroup))] +public class BackToMenuController : MonoBehaviour +{ + [SerializeField, Min(0f)] private float _fadeDuration = 0.5f; + + private CanvasGroup _canvasGroup; + private Tween _fadeTween; + private bool _canExit; + + private void Awake() + { + _canvasGroup = GetComponent(); + } + + private void Update() + { + if (!_canExit || In.GetAxis(JoystickSide.Both, InteractMode.Discrete).y <= 0) + return; + + Hide(); + GameManager.Instance.GotoMenu(); + } + + private void OnDisable() + { + _fadeTween?.Kill(); + _fadeTween = null; + _canExit = false; + } + + public void Show() + { + _fadeTween?.Kill(); + _fadeTween = null; + _canvasGroup.alpha = 1f; + _canExit = true; + } + + public void Hide() + { + _canExit = false; + _fadeTween?.Kill(); + _fadeTween = _canvasGroup + .DOFade(0f, _fadeDuration) + .SetUpdate(true); + _fadeTween.PlayForward(); + } +} diff --git a/Assets/Scripts/Gameplay/BackToMenuController.cs.meta b/Assets/Scripts/Gameplay/BackToMenuController.cs.meta new file mode 100644 index 0000000..b946181 --- /dev/null +++ b/Assets/Scripts/Gameplay/BackToMenuController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 01e117bf94ab37247bf61b231f5d7d49 \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/Player.cs b/Assets/Scripts/Gameplay/Player.cs index 1c03c6e..8634c94 100644 --- a/Assets/Scripts/Gameplay/Player.cs +++ b/Assets/Scripts/Gameplay/Player.cs @@ -3,6 +3,10 @@ using UnityEngine; public class Player : BasePlayer, IGamePlayer { + public event Action OnChipDropped; + public event Action OnMoveCommitted; + public event Action OnThinkingStarted; + [Header("Movement Settings")] [SerializeField] private float chipYOffset = 5f; [SerializeField] private float prepareSpeed; @@ -20,8 +24,6 @@ public class Player : BasePlayer, IGamePlayer private int droppedRow, droppedColumn; - public event Action OnChipDropped; - private int SelectedColumn => availableColumns[selectedColumnIndex]; public bool ControlsEnabled { get; set; } = true; @@ -80,6 +82,7 @@ public class Player : BasePlayer, IGamePlayer if (currentChip.MoveToLinear(stickedTargetPosition, prepareSpeed)) { SetState(PlayerState.Idle); + OnThinkingStarted?.Invoke(); } } @@ -151,6 +154,7 @@ public class Player : BasePlayer, IGamePlayer droppedRow = board.GetLowestEmptyRow(SelectedColumn); board.DropChip(currentChip, SelectedColumn); + OnMoveCommitted?.Invoke(); SetState(PlayerState.Dropping); } diff --git a/Assets/Scripts/Gameplay/TurnManager.cs b/Assets/Scripts/Gameplay/TurnManager.cs index b5387de..6ecfd65 100644 --- a/Assets/Scripts/Gameplay/TurnManager.cs +++ b/Assets/Scripts/Gameplay/TurnManager.cs @@ -32,6 +32,25 @@ public class TurnManager : MonoBehaviour if (_isGameOver) return; + bool isPlayerOneTurn = player == _player1; + + if (isPlayerOneTurn) + { + _player1.OnMoveCommitted -= OnPlayerMoveCommitted; + _player1.OnMoveCommitted += OnPlayerMoveCommitted; + } + + if (_gameMode == GameMode.pve) + { + GameManager.Instance.turnTracker.EnableTimer(false); + + if (isPlayerOneTurn) + { + _player1.OnThinkingStarted -= OnPlayerThinkingStarted; + _player1.OnThinkingStarted += OnPlayerThinkingStarted; + } + } + player.OnChipDropped -= OnTurnCompleted; player.OnChipDropped += OnTurnCompleted; player.PrepareChip(); @@ -92,4 +111,22 @@ public class TurnManager : MonoBehaviour CheckResult result = FieldChecker.lastResult; GameManager.Instance.endGameHandler.HandleEndGame(lastPlayerTeam, _gameMode, result); } + + private void OnPlayerMoveCommitted() + { + _player1.OnMoveCommitted -= OnPlayerMoveCommitted; + GameManager.Instance.DisableEarlyMenuExit(); + + if (_gameMode == GameMode.pve) + { + GameManager.Instance.turnTracker.EnableTimer(false); + GameManager.Instance.turnTracker.IncrementMoves(); + } + } + + private void OnPlayerThinkingStarted() + { + _player1.OnThinkingStarted -= OnPlayerThinkingStarted; + GameManager.Instance.turnTracker.EnableTimer(true); + } }