diff --git a/Assets/Fonts/NEW/NexaRegular COOL.asset b/Assets/Fonts/NEW/NexaRegular COOL.asset index af66d7e..aec0ddf 100644 --- a/Assets/Fonts/NEW/NexaRegular COOL.asset +++ b/Assets/Fonts/NEW/NexaRegular COOL.asset @@ -11349,7 +11349,7 @@ Material: - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} - _FaceColor: {r: 1, g: 1, b: 1, a: 1} - - _GlowColor: {r: 1, g: 0.0031421185, b: 0, a: 1} + - _GlowColor: {r: 1, g: 0.8115379, b: 0, a: 1} - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} - _OutlineColor: {r: 0.554717, g: 0.554717, b: 0.554717, a: 1} - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Scenes/GameScene3D.unity b/Assets/Scenes/GameScene3D.unity index 80ffa71..c18a26d 100644 --- a/Assets/Scenes/GameScene3D.unity +++ b/Assets/Scenes/GameScene3D.unity @@ -3321,7 +3321,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &141381089 RectTransform: m_ObjectHideFlags: 0 @@ -6687,9 +6687,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 1065644474} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 170, y: -50.014133} m_SizeDelta: {x: 160, y: 50} m_Pivot: {x: 0, y: 0.5} --- !u!114 &325463673 @@ -11993,9 +11993,9 @@ RectTransform: - {fileID: 1706253902} m_Father: {fileID: 2024105139} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 955.625, y: -52.5} m_SizeDelta: {x: 260, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &534572201 @@ -12668,9 +12668,9 @@ RectTransform: - {fileID: 693044069} m_Father: {fileID: 2024105139} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 639.375, y: -52.5} m_SizeDelta: {x: 260, y: 100.02827} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &558055375 @@ -14422,9 +14422,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 2009796845} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 188.15, y: -50} m_SizeDelta: {x: 228.7, y: 50} m_Pivot: {x: 0, y: 0.5} --- !u!114 &621955042 @@ -16570,9 +16570,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 558055374} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -50.014133} m_SizeDelta: {x: 160.3, y: 50} m_Pivot: {x: 0, y: 0.5} --- !u!114 &693044070 @@ -26930,9 +26930,9 @@ RectTransform: - {fileID: 488531826} m_Father: {fileID: 1065644474} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 85, y: -50.014133} m_SizeDelta: {x: 170, y: 100.02827} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1027759316 @@ -32770,9 +32770,9 @@ RectTransform: - {fileID: 325463672} m_Father: {fileID: 2024105139} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 1306.875, y: -52.5} m_SizeDelta: {x: 330, y: 100.02827} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1065644475 @@ -34793,9 +34793,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 558055374} m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 50, y: -50.014133} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1149227638 @@ -35443,9 +35443,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 534572200} m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 50, y: -50} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1191498012 @@ -51484,9 +51484,9 @@ RectTransform: m_Children: [] m_Father: {fileID: 534572200} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -50} m_SizeDelta: {x: 160, y: 50} m_Pivot: {x: 0, y: 0.5} --- !u!114 &1706253903 @@ -53558,9 +53558,9 @@ RectTransform: - {fileID: 1956066310} m_Father: {fileID: 2009796845} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 90, y: -50} m_SizeDelta: {x: 180, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!4 &1811884474 stripped @@ -57400,9 +57400,9 @@ RectTransform: - {fileID: 621955041} m_Father: {fileID: 2024105139} 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, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 240.625, y: -52.5} m_SizeDelta: {x: 425, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2009796846 @@ -57900,7 +57900,6 @@ GameObject: - component: {fileID: 2024105141} - component: {fileID: 2024105140} - component: {fileID: 2024105142} - - component: {fileID: 2024105143} m_Layer: 5 m_Name: Instruction panel m_TagString: Untagged @@ -57995,18 +57994,6 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 ---- !u!114 &2024105143 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2024105138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b627bd469bca718458ae17426c80d9af, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &2043408353 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/GameFSM/PrizeState.cs b/Assets/Scripts/GameFSM/VictoryState.cs similarity index 98% rename from Assets/Scripts/GameFSM/PrizeState.cs rename to Assets/Scripts/GameFSM/VictoryState.cs index 65ff66b..fe141c8 100644 --- a/Assets/Scripts/GameFSM/PrizeState.cs +++ b/Assets/Scripts/GameFSM/VictoryState.cs @@ -1,7 +1,7 @@ using TMPro; using UnityEngine; -public class PrizeState : IState +public class VictoryState : IState { VictoryScale scale; GameManager gameManager; @@ -50,12 +50,9 @@ public class PrizeState : IState else { //победили ботов - givePrize = true; scale = gameManager.botScale; gameManager.winPanel.ShowWin(CellState.Empty); - - //Ñ�то в меню переход. Ð�адо в показ видео и лидерборд //nextState = new ClearFieldState(true, CellState.Player1); @@ -66,7 +63,6 @@ public class PrizeState : IState //вкл анимацию приза scale.SetWinState(); scale.winParticles.Play(); - } public void exit() diff --git a/Assets/Scripts/GameFSM/PrizeState.cs.meta b/Assets/Scripts/GameFSM/VictoryState.cs.meta similarity index 100% rename from Assets/Scripts/GameFSM/PrizeState.cs.meta rename to Assets/Scripts/GameFSM/VictoryState.cs.meta diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 5196dce..5defd8a 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -598,6 +598,20 @@ public class GameManager : MonoBehaviour } } + public void IncreaseScoreAndScaleOfPlayer(CellState player) + { + if (player == CellState.Player1) + { + player1score += 1; + Player1Scale.SetMedalsCount(player1score); + } + else + { + player2score += 1; + Player2Scale.SetMedalsCount(player2score); + } + } + public int GetMovesCount() { if (chipTransforms == null) return 0; diff --git a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs b/Assets/Scripts/Gameplay/EndOfTurnHandler.cs index 148745c..eadbdd6 100644 --- a/Assets/Scripts/Gameplay/EndOfTurnHandler.cs +++ b/Assets/Scripts/Gameplay/EndOfTurnHandler.cs @@ -1,10 +1,9 @@ - using PrizeSystem; +using Unity.VisualScripting; using UnityEngine; public static class EndOfTurnHandler { - private static GameManager gm; private static CheckResult result; public static void NormalHandling() @@ -15,81 +14,42 @@ public static class EndOfTurnHandler - bool swipeToNextRightNow = false; - IState nextState; + IState nextState = new ShowWinnerState(result);//âðåìåííî - //pvp ðåøåíèå ïîáåäà â ðàóíäå èëè â èãðå - bool endround = result.End && !result.Draw; - bool endgame = false; - - // ïîäñ÷åò î÷êîâ - if (result.End)//Ðàóíä îêîí÷åí. Ñ÷èòàåì î÷êè è ñòàâèì ñòåéò ïîêàç ïîáåäèòåëÿ + if (result.End) { - if (gm.gameMode == GameMode.pvp && !result.Draw) + if (!result.Draw) { - //ïîáåäèë p1 - if (gm.currentPlayer == CellState.Player1) + if (gm.gameMode == GameMode.pvp) { - gm.player1score += 1; - gm.Player1Scale.SetMedalsCount(gm.player1score); + PvpEndroundHandler(); } - else//ïîáåäèë p2 + else if (gm.gameMode == GameMode.pve) //êîíåö ðàóíäà ñ áîòîì { - gm.player2score += 1; - gm.Player2Scale.SetMedalsCount(gm.player2score); - } + PveEndroundHandler(); + if (gm.currentPlayer == CellState.Player1) + {//àâòîïåðåõîä íà íåêñò áîòà. - if (gm.player1score == 5 || gm.player2score == 5) - endgame = true; + //Òóò íóæíî ïåðåéòè â ïðèçîâîå ñîñòîÿíèå + //Ïîòîì èç íåãî èäòè äàëüøå. + ShowWinnerState showWinner = CreateAutoTransitionState(result, 4); - if (endgame) - AvatarEventBus.Instance.OnEndGame?.Invoke(gm.currentPlayer); - else if (endround) - AvatarEventBus.Instance.OnEndRound?.Invoke(gm.currentPlayer); - } - else if (gm.gameMode == GameMode.pve && !result.Draw) //êîíåö ðàóíäà ñ áîòîì - { - //ÍÅ ÍÈ×Üß - VictoryScale botScale = gm.botScale; - - if (gm.currentPlayer == CellState.Player1)//[ÏÎÁÅÄÀ ÈÃÐÎÊÀ] - { - if (CharacterController.CurrentCharacter.HasPrize) - { - PrizeSystemManager.GivePrize(CharacterController.CurrentCharacter.prize); - CharacterController.CurrentCharacter.HasPrize = false; + nextState = showWinner; } - - DifficultyManager.instance.IncreaseDifficulty(); - gm.vsBotScore += 1; - CharacterEventBus.Instance.OnPlayerWin?.Invoke(); - - LightUtility.Win(); - CharacterController.CurrentCharacter.Animator.SetTrigger("Lose"); - - - swipeToNextRightNow = true; } - else//Áîò ïîáåäèë - { - LightUtility.Lose(); - CharacterController.CurrentCharacter.GetComponent().SetTrigger("Win"); - DifficultyManager.instance.DecreaseDifficulty(); - if (gm.vsBotScore != 0) - gm.vsBotScore -= 1; - CharacterEventBus.Instance.OnBotWin?.Invoke(); + if (TotalWin()) + {//êîíåö èãðû - ïðèçîâîå ñîñòîÿíèå + nextState = new VictoryState(); + ClearAllScales(); } - botScale.SetMedalsCount(gm.vsBotScore); } else if (gm.gameMode == GameMode.pve && result.Draw) { CharacterEventBus.Instance.OnDraw?.Invoke(); } - - nextState = new ShowWinnerState(result); } else { @@ -97,27 +57,78 @@ public static class EndOfTurnHandler nextState = new StartTurnState(); } - if (gm.gameMode == GameMode.pve && gm.vsBotScore == gm.botsAmount) gm.upgradeFeeshkaDifficulty(); - - //êîíåö èãðû - ïðèçîâîå ñîñòîÿíèå - if (TotalWin()) - { - nextState = new PrizeState(); - ClearAllScales(); - } - else if (swipeToNextRightNow) - { - ShowWinnerState showWinner = new ShowWinnerState(result); - showWinner.subState = ShowWinnerState.ShowWinnerSubstates.ExitByTime; - showWinner.timeRest = 4; - nextState = showWinner; - } - gm.stateMachine.ChangeState(nextState); } + + private static void PveEndroundHandler() + { + if (gm.currentPlayer == CellState.Player1) + { + PlayerWinHandler(); + } + else//Áîò ïîáåäèë + { + BotWinHandler(); + } + gm.botScale.SetMedalsCount(gm.vsBotScore); + + //åñëè ôèøêó ïîáåäèëè, òî ïîâûøàåì. + if (gm.vsBotScore == gm.botsAmount) gm.upgradeFeeshkaDifficulty(); + } + + private static void PvpEndroundHandler() + { + CellState winner = gm.currentPlayer; + gm.IncreaseScoreAndScaleOfPlayer(winner); + + if (TotalWin()) + AvatarEventBus.Instance.OnEndGame?.Invoke(gm.currentPlayer); + else + AvatarEventBus.Instance.OnEndRound?.Invoke(gm.currentPlayer); + } + private static void BotWinHandler() + { + LightUtility.Lose(); + CharacterController.CurrentCharacter.GetComponent().SetTrigger("Win"); + DifficultyManager.instance.DecreaseDifficulty(); + if (gm.vsBotScore != 0) + gm.vsBotScore -= 1; + + CharacterEventBus.Instance.OnBotWin?.Invoke(); + } + private static void PlayerWinHandler() + { + if (CharacterController.CurrentCharacter.HasPrize) + { + PrizeSystemManager.GivePrize(CharacterController.CurrentCharacter.prize); + CharacterController.CurrentCharacter.HasPrize = false; + } + + DifficultyManager.instance.IncreaseDifficulty(); + gm.vsBotScore += 1; + CharacterEventBus.Instance.OnPlayerWin?.Invoke(); + + LightUtility.Win(); + CharacterController.CurrentCharacter.Animator.SetTrigger("Lose"); + } + private static bool TotalWin() => gm.player1score == 5 || gm.player2score == 5 || gm.vsBotScore == gm.botsAmount; + private static void ClearAllScales() + { + if (gm.botScale.isActiveAndEnabled) gm.botScale.ClearScale(); + if (gm.Player1Scale.isActiveAndEnabled) gm.Player1Scale.ClearScale(); + if (gm.Player2Scale.isActiveAndEnabled) gm.Player2Scale.ClearScale(); + } + + private static ShowWinnerState CreateAutoTransitionState(CheckResult result, float time) + { + var state = new ShowWinnerState(result); + state.subState = ShowWinnerState.ShowWinnerSubstates.ExitByTime; + state.timeRest = time; + return state; + } public static void WinByTimerHandling() { @@ -162,17 +173,13 @@ public static class EndOfTurnHandler //êîíåö èãðû - ïðèçîâîå ñîñòîÿíèå if (TotalWin()) { - nextState = new PrizeState(); + nextState = new VictoryState(); ClearAllScales(); } gm.stateMachine.ChangeState(nextState); } - private static void ClearAllScales() - { - if (gm.botScale.isActiveAndEnabled) gm.botScale.ClearScale(); - if (gm.Player1Scale.isActiveAndEnabled) gm.Player1Scale.ClearScale(); - if (gm.Player2Scale.isActiveAndEnabled) gm.Player2Scale.ClearScale(); - } + + } diff --git a/Assets/Scripts/PrizeSystem/PrizeSerializer.cs b/Assets/Scripts/PrizeSystem/PrizeSerializer.cs index db40d3d..5e2a59e 100644 --- a/Assets/Scripts/PrizeSystem/PrizeSerializer.cs +++ b/Assets/Scripts/PrizeSystem/PrizeSerializer.cs @@ -14,16 +14,34 @@ namespace PrizeSystem static string FILE_PATH => Path.Combine(Application.persistentDataPath, CHARACTERS_PRIZES); static int CharactersAmount => GameManager.instance.botsAmount; + private static List cachedPrizes; + public static List LoadPrizes() { - if (!File.Exists(FILE_PATH)) + if (cachedPrizes != null) + return cachedPrizes; + + try { - Debug.Log("Ð�е запиÑ�аны призы беру дефолт"); - return GetDefaultPrizes(); + if (File.Exists(FILE_PATH)) + { + string fileString = File.ReadAllText(FILE_PATH); + cachedPrizes = DeserializePrizes(fileString); + } + else + { + Debug.Log($"Файл {FILE_PATH} не найден, Ñ�оздаю Ñ� призами по умолчанию"); + cachedPrizes = GetDefaultPrizes(); + SavePrizes(cachedPrizes); + } + } + catch (Exception e) + { + Debug.LogError($"Ошибка загрузки призов: {e.Message}"); + cachedPrizes = GetDefaultPrizes(); } - string fileString = File.ReadAllText(FILE_PATH); - return DeserializePrizes(fileString); + return cachedPrizes; } ///