using Loom; using UnityEngine; using UnityEngine.InputSystem; public sealed class PauseMenuController : MonoBehaviour { private UIBridge _bridge; private InputActionMap _gameplay; private float _resumeTimeScale; private bool _paused; private void Start() { _bridge = UIBridge.Instance; _gameplay = new InputActionMap("Gameplay"); var pause = _gameplay.AddAction("Pause", InputActionType.Button); pause.AddBinding("/escape"); pause.AddBinding("/start"); pause.performed += _ => _bridge.Pause(); var score = _gameplay.AddAction("Score", InputActionType.Button); score.AddBinding("/space"); score.AddBinding("/buttonSouth"); score.performed += _ => _bridge.Score += 1; EnableGameplay(); } private void OnEnable() { // OnEnable also runs before Start has created the action map. if (_gameplay != null) EnableGameplay(); } private void EnableGameplay() { _bridge.SetPauseHandler(SetPaused); _bridge.Resume(); } private void SetPaused(bool paused) { if (paused) { if (!_paused) _resumeTimeScale = Time.timeScale; _gameplay.Disable(); Time.timeScale = 0; LoomRuntime.KeyboardMode = LoomKeyboardMode.Navigation; } else { if (_paused) Time.timeScale = _resumeTimeScale; LoomRuntime.KeyboardMode = LoomKeyboardMode.Gameplay; _gameplay.Enable(); } _paused = paused; } private void OnDisable() { if (_gameplay == null) return; _bridge.Resume(); _bridge.SetPauseHandler(null); _gameplay.Disable(); } private void OnDestroy() => _gameplay?.Dispose(); }