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 { 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().color = new Color(1f, 1f, 1f, 0f); } } private void CreateTrigger() { TriggerRoot triggerRoot = Resources.Load("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().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; } } }