You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.0 KiB
C#
191 lines
6.0 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);
|
|
}
|
|
}
|
|
} |