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);
 | |
|         }
 | |
|     }
 | |
| } |