| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace SRDebugger.Services
- {
- public interface IDebugService
- {
- /// <summary>
- /// Current settings being used by the debugger
- /// </summary>
- Settings Settings { get; }
- /// <summary>
- /// True if the debug panel is currently being shown
- /// </summary>
- bool IsDebugPanelVisible { get; }
- /// <summary>
- /// True if the trigger is currently enabled
- /// </summary>
- bool IsTriggerEnabled { get; set; }
- /// <summary>
- /// True if new errors cause the trigger to display an error notification.
- /// Note: <see cref="IsTriggerEnabled"/> must also be true for notification to display.
- /// </summary>
- bool IsTriggerErrorNotificationEnabled { get; set; }
- IDockConsoleService DockConsole { get; }
- /// <summary>
- /// Access the SRDebugger console current filter states.
- /// </summary>
- IConsoleFilterState ConsoleFilter { get; }
- bool IsProfilerDocked { get; set; }
- /// <summary>
- /// Add <paramref name="entry"/> to the system information tab. See <seealso cref="InfoEntry"/> for how to create
- /// an info instance.
- /// </summary>
- /// <param name="entry">The entry to be added.</param>
- /// <param name="category">The category the entry should be added to.</param>
- void AddSystemInfo(InfoEntry entry, string category = "Default");
- /// <summary>
- /// Show the debug panel
- /// </summary>
- /// <param name="requireEntryCode">
- /// If true and entry code is enabled in settings, the user will be prompted for a passcode
- /// before opening the panel.
- /// </param>
- void ShowDebugPanel(bool requireEntryCode = true);
- /// <summary>
- /// Show the debug panel and open a certain tab
- /// </summary>
- /// <param name="tab">Tab that will appear when the debug panel is opened</param>
- /// <param name="requireEntryCode">
- /// If true and entry code is enabled in settings, the user will be prompted for a passcode
- /// before opening the panel.
- /// </param>
- void ShowDebugPanel(DefaultTabs tab, bool requireEntryCode = true);
- /// <summary>
- /// Hide the debug panel
- /// </summary>
- void HideDebugPanel();
- /// <summary>
- /// Set the entry code required to open the debug panel.
- /// Entry code requirement will be enabled if it is not already.
- ///
- /// If the user has already entered the correct pin code, their authorization will be reset
- /// and they will be required to enter the new pin code next time they open the debug panel.
- ///
- /// Use <see cref="DisableEntryCode"/> to disable the entry code requirement.
- /// </summary>
- /// <param name="newCode">New entry code.</param>
- void SetEntryCode(EntryCode newCode);
- /// <summary>
- /// Disable the requirement for an entry code when opening the debug panel.
- /// Use <see cref="SetEntryCode"/> to enable entry code the requirement again.
- /// </summary>
- void DisableEntryCode();
- /// <summary>
- /// Hide the debug panel, then remove it from the scene to save memory.
- /// </summary>
- void DestroyDebugPanel();
- /// <summary>
- /// Add all an objects compatible properties and methods to the options panel.
- /// <remarks>NOTE: It is not recommended to use this on a MonoBehaviour, it should be used on a standard
- /// class made specifically for use as a settings object.</remarks>
- /// </summary>
- /// <param name="container">The object to add.</param>
- void AddOptionContainer(object container);
-
- /// <summary>
- /// Remove all properties and methods that the <paramref name="container"/> added to the options panel.
- /// </summary>
- /// <param name="container">The container to remove.</param>
- void RemoveOptionContainer(object container);
- /// <summary>
- /// Add an option to the options panel.
- /// </summary>
- void AddOption(OptionDefinition option);
- /// <summary>
- /// Remove an option from the options panel.
- /// </summary>
- /// <returns>True if option was successfully removed, otherwise false.</returns>
- bool RemoveOption(OptionDefinition option);
- /// <summary>
- /// Pin all options in a category.
- /// </summary>
- /// <param name="category"></param>
- void PinAllOptions(string category);
- /// <summary>
- /// Unpin all options in a category.
- /// </summary>
- /// <param name="category"></param>
- void UnpinAllOptions(string category);
- void PinOption(string name);
- void UnpinOption(string name);
- /// <summary>
- /// Clear all pinned options.
- /// </summary>
- void ClearPinnedOptions();
- /// <summary>
- /// Open a bug report sheet.
- /// </summary>
- /// <param name="onComplete">Callback to invoke once the bug report is completed or cancelled. Null to ignore.</param>
- /// <param name="takeScreenshot">
- /// Take a screenshot before opening the report sheet (otherwise a screenshot will be taken as
- /// the report is sent, if enabled in settings)
- /// </param>
- /// <param name="descriptionContent">Initial content of the bug report description</param>
- void ShowBugReportSheet(ActionCompleteCallback onComplete = null, bool takeScreenshot = true,
- string descriptionContent = null);
- /// <summary>
- /// Event invoked whenever the debug panel opens or closes
- /// </summary>
- event VisibilityChangedDelegate PanelVisibilityChanged;
- event PinnedUiCanvasCreated PinnedUiCanvasCreated;
- /// <summary>
- /// ADVANCED FEATURE. This will convert the debug panel to a world space object and return the RectTransform.
- /// This can be used to position the SRDebugger panel somewhere in your scene.
- /// This feature is for advanced users only who know what they are doing. Only limited support will be provided
- /// for this method.
- /// The debug panel will be made visible if it is not already.
- /// </summary>
- /// <returns>The debug panel RectTransform.</returns>
- RectTransform EnableWorldSpaceMode();
- /// <summary>
- /// Set a custom bug reporter handler.
- /// NOTE: This should be done on startup, ideally before the debug panel is opened.
- /// The visibility of the bug report tab will be determined when the debug panel opens so the bug reporter handler
- /// should be set before then.
- /// </summary>
- /// <param name="bugReporterHandler">Custom bug report handler.</param>
- void SetBugReporterHandler(IBugReporterHandler bugReporterHandler);
- }
- }
- namespace SRDebugger
- {
- public delegate void VisibilityChangedDelegate(bool isVisible);
- public delegate void ActionCompleteCallback(bool success);
- public delegate void PinnedUiCanvasCreated(RectTransform canvasTransform);
- public struct EntryCode : IReadOnlyList<int>
- {
- public readonly int Digit1;
- public readonly int Digit2;
- public readonly int Digit3;
- public readonly int Digit4;
- public EntryCode(int digit1, int digit2, int digit3, int digit4)
- {
- if (digit1 < 0 || digit1 > 9) throw new ArgumentException("Pin digit must be between 0 and 9", "digit1");
- if (digit2 < 0 || digit2 > 9) throw new ArgumentException("Pin digit must be between 0 and 9", "digit2");
- if (digit3 < 0 || digit3 > 9) throw new ArgumentException("Pin digit must be between 0 and 9", "digit3");
- if (digit4 < 0 || digit4 > 9) throw new ArgumentException("Pin digit must be between 0 and 9", "digit4");
- Digit1 = digit1;
- Digit2 = digit2;
- Digit3 = digit3;
- Digit4 = digit4;
- }
- public IEnumerator<int> GetEnumerator()
- {
- return new List<int> { Digit1, Digit2, Digit3, Digit4 }.GetEnumerator();
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- public int Count
- {
- get { return 4; }
- }
- public int this[int index]
- {
- get
- {
- switch (index)
- {
- case 0: return Digit1;
- case 1: return Digit2;
- case 2: return Digit3;
- case 3: return Digit4;
- default: throw new ArgumentOutOfRangeException("index");
- }
- }
- }
- }
- }
|