diff --git a/Assets/Scripts/GameSession/GameSession.cs b/Assets/Scripts/GameSession/GameSession.cs index f5d9638..b58f617 100644 --- a/Assets/Scripts/GameSession/GameSession.cs +++ b/Assets/Scripts/GameSession/GameSession.cs @@ -16,10 +16,12 @@ public class GameSession : MonoBehaviour,IResettable Instance = this; Init(); } + private void Update() { InputTranslator.Tick(); } + private void Init() { InputTranslator = new InputTranslator(); @@ -31,12 +33,12 @@ public class GameSession : MonoBehaviour,IResettable { InputTranslator.AddCommandTranslator(translator); } + public void PauseSession(bool isPaused) { Time.timeScale = isPaused ? 0 : 1; - //List commands = new List(); - //ECommand[] commandRange = { ECommand.LEFT,ECommand.RIGHT,ECommand.UP,ECommand.DOWN,ECommand.SHOOT}; - //commands.AddRange(commandRange); + if (InputTranslator.IsTranslationResticted(InputConstants.InGameCommands)) + return; RestrictInputs(InputConstants.InGameCommands,isRestricted: isPaused); } diff --git a/Assets/Scripts/Input/Translating/InputTranslator.cs b/Assets/Scripts/Input/Translating/InputTranslator.cs index d47e7c3..12d1782 100644 --- a/Assets/Scripts/Input/Translating/InputTranslator.cs +++ b/Assets/Scripts/Input/Translating/InputTranslator.cs @@ -4,7 +4,6 @@ public class InputTranslator where T : IBinding { private List commandTranslators; private IBindingHolder bindingHolder; - private bool isTranslating = true; public void Init(IBindingHolder holder) { @@ -13,6 +12,8 @@ public class InputTranslator where T : IBinding bindingHolder.Init(); } + + public void AddCommandTranslator(ICommandTranslator translator) { if (commandTranslators.Contains(translator)) @@ -37,10 +38,21 @@ public class InputTranslator where T : IBinding } } } + + public bool IsTranslationResticted(List commands) + { + foreach (ECommand command in commands) + { + if (bindingHolder.InputBindings.ContainsKey(command)) + { + return bindingHolder.InputBindings[command].IsRestricted; + } + } + return false; + } + public void Tick() { - if (!isTranslating) - return; if (commandTranslators.Count == 0) return; diff --git a/Assets/Scripts/Pause/Pause.cs b/Assets/Scripts/Pause/Pause.cs index 9208814..cb68680 100644 --- a/Assets/Scripts/Pause/Pause.cs +++ b/Assets/Scripts/Pause/Pause.cs @@ -4,7 +4,6 @@ using UnityEngine; public class Pause : MonoBehaviour,ICommandTranslator { - private bool isOpened = false; private void Start() { GameSession.Instance.AddCommandTranslator(this); @@ -17,7 +16,8 @@ public class Pause : MonoBehaviour,ICommandTranslator switch (command) { case ECommand.OPEN_PAUSE_MENU: - isOpened = isOpened ? false : true; + bool isOpened = ViewManager.Instance.IsActive(); + isOpened = !isOpened; ViewManager.Instance.Show(isOpened); GameSession.Instance.PauseSession(isOpened); break; diff --git a/Assets/Scripts/UI/Views/BaseView.cs b/Assets/Scripts/UI/Views/BaseView.cs index 1969ed1..aef11d3 100644 --- a/Assets/Scripts/UI/Views/BaseView.cs +++ b/Assets/Scripts/UI/Views/BaseView.cs @@ -16,4 +16,9 @@ public abstract class BaseView : MonoBehaviour { gameObject.SetActive(isActive); } + + public bool IsActive() + { + return gameObject.activeInHierarchy; + } } diff --git a/Assets/Scripts/UI/Views/ViewManager.cs b/Assets/Scripts/UI/Views/ViewManager.cs index 4007524..40d74ae 100644 --- a/Assets/Scripts/UI/Views/ViewManager.cs +++ b/Assets/Scripts/UI/Views/ViewManager.cs @@ -53,6 +53,18 @@ public class ViewManager : MonoBehaviour } } + public bool IsActive() where T : BaseView + { + foreach (var view in views) + { + if (view is T) + { + return view.IsActive(); + } + } + return false; + } + public void Add(BaseView view,bool isActiveByDefault = true) { view.Init(); @@ -65,18 +77,4 @@ public class ViewManager : MonoBehaviour views.Remove(view); view.Destroy(); } - - public bool TryGetView(out T baseView) where T : BaseView - { - foreach (var view in views) - { - if (view is T) - { - baseView = (T)view; - return true; - } - } - baseView = null; - return false; - } }