191 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
namespace SRDebugger.Services.Implementation
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using Internal;
 | 
						|
    using SRF;
 | 
						|
    using SRF.Service;
 | 
						|
    using UI.Other;
 | 
						|
    using UnityEngine;
 | 
						|
 | 
						|
    [Service(typeof (IDebugTriggerService))]
 | 
						|
    public class DebugTriggerImpl : SRServiceBase<IDebugTriggerService>, IDebugTriggerService
 | 
						|
    {
 | 
						|
        private PinAlignment _position;
 | 
						|
        private TriggerRoot _trigger;
 | 
						|
        private IConsoleService _consoleService;
 | 
						|
        public bool IsEnabled
 | 
						|
        {
 | 
						|
            get { return _trigger != null && _trigger.CachedGameObject.activeSelf; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                // Create trigger if it does not yet exist
 | 
						|
                if (value && _trigger == null)
 | 
						|
                {
 | 
						|
                    CreateTrigger();
 | 
						|
                }
 | 
						|
 | 
						|
                if (_trigger != null)
 | 
						|
                {
 | 
						|
                    _trigger.CachedGameObject.SetActive(value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public PinAlignment Position
 | 
						|
        {
 | 
						|
            get { return _position; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_trigger != null)
 | 
						|
                {
 | 
						|
                    SetTriggerPosition(_trigger.TriggerTransform, value);
 | 
						|
                }
 | 
						|
 | 
						|
                _position = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void Awake()
 | 
						|
        {
 | 
						|
            base.Awake();
 | 
						|
            DontDestroyOnLoad(CachedGameObject);
 | 
						|
 | 
						|
            CachedTransform.SetParent(Hierarchy.Get("SRDebugger"), true);
 | 
						|
 | 
						|
            name = "Trigger";
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnError(IConsoleService console)
 | 
						|
        {
 | 
						|
            if (_trigger != null)
 | 
						|
            {
 | 
						|
                _trigger.ErrorNotifier.ShowErrorWarning();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void CreateTrigger()
 | 
						|
        {
 | 
						|
            var prefab = Resources.Load<TriggerRoot>(SRDebugPaths.TriggerPrefabPath);
 | 
						|
 | 
						|
            if (prefab == null)
 | 
						|
            {
 | 
						|
                Debug.LogError("[SRDebugger] Error loading trigger prefab");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            _trigger = SRInstantiate.Instantiate(prefab);
 | 
						|
            _trigger.CachedTransform.SetParent(CachedTransform, true);
 | 
						|
 | 
						|
            SetTriggerPosition(_trigger.TriggerTransform, _position);
 | 
						|
 | 
						|
            switch (Settings.Instance.TriggerBehaviour)
 | 
						|
            {
 | 
						|
                case Settings.TriggerBehaviours.TripleTap:
 | 
						|
                {
 | 
						|
                    _trigger.TripleTapButton.onClick.AddListener(OnTriggerButtonClick);
 | 
						|
                    _trigger.TapHoldButton.gameObject.SetActive(false);
 | 
						|
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
 | 
						|
                case Settings.TriggerBehaviours.TapAndHold:
 | 
						|
                {
 | 
						|
                    _trigger.TapHoldButton.onLongPress.AddListener(OnTriggerButtonClick);
 | 
						|
                    _trigger.TripleTapButton.gameObject.SetActive(false);
 | 
						|
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
 | 
						|
                case Settings.TriggerBehaviours.DoubleTap:
 | 
						|
                {
 | 
						|
                    _trigger.TripleTapButton.RequiredTapCount = 2;
 | 
						|
                    _trigger.TripleTapButton.onClick.AddListener(OnTriggerButtonClick);
 | 
						|
                    _trigger.TapHoldButton.gameObject.SetActive(false);
 | 
						|
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
 | 
						|
                default:
 | 
						|
                    throw new Exception("Unhandled TriggerBehaviour");
 | 
						|
            }
 | 
						|
            
 | 
						|
            SRDebuggerUtil.EnsureEventSystemExists();
 | 
						|
 | 
						|
            UnityEngine.SceneManagement.SceneManager.activeSceneChanged += OnActiveSceneChanged;
 | 
						|
 | 
						|
            if (Settings.Instance.ErrorNotification)
 | 
						|
            {
 | 
						|
                _consoleService = SRServiceManager.GetService<IConsoleService>();
 | 
						|
                _consoleService.Error += OnError;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void OnDestroy()
 | 
						|
        {
 | 
						|
            UnityEngine.SceneManagement.SceneManager.activeSceneChanged -= OnActiveSceneChanged;
 | 
						|
 | 
						|
            if (_consoleService != null)
 | 
						|
            {
 | 
						|
                _consoleService.Error -= OnError;
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnDestroy();
 | 
						|
        }
 | 
						|
        private static void OnActiveSceneChanged(UnityEngine.SceneManagement.Scene s1, UnityEngine.SceneManagement.Scene s2)
 | 
						|
        {
 | 
						|
            SRDebuggerUtil.EnsureEventSystemExists();
 | 
						|
        }
 | 
						|
        
 | 
						|
        private void OnTriggerButtonClick()
 | 
						|
        {
 | 
						|
            if (_trigger.ErrorNotifier.IsVisible)
 | 
						|
            {
 | 
						|
                // Open into console if there is an error.
 | 
						|
                SRDebug.Instance.ShowDebugPanel(DefaultTabs.Console);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                SRDebug.Instance.ShowDebugPanel();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private static void SetTriggerPosition(RectTransform t, PinAlignment position)
 | 
						|
        {
 | 
						|
            var pivotX = 0f;
 | 
						|
            var pivotY = 0f;
 | 
						|
 | 
						|
            var posX = 0f;
 | 
						|
            var posY = 0f;
 | 
						|
 | 
						|
            if (position == PinAlignment.TopLeft || position == PinAlignment.TopRight || position == PinAlignment.TopCenter)
 | 
						|
            {
 | 
						|
                pivotY = 1f;
 | 
						|
                posY = 1f;
 | 
						|
            }
 | 
						|
            else if (position == PinAlignment.BottomLeft || position == PinAlignment.BottomRight || position == PinAlignment.BottomCenter)
 | 
						|
            {
 | 
						|
                pivotY = 0f;
 | 
						|
                posY = 0f;
 | 
						|
            } else if (position == PinAlignment.CenterLeft || position == PinAlignment.CenterRight)
 | 
						|
            {
 | 
						|
                pivotY = 0.5f;
 | 
						|
                posY = 0.5f;
 | 
						|
            }
 | 
						|
 | 
						|
            if (position == PinAlignment.TopLeft || position == PinAlignment.BottomLeft || position == PinAlignment.CenterLeft)
 | 
						|
            {
 | 
						|
                pivotX = 0f;
 | 
						|
                posX = 0f;
 | 
						|
            }
 | 
						|
            else if (position == PinAlignment.TopRight || position == PinAlignment.BottomRight || position == PinAlignment.CenterRight)
 | 
						|
            {
 | 
						|
                pivotX = 1f;
 | 
						|
                posX = 1f;
 | 
						|
            } else if (position == PinAlignment.TopCenter || position == PinAlignment.BottomCenter)
 | 
						|
            {
 | 
						|
                pivotX = 0.5f;
 | 
						|
                posX = 0.5f;
 | 
						|
            }
 | 
						|
 | 
						|
            t.pivot = new Vector2(pivotX, pivotY);
 | 
						|
            t.anchorMax = t.anchorMin = new Vector2(posX, posY);
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |