forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			142 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |