This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/FishNet/Runtime/Managing/Logging/LevelLoggingConfiguration.cs

142 lines
4.7 KiB
C#
Raw Normal View History

2023-05-31 17:32:21 +02:00
using FishNet.Documenting;
using System;
using System.Runtime.CompilerServices;
using UnityEngine;
namespace FishNet.Managing.Logging
{
/// <summary>
/// Configuration ScriptableObject specifying which data to log. Used in conjuction with NetworkManager.
/// </summary>
[CreateAssetMenu(fileName = "New LevelLoggingConfiguration", menuName = "FishNet/Logging/Level Logging Configuration")]
public class LevelLoggingConfiguration : LoggingConfiguration
{
#region Serialized.
/// <summary>
/// Type of logging to use for development builds and editor.
/// </summary>
[Tooltip("Type of logging to use for development builds and editor.")]
[SerializeField]
private LoggingType _developmentLogging = LoggingType.Common;
/// <summary>
/// Type of logging to use for GUI builds.
/// </summary>
[Tooltip("Type of logging to use for GUI builds.")]
[SerializeField]
private LoggingType _guiLogging = LoggingType.Warning;
/// <summary>
/// Type of logging to use for headless builds.
/// </summary>
[Tooltip("Type of logging to use for headless builds.")]
[SerializeField]
private LoggingType _headlessLogging = LoggingType.Error;
#endregion
#region Private.
/// <summary>
/// True when initialized.
/// </summary>
private bool _initialized;
/// <summary>
/// Highest type which can be logged.
/// </summary>
private LoggingType _highestLoggingType = LoggingType.Off;
#endregion
[APIExclude]
public void LoggingConstructor(bool loggingEnabled, LoggingType development, LoggingType gui, LoggingType headless)
{
base.LoggingEnabled = loggingEnabled;
_developmentLogging = development;
_guiLogging = gui;
_headlessLogging = headless;
}
/// <summary>
/// Initializes script for use.
/// </summary>
/// <param name="manager"></param>
public override void InitializeOnce()
{
byte currentHighest = (byte)LoggingType.Off;
#if UNITY_SERVER //if headless.
currentHighest = Math.Max(currentHighest, (byte)_headlessLogging);
#endif
#if UNITY_EDITOR || DEVELOPMENT_BUILD //if editor or development.
currentHighest = Math.Max(currentHighest, (byte)_developmentLogging);
#endif
#if !UNITY_EDITOR && !UNITY_SERVER //if a build.
currentHighest = Math.Max(currentHighest, (byte)_guiLogging);
#endif
_highestLoggingType = (LoggingType)currentHighest;
_initialized = true;
}
/// <summary>
/// True if can log for loggingType.
/// </summary>
/// <param name="loggingType">Type of logging being filtered.</param>
/// <returns></returns>
public override bool CanLog(LoggingType loggingType)
{
if (!base.LoggingEnabled)
return false;
if (!_initialized)
{
#if UNITY_EDITOR || DEVELOPMENT_BUILD
if (Application.isPlaying)
Debug.LogError("CanLog called before being initialized.");
else
return true;
#endif
return false;
}
return ((byte)loggingType <= (byte)_highestLoggingType);
}
/// <summary>
/// Logs a common value if can log.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override void Log(string value)
{
if (CanLog(LoggingType.Common))
Debug.Log(value);
}
/// <summary>
/// Logs a warning value if can log.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override void LogWarning(string value)
{
if (CanLog(LoggingType.Warning))
Debug.LogWarning(value);
}
/// <summary>
/// Logs an error value if can log.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override void LogError(string value)
{
if (CanLog(LoggingType.Error))
Debug.LogError(value);
}
/// <summary>
/// Clones this logging configuration.
/// </summary>
/// <returns></returns>
public override LoggingConfiguration Clone()
{
LevelLoggingConfiguration copy = ScriptableObject.CreateInstance<LevelLoggingConfiguration>();
copy.LoggingConstructor(base.LoggingEnabled, _developmentLogging, _guiLogging, _headlessLogging);
return copy;
}
}
}