151 lines
3.5 KiB
C#
151 lines
3.5 KiB
C#
using System;
|
|
using SRDebugger.Internal;
|
|
using SRDebugger.UI.Other;
|
|
using SRF;
|
|
using SRF.Service;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace SRDebugger.Services.Implementation
|
|
{
|
|
[Service(typeof(IDebugTriggerService))]
|
|
public class DebugTriggerImpl : SRServiceBase<IDebugTriggerService>, IDebugTriggerService
|
|
{
|
|
private PinAlignment _position;
|
|
|
|
private TriggerRoot _trigger;
|
|
|
|
public bool IsEnabled
|
|
{
|
|
get
|
|
{
|
|
return _trigger != null && _trigger.CachedGameObject.activeSelf;
|
|
}
|
|
set
|
|
{
|
|
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();
|
|
UnityEngine.Object.DontDestroyOnLoad(base.CachedGameObject);
|
|
base.CachedTransform.SetParent(Hierarchy.Get("SRDebugger"), true);
|
|
base.name = "Trigger";
|
|
}
|
|
|
|
protected override void Update()
|
|
{
|
|
base.Update();
|
|
if ((bool)_trigger && (bool)_trigger.TripleTapButton)
|
|
{
|
|
_trigger.TripleTapButton.GetComponent<Image>().color = new Color(1f, 1f, 1f, 0f);
|
|
}
|
|
}
|
|
|
|
private void CreateTrigger()
|
|
{
|
|
TriggerRoot triggerRoot = Resources.Load<TriggerRoot>("SRDebugger/UI/Prefabs/Trigger");
|
|
if (triggerRoot == null)
|
|
{
|
|
Debug.LogError("[SRDebugger] Error loading trigger prefab");
|
|
return;
|
|
}
|
|
_trigger = SRInstantiate.Instantiate(triggerRoot);
|
|
_trigger.CachedTransform.SetParent(base.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();
|
|
}
|
|
|
|
private void OnLevelWasLoaded(int level)
|
|
{
|
|
SRDebuggerUtil.EnsureEventSystemExists();
|
|
}
|
|
|
|
private void OnTriggerButtonClick()
|
|
{
|
|
SRDebug.Instance.ShowDebugPanel();
|
|
base.transform.parent.GetComponentInChildren<SRTabController>().TabContentsContainer.gameObject.SetActive(true);
|
|
}
|
|
|
|
private static void SetTriggerPosition(RectTransform t, PinAlignment position)
|
|
{
|
|
float x = 0f;
|
|
float y = 0f;
|
|
float x2 = 0f;
|
|
float y2 = 0f;
|
|
switch (position)
|
|
{
|
|
case PinAlignment.TopLeft:
|
|
case PinAlignment.TopRight:
|
|
y = 1f;
|
|
y2 = 1f;
|
|
break;
|
|
case PinAlignment.BottomLeft:
|
|
case PinAlignment.BottomRight:
|
|
y = 0f;
|
|
y2 = 0f;
|
|
break;
|
|
}
|
|
switch (position)
|
|
{
|
|
case PinAlignment.TopLeft:
|
|
case PinAlignment.BottomLeft:
|
|
x = 0f;
|
|
x2 = 0f;
|
|
break;
|
|
case PinAlignment.TopRight:
|
|
case PinAlignment.BottomRight:
|
|
x = 1f;
|
|
x2 = 1f;
|
|
break;
|
|
}
|
|
t.pivot = new Vector2(x, y);
|
|
Vector2 anchorMax = (t.anchorMin = new Vector2(x2, y2));
|
|
t.anchorMax = anchorMax;
|
|
}
|
|
}
|
|
}
|