From 7a5f9ec7ce1b2bd73cc1ec46dfb1df3839850dcf Mon Sep 17 00:00:00 2001 From: se_ga Date: Sat, 18 Apr 2026 10:59:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0=D1=86=D0=B8=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=D0=B8=D1=82=D1=80=D0=B8=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B2=20PVP=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5.=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=20=D0=97=D0=B0=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B8=D0=BB=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=B6=D0=B8=D1=82=D1=8C=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B9=20=D0=B2=D0=B8=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/GameFSM/MenuState.cs | 8 ++---- Assets/Scripts/GameFSM/StartRoundState.cs | 2 ++ Assets/Scripts/GameFSM/StateRouter.cs | 10 +++++++ Assets/Scripts/PrizeSystem/VitrinaView.cs | 34 +++++++++++++++++------ 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/GameFSM/MenuState.cs b/Assets/Scripts/GameFSM/MenuState.cs index 8360bf7..07763f1 100644 --- a/Assets/Scripts/GameFSM/MenuState.cs +++ b/Assets/Scripts/GameFSM/MenuState.cs @@ -64,12 +64,6 @@ public class MenuState : IState subState = MenuSubStates.Choosing;//субстейт и так ставится в энтере } - //если пришли из игры, то нужно начать с открытия меню - public MenuState(bool fromGameplay) : this() - { - subState = MenuSubStates.OpeningMenu;//субстейт и так ставится в энтере - } - public void enter() { PullRefs(); @@ -114,6 +108,8 @@ public class MenuState : IState gm.player2score = 0; gm.vsBotScore = 0; + VitrinaView.Instance.Deactivate(); + gm.moveMade = false; } diff --git a/Assets/Scripts/GameFSM/StartRoundState.cs b/Assets/Scripts/GameFSM/StartRoundState.cs index dca6a40..f994c78 100644 --- a/Assets/Scripts/GameFSM/StartRoundState.cs +++ b/Assets/Scripts/GameFSM/StartRoundState.cs @@ -30,6 +30,8 @@ public class StartRoundState : IState DualAvatarController.Instance.ShowCharacters(); } + VitrinaView.Instance.ActivateIfNeed(); + gm.stateMachine.ChangeState(new StartTurnState()); } catch (Exception e) diff --git a/Assets/Scripts/GameFSM/StateRouter.cs b/Assets/Scripts/GameFSM/StateRouter.cs index 24841f3..c86f22d 100644 --- a/Assets/Scripts/GameFSM/StateRouter.cs +++ b/Assets/Scripts/GameFSM/StateRouter.cs @@ -57,6 +57,16 @@ public static class StateRouter var currentPrize = CharacterController.CurrentCharacter.prize; bool currentBotHasNonEmptyPrize = CharacterController.CurrentCharacter.HasPrize && currentPrize is not EmptyPrize; + + if(currentPrize is VitrinaPrize vitrinaPrize) + { + int[] readyBoxes = PrizeStandController.GetReadyBoxes(); + if (VitrinaPanel.FindIntersection(readyBoxes, vitrinaPrize.Boxes).Length == 0) + { + currentBotHasNonEmptyPrize = false; + } + } + if (!currentBotHasNonEmptyPrize) return NextBot(); diff --git a/Assets/Scripts/PrizeSystem/VitrinaView.cs b/Assets/Scripts/PrizeSystem/VitrinaView.cs index 99cde33..b70de08 100644 --- a/Assets/Scripts/PrizeSystem/VitrinaView.cs +++ b/Assets/Scripts/PrizeSystem/VitrinaView.cs @@ -8,7 +8,20 @@ using UnityEngine.UI; //Это как шкала че есть в витрине чего нет. public class VitrinaView : MonoBehaviour { - public static VitrinaView instance; + private static VitrinaView instance; + public static VitrinaView Instance + { + get + { + if (instance == null) + { + instance = GameObject.FindObjectOfType(); + CharacterEventBus.Instance.OnCharacterAppeared.AddListener(instance.ActivateIfNeed); + instance.Deactivate(); + } + return instance; + } + } [SerializeField] private List Cells; @@ -20,16 +33,21 @@ public class VitrinaView : MonoBehaviour [SerializeField] private Color AvailableEmptyColor; [SerializeField] private Color NotAvailableColor; - private void Start() - { - instance = this; - CharacterEventBus.Instance.OnCharacterAppeared.AddListener(ActivateIfNeed); - Deactivate(); - - } + //private void Start() + //{ + // instance = this; + // CharacterEventBus.Instance.OnCharacterAppeared.AddListener(ActivateIfNeed); + + //} public void ActivateIfNeed() { + if (GameManager.instance.gameMode == GameMode.pvp) + { + Deactivate(); + return; + } + bool hasPrize = CharacterController.CurrentCharacter.HasPrize; if (hasPrize && CharacterController.CurrentCharacter.prize is VitrinaPrize vitrinaPrize) {