193 lines
4.3 KiB
C#
193 lines
4.3 KiB
C#
using System;
|
|
using SRDebugger.Internal;
|
|
using SRF;
|
|
using SRF.Service;
|
|
using UnityEngine;
|
|
|
|
namespace SRDebugger.Services.Implementation
|
|
{
|
|
[Service(typeof(IDebugService))]
|
|
public class SRDebugService : IDebugService
|
|
{
|
|
private readonly IDebugPanelService _debugPanelService;
|
|
|
|
private readonly IDebugTriggerService _debugTrigger;
|
|
|
|
private bool _entryCodeEnabled;
|
|
|
|
private bool _hasAuthorised;
|
|
|
|
private DefaultTabs? _queuedTab;
|
|
|
|
public Settings Settings
|
|
{
|
|
get
|
|
{
|
|
return Settings.Instance;
|
|
}
|
|
}
|
|
|
|
public bool IsDebugPanelVisible
|
|
{
|
|
get
|
|
{
|
|
return _debugPanelService.IsVisible;
|
|
}
|
|
}
|
|
|
|
public bool IsTriggerEnabled
|
|
{
|
|
get
|
|
{
|
|
return _debugTrigger.IsEnabled;
|
|
}
|
|
set
|
|
{
|
|
_debugTrigger.IsEnabled = value;
|
|
}
|
|
}
|
|
|
|
public bool IsProfilerDocked
|
|
{
|
|
get
|
|
{
|
|
return Service.PinnedUI.IsProfilerPinned;
|
|
}
|
|
set
|
|
{
|
|
Service.PinnedUI.IsProfilerPinned = value;
|
|
}
|
|
}
|
|
|
|
public IDockConsoleService DockConsole
|
|
{
|
|
get
|
|
{
|
|
return Service.DockConsole;
|
|
}
|
|
}
|
|
|
|
public event VisibilityChangedDelegate PanelVisibilityChanged;
|
|
|
|
public SRDebugService()
|
|
{
|
|
SRServiceManager.RegisterService<IDebugService>(this);
|
|
SRServiceManager.GetService<IProfilerService>();
|
|
_debugTrigger = SRServiceManager.GetService<IDebugTriggerService>();
|
|
_debugPanelService = SRServiceManager.GetService<IDebugPanelService>();
|
|
_debugPanelService.VisibilityChanged += DebugPanelServiceOnVisibilityChanged;
|
|
_debugTrigger.IsEnabled = Settings.EnableTrigger == Settings.TriggerEnableModes.Enabled || (Settings.EnableTrigger == Settings.TriggerEnableModes.MobileOnly && Application.isMobilePlatform);
|
|
_debugTrigger.Position = Settings.TriggerPosition;
|
|
if (Settings.EnableKeyboardShortcuts)
|
|
{
|
|
SRServiceManager.GetService<KeyboardShortcutListenerService>();
|
|
}
|
|
_entryCodeEnabled = Settings.Instance.RequireCode && Settings.Instance.EntryCode.Count == 4;
|
|
if (Settings.Instance.RequireCode && !_entryCodeEnabled)
|
|
{
|
|
Debug.LogError("[SRDebugger] RequireCode is enabled, but pin is not 4 digits");
|
|
}
|
|
Transform transform = Hierarchy.Get("SRDebugger");
|
|
if ((bool)transform)
|
|
{
|
|
UnityEngine.Object.DontDestroyOnLoad(transform.gameObject);
|
|
}
|
|
}
|
|
|
|
public void ShowDebugPanel(bool requireEntryCode = true)
|
|
{
|
|
if (requireEntryCode && _entryCodeEnabled && !_hasAuthorised)
|
|
{
|
|
PromptEntryCode();
|
|
}
|
|
else
|
|
{
|
|
_debugPanelService.IsVisible = true;
|
|
}
|
|
}
|
|
|
|
public void ShowDebugPanel(DefaultTabs tab, bool requireEntryCode = true)
|
|
{
|
|
if (requireEntryCode && _entryCodeEnabled && !_hasAuthorised)
|
|
{
|
|
_queuedTab = tab;
|
|
PromptEntryCode();
|
|
}
|
|
else
|
|
{
|
|
_debugPanelService.IsVisible = true;
|
|
_debugPanelService.OpenTab(tab);
|
|
}
|
|
}
|
|
|
|
public void HideDebugPanel()
|
|
{
|
|
_debugPanelService.IsVisible = false;
|
|
}
|
|
|
|
public void DestroyDebugPanel()
|
|
{
|
|
_debugPanelService.IsVisible = false;
|
|
_debugPanelService.Unload();
|
|
}
|
|
|
|
public void ShowBugReportSheet(ActionCompleteCallback onComplete = null, bool takeScreenshot = true, string descriptionContent = null)
|
|
{
|
|
BugReportPopoverService service = SRServiceManager.GetService<BugReportPopoverService>();
|
|
if (service.IsShowingPopover)
|
|
{
|
|
return;
|
|
}
|
|
service.ShowBugReporter(delegate(bool succeed, string message)
|
|
{
|
|
if (onComplete != null)
|
|
{
|
|
onComplete(succeed);
|
|
}
|
|
}, takeScreenshot, descriptionContent);
|
|
}
|
|
|
|
private void DebugPanelServiceOnVisibilityChanged(IDebugPanelService debugPanelService, bool b)
|
|
{
|
|
if (this.PanelVisibilityChanged == null)
|
|
{
|
|
return;
|
|
}
|
|
try
|
|
{
|
|
this.PanelVisibilityChanged(b);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Debug.LogError("[SRDebugger] Event target threw exception (IDebugService.PanelVisiblityChanged)");
|
|
Debug.LogException(exception);
|
|
}
|
|
}
|
|
|
|
private void PromptEntryCode()
|
|
{
|
|
SRServiceManager.GetService<IPinEntryService>().ShowPinEntry(Settings.Instance.EntryCode, SRDebugStrings.Current.PinEntryPrompt, delegate(bool entered)
|
|
{
|
|
if (entered)
|
|
{
|
|
if (!Settings.Instance.RequireEntryCodeEveryTime)
|
|
{
|
|
_hasAuthorised = true;
|
|
}
|
|
if (_queuedTab.HasValue)
|
|
{
|
|
DefaultTabs value = _queuedTab.Value;
|
|
_queuedTab = null;
|
|
ShowDebugPanel(value, false);
|
|
}
|
|
else
|
|
{
|
|
ShowDebugPanel(false);
|
|
}
|
|
}
|
|
_queuedTab = null;
|
|
});
|
|
}
|
|
}
|
|
}
|