mirror of
https://github.com/Cardidi/ca2d-unity-toolkit.git
synced 2025-12-20 01:06:03 +08:00
Version 0.1.2
This commit is contained in:
parent
3e8f62f5cf
commit
bc3a8fbfa8
@ -1,18 +1,19 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Ca2d.Toolkit
|
||||
{
|
||||
public static class AotHelper
|
||||
{
|
||||
private static DateTime alwayasFalseSource = DateTime.UtcNow;
|
||||
private static readonly DateTime AlwaysFalseSource = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Utility to provide a must be false option for Ahead-of-time compiler.
|
||||
/// </summary>
|
||||
/// <returns>False</returns>
|
||||
public static bool AlwaysFalseProvider()
|
||||
public static bool False()
|
||||
{
|
||||
return alwayasFalseSource.Year < 0;
|
||||
return AlwaysFalseSource.Year < 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -20,7 +21,12 @@ namespace Ca2d.Toolkit
|
||||
/// </summary>
|
||||
public static void Ensure(Action call)
|
||||
{
|
||||
if (AlwaysFalseProvider()) call?.Invoke();
|
||||
if (False()) call?.Invoke();
|
||||
}
|
||||
|
||||
public static void Ensure<T>()
|
||||
{
|
||||
if (False()) typeof(T).GetTypeInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
#if ENABLE_LOGG
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ca2d.Toolkit
|
||||
{
|
||||
public enum LoggType
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>LogType used for Errors.</para>
|
||||
/// </summary>
|
||||
Error,
|
||||
/// <summary>
|
||||
/// <para>LogType used for Asserts. (These could also indicate an error inside Unity itself.)</para>
|
||||
/// </summary>
|
||||
Assert,
|
||||
/// <summary>
|
||||
/// <para>LogType used for Warnings.</para>
|
||||
/// </summary>
|
||||
Warning,
|
||||
/// <summary>
|
||||
/// <para>LogType used for regular log messages.</para>
|
||||
/// </summary>
|
||||
Log,
|
||||
/// <summary>
|
||||
/// <para>LogType used for Exceptions.</para>
|
||||
/// </summary>
|
||||
Exception,
|
||||
/// <summary>
|
||||
/// <para>LogType used for Developers on testing.</para>
|
||||
/// </summary>
|
||||
Debug
|
||||
}
|
||||
|
||||
public interface ILoggHandler : ILogHandler
|
||||
{
|
||||
public ILogHandler InnerLogHandler { get; }
|
||||
|
||||
public void LoggFormat(LoggType logType, Object context, string format, params object[] args);
|
||||
|
||||
public void SetLabel(string label);
|
||||
|
||||
public void ClearLabel();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfec301646cc46339921f4c1c9170412
|
||||
timeCreated: 1715271270
|
||||
@ -1,284 +0,0 @@
|
||||
#if ENABLE_LOGG
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Ca2d.Toolkit
|
||||
{
|
||||
/// <summary>
|
||||
/// Alternatives to the default Unity Logger.
|
||||
/// </summary>
|
||||
public struct Logg
|
||||
{
|
||||
#region BackendConfig
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Global
|
||||
public const string kDefaultLoggerLevelSplit = "::";
|
||||
|
||||
private static ILoggHandler _backend;
|
||||
|
||||
/// <summary>
|
||||
/// Which backend will be used for logger?
|
||||
/// </summary>
|
||||
public static ILoggHandler Backend
|
||||
{
|
||||
get => _backend;
|
||||
set => _backend = value ?? throw new NullReferenceException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logger level name spliter sign.
|
||||
/// </summary>
|
||||
public static string LoggerLevelSplit { get; set; } = kDefaultLoggerLevelSplit;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
private static readonly StringBuilder kStringBuilder = new();
|
||||
|
||||
private readonly bool m_useLabel;
|
||||
|
||||
private readonly string m_label;
|
||||
|
||||
/// <summary>
|
||||
/// Create a logger with first-level namespace
|
||||
/// </summary>
|
||||
/// <param name="ns">Namespace</param>
|
||||
public Logg(string ns)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(ns))
|
||||
{
|
||||
m_useLabel = false;
|
||||
m_label = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_useLabel = true;
|
||||
m_label = ns.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a copy of source logger.
|
||||
/// </summary>
|
||||
/// <param name="source">Source logger.</param>
|
||||
public Logg(Logg source)
|
||||
{
|
||||
if (source.m_useLabel)
|
||||
{
|
||||
m_useLabel = true;
|
||||
m_label = source.m_label;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_useLabel = false;
|
||||
m_label = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a nested logger with given namespace.
|
||||
/// </summary>
|
||||
/// <param name="source">Nest source.</param>
|
||||
/// <param name="ns">Namespace</param>
|
||||
public Logg(Logg source, string ns)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(ns))
|
||||
{
|
||||
if (source.m_useLabel)
|
||||
{
|
||||
m_useLabel = true;
|
||||
m_label = source.m_label;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_useLabel = false;
|
||||
m_label = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_useLabel = true;
|
||||
if (source.m_useLabel)
|
||||
{
|
||||
kStringBuilder.Clear();
|
||||
m_label = kStringBuilder.AppendJoin(LoggerLevelSplit, source.m_label, ns.Trim()).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_label = ns.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region EnvOverrider
|
||||
|
||||
private static bool _init = false;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[InitializeOnLoadMethod]
|
||||
private static void LoggInitEditor()
|
||||
{
|
||||
LoggInit();
|
||||
}
|
||||
#else
|
||||
[RuntimeInitializeOnLoadMethod]
|
||||
private static void RuntimeLoggInit()
|
||||
{
|
||||
LoggInit();
|
||||
}
|
||||
#endif
|
||||
|
||||
private static void LoggInit()
|
||||
{
|
||||
if (!_init)
|
||||
{
|
||||
var prevLogHandler = UnityEngine.Debug.unityLogger.logHandler;
|
||||
|
||||
if (prevLogHandler is ILoggHandler)
|
||||
{
|
||||
prevLogHandler.LogFormat(
|
||||
LogType.Warning,
|
||||
null,
|
||||
"Logg seems to be inited before initialize?");
|
||||
}
|
||||
else
|
||||
{
|
||||
var l = new LoggHandler(prevLogHandler);
|
||||
_backend = l;
|
||||
UnityEngine.Debug.unityLogger.logHandler = l;
|
||||
prevLogHandler.LogFormat(LogType.Log, null, "##### Debug.unityLogger was taken over by Logg #####");
|
||||
}
|
||||
|
||||
_init = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region LogMethods
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Format(LoggType type, Object context, string format, params object[] args)
|
||||
{
|
||||
if (_backend != null)
|
||||
{
|
||||
if (m_useLabel) _backend.SetLabel(m_label);
|
||||
_backend.LoggFormat(type, context, format, args);
|
||||
_backend.ClearLabel();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use fallback logger if Logg is not ready.
|
||||
UnityEngine.Debug.LogFormat((LogType) type, LogOption.NoStacktrace, context, format, args);
|
||||
}
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Debug(string content, Object context = null)
|
||||
{
|
||||
Format(LoggType.Debug, context, content);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Info(string content, Object context = null)
|
||||
{
|
||||
Format(LoggType.Log, context, content);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Warning(string content, Object context = null)
|
||||
{
|
||||
Format(LoggType.Warning, context, content);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Error(string content, Object context = null)
|
||||
{
|
||||
Format(LoggType.Error, context, content);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void Error(Exception err, Object context = null)
|
||||
{
|
||||
Format(LoggType.Exception, context, err.ToString());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Quick log API for <see cref="Logg"/>.
|
||||
/// </summary>
|
||||
public static class DebugLogg
|
||||
{
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Format(LoggType type, Object context, string format, params object[] args)
|
||||
{
|
||||
default(Logg).Format(type, context, format, args);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Debug(string content, Object context = null)
|
||||
{
|
||||
default(Logg).Debug(content, context);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Info(string content, Object context = null)
|
||||
{
|
||||
default(Logg).Info(content, context);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Warning(string content, Object context = null)
|
||||
{
|
||||
default(Logg).Warning(content, context);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Error(string content, Object context = null)
|
||||
{
|
||||
default(Logg).Error(content, context);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public static void Error(Exception err, Object context = null)
|
||||
{
|
||||
default(Logg).Error(err, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 59eb97c7769441599ea2569c2f5402b8
|
||||
timeCreated: 1715264700
|
||||
@ -1,104 +0,0 @@
|
||||
#if ENABLE_LOGG
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Ca2d.Toolkit
|
||||
{
|
||||
public class LoggHandler : ILoggHandler
|
||||
{
|
||||
private readonly ILogHandler m_innerHandle;
|
||||
|
||||
private readonly StringBuilder m_sb = new();
|
||||
|
||||
private bool m_useLabel = false;
|
||||
|
||||
private string m_labelText = default;
|
||||
|
||||
#region PassThrough
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void LogFormat(LogType logType, Object context, string format, params object[] args)
|
||||
{
|
||||
LoggFormat((LoggType) logType, context, format, args);
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void LogException(Exception exception, Object context)
|
||||
{
|
||||
LoggFormat(LoggType.Exception, context, exception.ToString());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void GenerateLabel(StringBuilder sb, LoggType type)
|
||||
{
|
||||
var logTypeText = type switch
|
||||
{
|
||||
LoggType.Assert => "ASSERT",
|
||||
LoggType.Exception => "EXCEPTION",
|
||||
LoggType.Error => "Error",
|
||||
LoggType.Warning => "Warning",
|
||||
LoggType.Log => "Info",
|
||||
_ => "Debug"
|
||||
};
|
||||
|
||||
if (m_useLabel)
|
||||
{
|
||||
sb.AppendFormat("[{0:yyyy-M-d HH:mm:ss}] {1} ({2}) : ", DateTime.Now, logTypeText, m_labelText);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("[{0:yyyy-M-d HH:mm:ss}] {1} : ", DateTime.Now, logTypeText);
|
||||
}
|
||||
}
|
||||
|
||||
[HideInCallstack]
|
||||
[DebuggerHidden]
|
||||
[DebuggerStepThrough]
|
||||
public void LoggFormat(LoggType logType, Object context, string format, params object[] args)
|
||||
{
|
||||
m_sb.Clear();
|
||||
|
||||
// Write label to the front
|
||||
GenerateLabel(m_sb, logType);
|
||||
|
||||
// Write format text after front
|
||||
m_sb.AppendFormat(format, args);
|
||||
|
||||
// Redirect Debug to Log.
|
||||
LogType finalType;
|
||||
if (logType == LoggType.Debug) finalType = LogType.Log;
|
||||
else finalType = (LogType) logType;
|
||||
|
||||
// Use inner handle to write.
|
||||
m_innerHandle.LogFormat(finalType, context, m_sb.ToString());
|
||||
}
|
||||
|
||||
public ILogHandler InnerLogHandler => m_innerHandle;
|
||||
|
||||
public void SetLabel(string label)
|
||||
{
|
||||
m_labelText = label;
|
||||
m_useLabel = label != null;
|
||||
}
|
||||
|
||||
public void ClearLabel()
|
||||
{
|
||||
m_labelText = null;
|
||||
m_useLabel = false;
|
||||
}
|
||||
|
||||
public LoggHandler(ILogHandler innerHandle)
|
||||
{
|
||||
m_innerHandle = innerHandle ?? throw new ArgumentNullException(nameof(innerHandle));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f543cfba5cf04258b3ab59b75849e7a9
|
||||
timeCreated: 1715271314
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "xyz.ca2didi.unity.toolkit",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.2",
|
||||
"displayName": "Ca2D Toolkit",
|
||||
"description": "Set of toolkits which can boost your develop experience and speed in Unity.",
|
||||
"unity": "2021.3",
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Cpackage_005Ctoolkit/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Cpackage_005Ctoolkit_005Cscripts/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Ctoolkit_005Ctoolkit_005Ceditor_005Cscripts/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Ctoolkit_005Ctoolkit_005Cruntime/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Ctoolkit_005Ctoolkit_005Cscripts/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Ctoolkit_005Ctoolkit/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=assets_005Ctoolkit/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
Loading…
x
Reference in New Issue
Block a user