com.wallstop-studios.unity-helpers 2.0.0-rc56 → 2.0.0-rc58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.config/dotnet-tools.json +9 -9
- package/.editorconfig +184 -184
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +66 -66
- package/.pre-commit-config.yaml +21 -21
- package/Editor/AnimationCopier.cs +181 -181
- package/Editor/AnimationCopier.cs.meta +2 -2
- package/Editor/AnimationCreator.cs +253 -253
- package/Editor/AnimationCreator.cs.meta +11 -11
- package/Editor/AnimationEventEditor.cs +887 -887
- package/Editor/AnimatorControllerCopier.cs +162 -162
- package/Editor/AnimatorControllerCopier.cs.meta +2 -2
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
- package/Editor/CustomEditors.meta +2 -2
- package/Editor/FitTextureSizeWizard.cs +147 -147
- package/Editor/FitTextureSizeWizard.cs.meta +2 -2
- package/Editor/PrefabCheckWizard.cs +170 -170
- package/Editor/PrefabCheckWizard.cs.meta +11 -11
- package/Editor/SpriteSettingsApplier.cs +272 -272
- package/Editor/SpriteSettingsApplier.cs.meta +2 -2
- package/Editor/StringInListeDrawer.cs +56 -56
- package/Editor/TextureResizerWizard.cs +181 -181
- package/Editor/TextureResizerWizard.cs.meta +2 -2
- package/Editor/TextureSettingsApplier.cs +178 -178
- package/Editor/TextureSettingsApplier.cs.meta +2 -2
- package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
- package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
- package/Editor/Utils/EditorUtilities.cs +22 -22
- package/Editor/Utils/EditorUtilities.cs.meta +11 -11
- package/Editor/Utils.meta +8 -8
- package/Editor/WShowIfPropertyDrawer.cs +63 -63
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
- package/LICENSE +21 -21
- package/LICENSE.md +6 -6
- package/LICENSE.meta +7 -7
- package/README.md +177 -177
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
- package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
- package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
- package/Runtime/Binaries.meta +8 -8
- package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
- package/Runtime/Core/Attributes/ChildComponentAttribute.cs +209 -209
- package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
- package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
- package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
- package/Runtime/Core/Attributes/ParentComponent.cs +185 -185
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +117 -117
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes/WShowIfAttribute.cs +16 -16
- package/Runtime/Core/Attributes.meta +8 -8
- package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
- package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
- package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
- package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
- package/Runtime/Core/DataStructure/Circle.cs +50 -50
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +153 -153
- package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
- package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/KDTree.cs +292 -292
- package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/QuadTree.cs +287 -287
- package/Runtime/Core/DataStructure/RTree.cs +346 -346
- package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
- package/Runtime/Core/DataStructure/TimedCache.cs +66 -66
- package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
- package/Runtime/Core/Extension/AsyncOperationExtensions.cs +110 -108
- package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
- package/Runtime/Core/Extension/ColorExtensions.cs +629 -629
- package/Runtime/Core/Extension/DictionaryExtensions.cs +279 -279
- package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
- package/Runtime/Core/Extension/EnumExtensions.cs +37 -37
- package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
- package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
- package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
- package/Runtime/Core/Extension/IListExtensions.cs +106 -106
- package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
- package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
- package/Runtime/Core/Extension/SerializedPropertyExtensions.cs +157 -157
- package/Runtime/Core/Extension/StringExtensions.cs +151 -151
- package/Runtime/Core/Extension/UnityExtensions.cs +1608 -1608
- package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
- package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
- package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
- package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
- package/Runtime/Core/Helper/Enumerables.cs +17 -17
- package/Runtime/Core/Helper/FormattingHelpers.cs +32 -32
- package/Runtime/Core/Helper/Geometry.cs +43 -43
- package/Runtime/Core/Helper/Helpers.cs +722 -722
- package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
- package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
- package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
- package/Runtime/Core/Helper/Objects.cs +769 -769
- package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
- package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
- package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs +189 -189
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials.meta +2 -2
- package/Runtime/Core/Helper/ReflectionHelpers.cs +452 -452
- package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/SceneHelper.cs +209 -213
- package/Runtime/Core/Helper/SpriteHelpers.cs +41 -41
- package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/StringInList.cs +31 -31
- package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
- package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +82 -80
- package/Runtime/Core/Helper/WallMath.cs +166 -166
- package/Runtime/Core/Math/Line.cs +55 -55
- package/Runtime/Core/Math/Parabola.cs +47 -47
- package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
- package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
- package/Runtime/Core/Math/Range.cs +92 -92
- package/Runtime/Core/Math/XXHash.cs +310 -310
- package/Runtime/Core/Math/XXHash.cs.meta +11 -11
- package/Runtime/Core/Model/Direction.cs +43 -43
- package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
- package/Runtime/Core/OneOf/None.cs +4 -4
- package/Runtime/Core/Random/AbstractRandom.cs +585 -585
- package/Runtime/Core/Random/DotNetRandom.cs +54 -54
- package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
- package/Runtime/Core/Random/IRandom.cs +161 -161
- package/Runtime/Core/Random/LinearCongruentialGenerator.cs +49 -49
- package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
- package/Runtime/Core/Random/PRNG.cs +7 -7
- package/Runtime/Core/Random/PRNG.cs.meta +2 -2
- package/Runtime/Core/Random/PcgRandom.cs +149 -149
- package/Runtime/Core/Random/PerlinNoise.cs +369 -369
- package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
- package/Runtime/Core/Random/RandomState.cs +131 -131
- package/Runtime/Core/Random/RandomUtilities.cs +26 -26
- package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
- package/Runtime/Core/Random/RomuDuo.cs +116 -116
- package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
- package/Runtime/Core/Random/SplitMix64.cs +94 -94
- package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
- package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
- package/Runtime/Core/Random/SystemRandom.cs +162 -162
- package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
- package/Runtime/Core/Random/UnityRandom.cs +57 -57
- package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
- package/Runtime/Core/Random/WyRandom.cs +121 -121
- package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
- package/Runtime/Core/Random/XorShiftRandom.cs +52 -52
- package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
- package/Runtime/Core/Random/XorShiroRandom.cs +119 -119
- package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
- package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
- package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +37 -37
- package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +218 -218
- package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +28 -28
- package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
- package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
- package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
- package/Runtime/Core/Serialization/Serializer.cs +195 -195
- package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +113 -113
- package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
- package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
- package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
- package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
- package/Runtime/UI/LayeredImage.cs +364 -364
- package/Runtime/UI/LayeredImage.cs.meta +2 -2
- package/Runtime/UI.meta +2 -2
- package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
- package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
- package/Runtime/Utils/Buffers.cs +33 -33
- package/Runtime/Utils/CenterPointOffset.cs +30 -30
- package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
- package/Runtime/Utils/CircleLineRenderer.cs +134 -134
- package/Runtime/Utils/CoroutineHandler.cs +4 -4
- package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
- package/Runtime/Utils/DeferredDisposalResult.cs +23 -23
- package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
- package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
- package/Runtime/Utils/Oscillator.cs +27 -27
- package/Runtime/Utils/RuntimeSingleton.cs +69 -69
- package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
- package/Runtime/Utils/SetTextureImportData.cs +69 -69
- package/Runtime/Utils/SpriteRendererMetadata.cs +374 -374
- package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
- package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
- package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
- package/Runtime/Utils/TextureScale.cs +179 -179
- package/Runtime/Utils/TextureScale.cs.meta +2 -2
- package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
- package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
- package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
- package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs +34 -34
- package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs.meta +2 -2
- package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +40 -40
- package/Tests/Runtime/Components.meta +2 -2
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures.meta +8 -8
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/EnumExtensionTests.cs +128 -128
- package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/IListExtensionTests.cs +104 -104
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
- package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions.meta +2 -2
- package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
- package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/FormattingHelperTests.cs +129 -129
- package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
- package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/ReflectionHelperTests.cs +536 -536
- package/Tests/Runtime/Helper/SceneHelperTests.cs +94 -94
- package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
- package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
- package/Tests/Runtime/Helper.meta +2 -2
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs +157 -157
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +61 -61
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/Performance.meta +8 -8
- package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
- package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
- package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
- package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
- package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
- package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
- package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
- package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
- package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random.meta +8 -8
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
- package/Tests/Runtime/Serialization.meta +2 -2
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
- package/Tests/Runtime/Utils.meta +2 -2
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
- package/Tests/Runtime.meta +8 -8
- package/package.json +38 -38
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
#if !ENABLE_UBERLOGGING && (DEVELOPMENT_BUILD || DEBUG || UNITY_EDITOR)
|
|
2
|
-
#define ENABLE_UBERLOGGING
|
|
3
|
-
#endif
|
|
4
|
-
|
|
5
|
-
namespace UnityHelpers.Core.Extension
|
|
6
|
-
{
|
|
7
|
-
using System;
|
|
8
|
-
using System.Collections.Generic;
|
|
9
|
-
using System.Reflection;
|
|
10
|
-
using System.Runtime.CompilerServices;
|
|
11
|
-
using System.Threading;
|
|
12
|
-
using JetBrains.Annotations;
|
|
13
|
-
using UnityEngine;
|
|
14
|
-
using Utils;
|
|
15
|
-
using Debug = UnityEngine.Debug;
|
|
16
|
-
using Object = UnityEngine.Object;
|
|
17
|
-
|
|
18
|
-
public static class LoggingExtensions
|
|
19
|
-
{
|
|
20
|
-
private static readonly Thread UnityMainThread;
|
|
21
|
-
private const int LogsPerCacheClean = 5;
|
|
22
|
-
|
|
23
|
-
private static bool LoggingEnabled = true;
|
|
24
|
-
private static long _cacheAccessCount;
|
|
25
|
-
|
|
26
|
-
private static readonly HashSet<Object> Disabled = new();
|
|
27
|
-
private static readonly Dictionary<Type, FieldInfo[]> FieldCache = new();
|
|
28
|
-
private static readonly Dictionary<Type, PropertyInfo[]> PropertyCache = new();
|
|
29
|
-
|
|
30
|
-
static LoggingExtensions()
|
|
31
|
-
{
|
|
32
|
-
#if ENABLE_UBERLOGGING
|
|
33
|
-
/*
|
|
34
|
-
Unity throws exceptions if you try to log on something that isn't the main thread.
|
|
35
|
-
Sometimes, it's nice to log in async Tasks. Assume that the first initialization of
|
|
36
|
-
this class will be done by the Unity main thread, and then check every time we log.
|
|
37
|
-
If the logging thread is not the unity main thread, then do nothing
|
|
38
|
-
(instead of throwing...)
|
|
39
|
-
*/
|
|
40
|
-
UnityMainThread = Thread.CurrentThread;
|
|
41
|
-
#endif
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
public static void GlobalEnableLogging(this Object component)
|
|
45
|
-
{
|
|
46
|
-
LoggingEnabled = true;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public static void GlobalDisableLogging(this Object component)
|
|
50
|
-
{
|
|
51
|
-
LoggingEnabled = false;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public static void EnableLogging(this Object component)
|
|
55
|
-
{
|
|
56
|
-
Disabled.Remove(component);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public static void DisableLogging(this Object component)
|
|
60
|
-
{
|
|
61
|
-
Disabled.Add(component);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
public static string GenericToString(this Object component)
|
|
65
|
-
{
|
|
66
|
-
if (component == null)
|
|
67
|
-
{
|
|
68
|
-
return "null";
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
Dictionary<string, object> structure = new();
|
|
72
|
-
Type type = component.GetType();
|
|
73
|
-
FieldInfo[] fields = FieldCache.GetOrAdd(
|
|
74
|
-
type,
|
|
75
|
-
inType => inType.GetFields(BindingFlags.Public | BindingFlags.Instance)
|
|
76
|
-
);
|
|
77
|
-
PropertyInfo[] properties = PropertyCache.GetOrAdd(
|
|
78
|
-
type,
|
|
79
|
-
inType => inType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
|
80
|
-
);
|
|
81
|
-
foreach (FieldInfo field in fields)
|
|
82
|
-
{
|
|
83
|
-
structure[field.Name] = ValueFormat(field.GetValue(component));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
foreach (PropertyInfo property in properties)
|
|
87
|
-
{
|
|
88
|
-
structure[property.Name] = ValueFormat(property.GetValue(component));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return structure.ToJson();
|
|
92
|
-
|
|
93
|
-
object ValueFormat(object value)
|
|
94
|
-
{
|
|
95
|
-
if (value is Object obj)
|
|
96
|
-
{
|
|
97
|
-
return obj != null ? obj.name : null;
|
|
98
|
-
}
|
|
99
|
-
return value?.ToString();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
[StringFormatMethod("message")]
|
|
104
|
-
public static void Log(this Object component, string message, params object[] args)
|
|
105
|
-
{
|
|
106
|
-
#if ENABLE_UBERLOGGING
|
|
107
|
-
LogDebug(component, message, args);
|
|
108
|
-
#endif
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
[StringFormatMethod("message")]
|
|
112
|
-
public static void LogMethod(this Object component, [CallerMemberName] string caller = "")
|
|
113
|
-
{
|
|
114
|
-
#if ENABLE_UBERLOGGING
|
|
115
|
-
LogDebug(component, caller);
|
|
116
|
-
#endif
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
[StringFormatMethod("message")]
|
|
120
|
-
public static void LogDebug(this Object component, string message, params object[] args)
|
|
121
|
-
{
|
|
122
|
-
#if ENABLE_UBERLOGGING
|
|
123
|
-
LogDebug(component, message, null, args);
|
|
124
|
-
#endif
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
[StringFormatMethod("message")]
|
|
128
|
-
public static void LogWarn(this Object component, string message, params object[] args)
|
|
129
|
-
{
|
|
130
|
-
#if ENABLE_UBERLOGGING
|
|
131
|
-
LogWarn(component, message, null, args);
|
|
132
|
-
#endif
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
[StringFormatMethod("message")]
|
|
136
|
-
public static void LogError(this Object component, string message, params object[] args)
|
|
137
|
-
{
|
|
138
|
-
#if ENABLE_UBERLOGGING
|
|
139
|
-
LogError(component, message, null, args);
|
|
140
|
-
#endif
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
[StringFormatMethod("message")]
|
|
144
|
-
public static void Log(
|
|
145
|
-
this Object component,
|
|
146
|
-
string message,
|
|
147
|
-
Exception e,
|
|
148
|
-
params object[] args
|
|
149
|
-
)
|
|
150
|
-
{
|
|
151
|
-
#if ENABLE_UBERLOGGING
|
|
152
|
-
LogDebug(component, message, e, args);
|
|
153
|
-
#endif
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
[StringFormatMethod("message")]
|
|
157
|
-
public static void LogDebug(
|
|
158
|
-
this Object component,
|
|
159
|
-
string message,
|
|
160
|
-
Exception e,
|
|
161
|
-
params object[] args
|
|
162
|
-
)
|
|
163
|
-
{
|
|
164
|
-
#if ENABLE_UBERLOGGING
|
|
165
|
-
if (LoggingAllowed(component))
|
|
166
|
-
{
|
|
167
|
-
Debug.Log(
|
|
168
|
-
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
169
|
-
component
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
#endif
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
[StringFormatMethod("message")]
|
|
176
|
-
public static void LogWarn(
|
|
177
|
-
this Object component,
|
|
178
|
-
string message,
|
|
179
|
-
Exception e,
|
|
180
|
-
params object[] args
|
|
181
|
-
)
|
|
182
|
-
{
|
|
183
|
-
#if ENABLE_UBERLOGGING
|
|
184
|
-
if (LoggingAllowed(component))
|
|
185
|
-
{
|
|
186
|
-
Debug.LogWarning(
|
|
187
|
-
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
188
|
-
component
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
#endif
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
[StringFormatMethod("message")]
|
|
195
|
-
public static void LogError(
|
|
196
|
-
this Object component,
|
|
197
|
-
string message,
|
|
198
|
-
Exception e,
|
|
199
|
-
params object[] args
|
|
200
|
-
)
|
|
201
|
-
{
|
|
202
|
-
#if ENABLE_UBERLOGGING
|
|
203
|
-
if (LoggingAllowed(component))
|
|
204
|
-
{
|
|
205
|
-
Debug.LogError(
|
|
206
|
-
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
207
|
-
component
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
#endif
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
private static bool LoggingAllowed(Object component)
|
|
214
|
-
{
|
|
215
|
-
if (Interlocked.Increment(ref _cacheAccessCount) % LogsPerCacheClean == 0)
|
|
216
|
-
{
|
|
217
|
-
List<Object> buffer = Buffers<Object>.List;
|
|
218
|
-
buffer.Clear();
|
|
219
|
-
buffer.AddRange(Disabled);
|
|
220
|
-
buffer.RemoveAll(element => element != null);
|
|
221
|
-
if (0 < buffer.Count)
|
|
222
|
-
{
|
|
223
|
-
Disabled.ExceptWith(buffer);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return LoggingEnabled
|
|
228
|
-
&& Equals(Thread.CurrentThread, UnityMainThread)
|
|
229
|
-
&& !Disabled.Contains(component);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
private static string Wrap(Object component, string message, Exception e)
|
|
233
|
-
{
|
|
234
|
-
#if ENABLE_UBERLOGGING
|
|
235
|
-
float now = Time.time;
|
|
236
|
-
string componentType;
|
|
237
|
-
string gameObjectName;
|
|
238
|
-
if (component != null)
|
|
239
|
-
{
|
|
240
|
-
componentType = component.GetType().Name;
|
|
241
|
-
gameObjectName = component.name;
|
|
242
|
-
}
|
|
243
|
-
else
|
|
244
|
-
{
|
|
245
|
-
componentType = "NO_TYPE";
|
|
246
|
-
gameObjectName = "NO_NAME";
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return e != null
|
|
250
|
-
? $"{now}|{gameObjectName}[{componentType}]|{message}\n {e}"
|
|
251
|
-
: $"{now}|{gameObjectName}[{componentType}]|{message}";
|
|
252
|
-
|
|
253
|
-
#else
|
|
254
|
-
return string.Empty;
|
|
255
|
-
#endif
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
1
|
+
#if !ENABLE_UBERLOGGING && (DEVELOPMENT_BUILD || DEBUG || UNITY_EDITOR)
|
|
2
|
+
#define ENABLE_UBERLOGGING
|
|
3
|
+
#endif
|
|
4
|
+
|
|
5
|
+
namespace UnityHelpers.Core.Extension
|
|
6
|
+
{
|
|
7
|
+
using System;
|
|
8
|
+
using System.Collections.Generic;
|
|
9
|
+
using System.Reflection;
|
|
10
|
+
using System.Runtime.CompilerServices;
|
|
11
|
+
using System.Threading;
|
|
12
|
+
using JetBrains.Annotations;
|
|
13
|
+
using UnityEngine;
|
|
14
|
+
using Utils;
|
|
15
|
+
using Debug = UnityEngine.Debug;
|
|
16
|
+
using Object = UnityEngine.Object;
|
|
17
|
+
|
|
18
|
+
public static class LoggingExtensions
|
|
19
|
+
{
|
|
20
|
+
private static readonly Thread UnityMainThread;
|
|
21
|
+
private const int LogsPerCacheClean = 5;
|
|
22
|
+
|
|
23
|
+
private static bool LoggingEnabled = true;
|
|
24
|
+
private static long _cacheAccessCount;
|
|
25
|
+
|
|
26
|
+
private static readonly HashSet<Object> Disabled = new();
|
|
27
|
+
private static readonly Dictionary<Type, FieldInfo[]> FieldCache = new();
|
|
28
|
+
private static readonly Dictionary<Type, PropertyInfo[]> PropertyCache = new();
|
|
29
|
+
|
|
30
|
+
static LoggingExtensions()
|
|
31
|
+
{
|
|
32
|
+
#if ENABLE_UBERLOGGING
|
|
33
|
+
/*
|
|
34
|
+
Unity throws exceptions if you try to log on something that isn't the main thread.
|
|
35
|
+
Sometimes, it's nice to log in async Tasks. Assume that the first initialization of
|
|
36
|
+
this class will be done by the Unity main thread, and then check every time we log.
|
|
37
|
+
If the logging thread is not the unity main thread, then do nothing
|
|
38
|
+
(instead of throwing...)
|
|
39
|
+
*/
|
|
40
|
+
UnityMainThread = Thread.CurrentThread;
|
|
41
|
+
#endif
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public static void GlobalEnableLogging(this Object component)
|
|
45
|
+
{
|
|
46
|
+
LoggingEnabled = true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public static void GlobalDisableLogging(this Object component)
|
|
50
|
+
{
|
|
51
|
+
LoggingEnabled = false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public static void EnableLogging(this Object component)
|
|
55
|
+
{
|
|
56
|
+
Disabled.Remove(component);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public static void DisableLogging(this Object component)
|
|
60
|
+
{
|
|
61
|
+
Disabled.Add(component);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public static string GenericToString(this Object component)
|
|
65
|
+
{
|
|
66
|
+
if (component == null)
|
|
67
|
+
{
|
|
68
|
+
return "null";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Dictionary<string, object> structure = new();
|
|
72
|
+
Type type = component.GetType();
|
|
73
|
+
FieldInfo[] fields = FieldCache.GetOrAdd(
|
|
74
|
+
type,
|
|
75
|
+
inType => inType.GetFields(BindingFlags.Public | BindingFlags.Instance)
|
|
76
|
+
);
|
|
77
|
+
PropertyInfo[] properties = PropertyCache.GetOrAdd(
|
|
78
|
+
type,
|
|
79
|
+
inType => inType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
|
80
|
+
);
|
|
81
|
+
foreach (FieldInfo field in fields)
|
|
82
|
+
{
|
|
83
|
+
structure[field.Name] = ValueFormat(field.GetValue(component));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
foreach (PropertyInfo property in properties)
|
|
87
|
+
{
|
|
88
|
+
structure[property.Name] = ValueFormat(property.GetValue(component));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return structure.ToJson();
|
|
92
|
+
|
|
93
|
+
object ValueFormat(object value)
|
|
94
|
+
{
|
|
95
|
+
if (value is Object obj)
|
|
96
|
+
{
|
|
97
|
+
return obj != null ? obj.name : null;
|
|
98
|
+
}
|
|
99
|
+
return value?.ToString();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
[StringFormatMethod("message")]
|
|
104
|
+
public static void Log(this Object component, string message, params object[] args)
|
|
105
|
+
{
|
|
106
|
+
#if ENABLE_UBERLOGGING
|
|
107
|
+
LogDebug(component, message, args);
|
|
108
|
+
#endif
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
[StringFormatMethod("message")]
|
|
112
|
+
public static void LogMethod(this Object component, [CallerMemberName] string caller = "")
|
|
113
|
+
{
|
|
114
|
+
#if ENABLE_UBERLOGGING
|
|
115
|
+
LogDebug(component, caller);
|
|
116
|
+
#endif
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[StringFormatMethod("message")]
|
|
120
|
+
public static void LogDebug(this Object component, string message, params object[] args)
|
|
121
|
+
{
|
|
122
|
+
#if ENABLE_UBERLOGGING
|
|
123
|
+
LogDebug(component, message, null, args);
|
|
124
|
+
#endif
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
[StringFormatMethod("message")]
|
|
128
|
+
public static void LogWarn(this Object component, string message, params object[] args)
|
|
129
|
+
{
|
|
130
|
+
#if ENABLE_UBERLOGGING
|
|
131
|
+
LogWarn(component, message, null, args);
|
|
132
|
+
#endif
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
[StringFormatMethod("message")]
|
|
136
|
+
public static void LogError(this Object component, string message, params object[] args)
|
|
137
|
+
{
|
|
138
|
+
#if ENABLE_UBERLOGGING
|
|
139
|
+
LogError(component, message, null, args);
|
|
140
|
+
#endif
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
[StringFormatMethod("message")]
|
|
144
|
+
public static void Log(
|
|
145
|
+
this Object component,
|
|
146
|
+
string message,
|
|
147
|
+
Exception e,
|
|
148
|
+
params object[] args
|
|
149
|
+
)
|
|
150
|
+
{
|
|
151
|
+
#if ENABLE_UBERLOGGING
|
|
152
|
+
LogDebug(component, message, e, args);
|
|
153
|
+
#endif
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
[StringFormatMethod("message")]
|
|
157
|
+
public static void LogDebug(
|
|
158
|
+
this Object component,
|
|
159
|
+
string message,
|
|
160
|
+
Exception e,
|
|
161
|
+
params object[] args
|
|
162
|
+
)
|
|
163
|
+
{
|
|
164
|
+
#if ENABLE_UBERLOGGING
|
|
165
|
+
if (LoggingAllowed(component))
|
|
166
|
+
{
|
|
167
|
+
Debug.Log(
|
|
168
|
+
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
169
|
+
component
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
#endif
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
[StringFormatMethod("message")]
|
|
176
|
+
public static void LogWarn(
|
|
177
|
+
this Object component,
|
|
178
|
+
string message,
|
|
179
|
+
Exception e,
|
|
180
|
+
params object[] args
|
|
181
|
+
)
|
|
182
|
+
{
|
|
183
|
+
#if ENABLE_UBERLOGGING
|
|
184
|
+
if (LoggingAllowed(component))
|
|
185
|
+
{
|
|
186
|
+
Debug.LogWarning(
|
|
187
|
+
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
188
|
+
component
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
#endif
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
[StringFormatMethod("message")]
|
|
195
|
+
public static void LogError(
|
|
196
|
+
this Object component,
|
|
197
|
+
string message,
|
|
198
|
+
Exception e,
|
|
199
|
+
params object[] args
|
|
200
|
+
)
|
|
201
|
+
{
|
|
202
|
+
#if ENABLE_UBERLOGGING
|
|
203
|
+
if (LoggingAllowed(component))
|
|
204
|
+
{
|
|
205
|
+
Debug.LogError(
|
|
206
|
+
Wrap(component, args.Length != 0 ? string.Format(message, args) : message, e),
|
|
207
|
+
component
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
#endif
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private static bool LoggingAllowed(Object component)
|
|
214
|
+
{
|
|
215
|
+
if (Interlocked.Increment(ref _cacheAccessCount) % LogsPerCacheClean == 0)
|
|
216
|
+
{
|
|
217
|
+
List<Object> buffer = Buffers<Object>.List;
|
|
218
|
+
buffer.Clear();
|
|
219
|
+
buffer.AddRange(Disabled);
|
|
220
|
+
buffer.RemoveAll(element => element != null);
|
|
221
|
+
if (0 < buffer.Count)
|
|
222
|
+
{
|
|
223
|
+
Disabled.ExceptWith(buffer);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return LoggingEnabled
|
|
228
|
+
&& Equals(Thread.CurrentThread, UnityMainThread)
|
|
229
|
+
&& !Disabled.Contains(component);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private static string Wrap(Object component, string message, Exception e)
|
|
233
|
+
{
|
|
234
|
+
#if ENABLE_UBERLOGGING
|
|
235
|
+
float now = Time.time;
|
|
236
|
+
string componentType;
|
|
237
|
+
string gameObjectName;
|
|
238
|
+
if (component != null)
|
|
239
|
+
{
|
|
240
|
+
componentType = component.GetType().Name;
|
|
241
|
+
gameObjectName = component.name;
|
|
242
|
+
}
|
|
243
|
+
else
|
|
244
|
+
{
|
|
245
|
+
componentType = "NO_TYPE";
|
|
246
|
+
gameObjectName = "NO_NAME";
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return e != null
|
|
250
|
+
? $"{now}|{gameObjectName}[{componentType}]|{message}\n {e}"
|
|
251
|
+
: $"{now}|{gameObjectName}[{componentType}]|{message}";
|
|
252
|
+
|
|
253
|
+
#else
|
|
254
|
+
return string.Empty;
|
|
255
|
+
#endif
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|