Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/SRDebugger/Services/Implementation/SRDebugService.cs
2026-02-21 16:45:37 +08:00

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