154 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
namespace SRDebugger.Services.Implementation
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using Internal;
 | 
						|
    using SRF;
 | 
						|
    using SRF.Service;
 | 
						|
    using UI;
 | 
						|
    using UnityEngine;
 | 
						|
 | 
						|
    [Service(typeof (IDebugPanelService))]
 | 
						|
    public class DebugPanelServiceImpl : ScriptableObject, IDebugPanelService
 | 
						|
    {
 | 
						|
        private DebugPanelRoot _debugPanelRootObject;
 | 
						|
        public event Action<IDebugPanelService, bool> VisibilityChanged;
 | 
						|
 | 
						|
        private bool _isVisible;
 | 
						|
 | 
						|
        private bool? _cursorWasVisible;
 | 
						|
 | 
						|
        private CursorLockMode? _cursorLockMode;
 | 
						|
 | 
						|
 | 
						|
        public DebugPanelRoot RootObject
 | 
						|
        {
 | 
						|
            get { return _debugPanelRootObject; }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool IsLoaded
 | 
						|
        {
 | 
						|
            get { return _debugPanelRootObject != null; }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool IsVisible
 | 
						|
        {
 | 
						|
            get { return IsLoaded && _isVisible; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_isVisible == value)
 | 
						|
                {
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
 | 
						|
                if (value)
 | 
						|
                {
 | 
						|
                    if (!IsLoaded)
 | 
						|
                    {
 | 
						|
                        Load();
 | 
						|
                    }
 | 
						|
 | 
						|
                    SRDebuggerUtil.EnsureEventSystemExists();
 | 
						|
 | 
						|
                    _debugPanelRootObject.CanvasGroup.alpha = 1.0f;
 | 
						|
                    _debugPanelRootObject.CanvasGroup.interactable = true;
 | 
						|
                    _debugPanelRootObject.CanvasGroup.blocksRaycasts = true;
 | 
						|
                    _cursorWasVisible = Cursor.visible;
 | 
						|
                    _cursorLockMode = Cursor.lockState;
 | 
						|
 | 
						|
                    if (Settings.Instance.AutomaticallyShowCursor)
 | 
						|
                    {
 | 
						|
                        Cursor.visible = true;
 | 
						|
                        Cursor.lockState = CursorLockMode.None;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (IsLoaded)
 | 
						|
                    {
 | 
						|
                        _debugPanelRootObject.CanvasGroup.alpha = 0.0f;
 | 
						|
                        _debugPanelRootObject.CanvasGroup.interactable = false;
 | 
						|
                        _debugPanelRootObject.CanvasGroup.blocksRaycasts = false;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (_cursorWasVisible.HasValue)
 | 
						|
                    {
 | 
						|
                        Cursor.visible = _cursorWasVisible.Value;
 | 
						|
                        _cursorWasVisible = null;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (_cursorLockMode.HasValue)
 | 
						|
                    {
 | 
						|
                        Cursor.lockState = _cursorLockMode.Value;
 | 
						|
                        _cursorLockMode = null;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                _isVisible = value;
 | 
						|
 | 
						|
                if (VisibilityChanged != null)
 | 
						|
                {
 | 
						|
                    VisibilityChanged(this, _isVisible);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public DefaultTabs? ActiveTab
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_debugPanelRootObject == null)
 | 
						|
                {
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
 | 
						|
                return _debugPanelRootObject.TabController.ActiveTab;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public void OpenTab(DefaultTabs tab)
 | 
						|
        {
 | 
						|
            if (!IsVisible)
 | 
						|
            {
 | 
						|
                IsVisible = true;
 | 
						|
            }
 | 
						|
 | 
						|
            _debugPanelRootObject.TabController.OpenTab(tab);
 | 
						|
        }
 | 
						|
 | 
						|
        public void Unload()
 | 
						|
        {
 | 
						|
            if (_debugPanelRootObject == null)
 | 
						|
            {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            IsVisible = false;
 | 
						|
 | 
						|
            _debugPanelRootObject.CachedGameObject.SetActive(false);
 | 
						|
            Destroy(_debugPanelRootObject.CachedGameObject);
 | 
						|
 | 
						|
            _debugPanelRootObject = null;
 | 
						|
        }
 | 
						|
 | 
						|
        private void Load()
 | 
						|
        {
 | 
						|
            var prefab = Resources.Load<DebugPanelRoot>(SRDebugPaths.DebugPanelPrefabPath);
 | 
						|
 | 
						|
            if (prefab == null)
 | 
						|
            {
 | 
						|
                Debug.LogError("[SRDebugger] Error loading debug panel prefab");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            _debugPanelRootObject = SRInstantiate.Instantiate(prefab);
 | 
						|
            _debugPanelRootObject.name = "Panel";
 | 
						|
 | 
						|
            DontDestroyOnLoad(_debugPanelRootObject);
 | 
						|
 | 
						|
            _debugPanelRootObject.CachedTransform.SetParent(Hierarchy.Get("SRDebugger"), true);
 | 
						|
 | 
						|
            SRDebuggerUtil.EnsureEventSystemExists();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |