Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of HitboxWireframeVisualizer v1.0.0
HitboxWireframeVisualizer.dll
Decompiled a month ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("zabu")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("zabumod")] [assembly: AssemblyTitle("zabumod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace REPOJP.HitboxWireframeVisualizer { [BepInPlugin("REPOJP.HitboxWireframeVisualizer", "HitboxWireframeVisualizer", "1.0.0")] public sealed class HitboxWireframeVisualizerPlugin : BaseUnityPlugin { private enum Genre { Unknown, Player, RoomModule, Item, Enemy, Trace } private enum ShapeKind { Box, Sphere, Capsule, Ray } private struct RootInfo { public GameObject Root; public Genre Genre; public float DistanceSqr; } private struct SamplePoint { public Vector3 Position; public Color Color; } private struct Shape { public ShapeKind Kind; public GameObject OwnerRoot; public Genre Genre; public Vector3 Center; public Vector3 Size; public Quaternion Rotation; public float Radius; public float Height; public int CapsuleDirection; public Vector3 RayOrigin; public Vector3 RayDir; public float RayLength; public Color Color; public float DistanceSqr; public static Shape Box(GameObject root, Genre genre, Vector3 center, Vector3 size, Quaternion rot, Color color, float ds) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) Shape result = default(Shape); result.Kind = ShapeKind.Box; result.OwnerRoot = root; result.Genre = genre; result.Center = center; result.Size = size; result.Rotation = rot; result.Color = color; result.DistanceSqr = ds; return result; } public static Shape Sphere(GameObject root, Genre genre, Vector3 center, float radius, Color color, float ds) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) Shape result = default(Shape); result.Kind = ShapeKind.Sphere; result.OwnerRoot = root; result.Genre = genre; result.Center = center; result.Radius = radius; result.Color = color; result.DistanceSqr = ds; return result; } public static Shape Capsule(GameObject root, Genre genre, Vector3 center, float radius, float height, int dir, Quaternion rot, Color color, float ds) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) Shape result = default(Shape); result.Kind = ShapeKind.Capsule; result.OwnerRoot = root; result.Genre = genre; result.Center = center; result.Radius = radius; result.Height = height; result.CapsuleDirection = dir; result.Rotation = rot; result.Color = color; result.DistanceSqr = ds; return result; } public static Shape Ray(GameObject root, Genre genre, Vector3 origin, Vector3 dir, float length, Color color, float ds) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) Shape result = default(Shape); result.Kind = ShapeKind.Ray; result.OwnerRoot = root; result.Genre = genre; result.RayOrigin = origin; result.RayDir = dir; result.RayLength = length; result.Color = color; result.DistanceSqr = ds; return result; } public Bounds GetApproxBounds() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) if (Kind == ShapeKind.Box) { return new Bounds(Center, Size); } if (Kind == ShapeKind.Sphere) { return new Bounds(Center, Vector3.one * (Radius * 2f)); } if (Kind == ShapeKind.Capsule) { float num = Mathf.Max(Height, Radius * 2f); return new Bounds(Center, Vector3.one * num); } if (Kind == ShapeKind.Ray) { Vector3 val = RayOrigin + ((Vector3)(ref RayDir)).normalized * Mathf.Max(0.02f, RayLength); Vector3 val2 = (RayOrigin + val) * 0.5f; Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(Mathf.Abs(val.x - RayOrigin.x), Mathf.Abs(val.y - RayOrigin.y), Mathf.Abs(val.z - RayOrigin.z)); val3 += Vector3.one * 0.05f; return new Bounds(val2, val3); } return new Bounds(Center, Vector3.one * 0.1f); } public bool ContainsApprox(Vector3 p) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) if (Kind == ShapeKind.Box) { Bounds val = default(Bounds); ((Bounds)(ref val))..ctor(Center, Size); return ((Bounds)(ref val)).Contains(p); } Vector3 val2; if (Kind == ShapeKind.Sphere) { val2 = p - Center; return ((Vector3)(ref val2)).sqrMagnitude <= Radius * Radius; } if (Kind == ShapeKind.Capsule) { float num = Mathf.Max(Radius, Height * 0.5f); val2 = p - Center; return ((Vector3)(ref val2)).sqrMagnitude <= num * num; } return false; } } private struct Candidate { public Collider Col; public float DistSqr; } private struct CachedColliderInfo { public GameObject Root; public Genre Genre; public int LastFrame; } private struct CachedRootRenderers { public GameObject Root; public Renderer[] Renderers; public int LastFrame; } private sealed class ModelTransparencyManager { private struct RendererState { public Renderer Renderer; public Material[] OriginalSharedMaterials; public bool OriginalEnabled; } private readonly Func<bool> _forceFallback; private readonly Func<bool> _useMpb; private readonly Func<GameObject, Renderer[]> _getRenderers; private readonly Dictionary<int, RendererState> _states = new Dictionary<int, RendererState>(1024); private readonly HashSet<int> _touchedThisFrame = new HashSet<int>(); private Shader _fallbackShader; private readonly MaterialPropertyBlock _mpb = new MaterialPropertyBlock(); private readonly Dictionary<int, float> _rootAlpha = new Dictionary<int, float>(256); public ModelTransparencyManager(Func<bool> forceFallback, Func<bool> useMpb, Func<GameObject, Renderer[]> getRenderers) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown _forceFallback = forceFallback; _useMpb = useMpb; _getRenderers = getRenderers; _fallbackShader = FindFallbackTransparentShader(); } public void BeginFrame() { _touchedThisFrame.Clear(); } public void EndFrame() { int[] array = _states.Keys.ToArray(); foreach (int num in array) { if (!_touchedThisFrame.Contains(num)) { RestoreRenderer(num); } } } public void SweepOrphans() { int[] array = _states.Keys.ToArray(); foreach (int key in array) { if (_states.TryGetValue(key, out var value) && (Object)(object)value.Renderer == (Object)null) { _states.Remove(key); } } } public void RestoreAll() { int[] array = _states.Keys.ToArray(); for (int i = 0; i < array.Length; i++) { RestoreRenderer(array[i]); } _states.Clear(); _touchedThisFrame.Clear(); _rootAlpha.Clear(); } public void ApplyTransparent(GameObject root, float alpha01) { if ((Object)(object)root == (Object)null) { return; } int instanceID = ((Object)root).GetInstanceID(); if (_rootAlpha.TryGetValue(instanceID, out var value) && Mathf.Abs(value - alpha01) < 0.001f) { Renderer[] array = _getRenderers(root); foreach (Renderer val in array) { if (!((Object)(object)val == (Object)null)) { _touchedThisFrame.Add(((Object)val).GetInstanceID()); } } return; } _rootAlpha[instanceID] = alpha01; Renderer[] array2 = _getRenderers(root); bool flag = _useMpb(); foreach (Renderer val2 in array2) { if (!((Object)(object)val2 == (Object)null)) { int instanceID2 = ((Object)val2).GetInstanceID(); _touchedThisFrame.Add(instanceID2); if (!_states.ContainsKey(instanceID2)) { CacheOriginal(val2); } if (flag) { ApplyTransparencyByMpb(val2, alpha01); } else { ApplyTransparencyByMaterials(val2, alpha01); } } } } private void CacheOriginal(Renderer r) { if ((Object)(object)r == (Object)null) { return; } int instanceID = ((Object)r).GetInstanceID(); try { RendererState rendererState = default(RendererState); rendererState.Renderer = r; rendererState.OriginalSharedMaterials = r.sharedMaterials; rendererState.OriginalEnabled = r.enabled; RendererState value = rendererState; _states[instanceID] = value; } catch { } } private void RestoreRenderer(int id) { if (!_states.TryGetValue(id, out var value)) { return; } if ((Object)(object)value.Renderer == (Object)null) { _states.Remove(id); return; } try { value.Renderer.SetPropertyBlock((MaterialPropertyBlock)null); } catch { } try { value.Renderer.sharedMaterials = value.OriginalSharedMaterials; value.Renderer.enabled = value.OriginalEnabled; } catch { } _states.Remove(id); } private void ApplyTransparencyByMpb(Renderer r, float alpha01) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) bool flag = false; try { Material sharedMaterial = r.sharedMaterial; if ((Object)(object)sharedMaterial != (Object)null) { if (sharedMaterial.HasProperty("_Color")) { Color color = sharedMaterial.GetColor("_Color"); color.a = alpha01; _mpb.SetColor("_Color", color); flag = true; } else if (sharedMaterial.HasProperty("_BaseColor")) { Color color2 = sharedMaterial.GetColor("_BaseColor"); color2.a = alpha01; _mpb.SetColor("_BaseColor", color2); flag = true; } } } catch { } if (flag) { try { r.SetPropertyBlock(_mpb); } catch { } _mpb.Clear(); } } private void ApplyTransparencyByMaterials(Renderer r, float alpha01) { Material[] materials; try { materials = r.materials; } catch { return; } bool flag = _forceFallback(); foreach (Material val in materials) { if ((Object)(object)val == (Object)null) { continue; } bool flag2 = false; if (!flag) { flag2 = TrySetAlphaOnly(val, alpha01); if (flag2) { TrySetBlendTransparent(val); } } if (flag2) { continue; } if ((Object)(object)_fallbackShader == (Object)null) { _fallbackShader = FindFallbackTransparentShader(); } if ((Object)(object)_fallbackShader != (Object)null) { try { val.shader = _fallbackShader; } catch { } TrySetAlphaOnly(val, alpha01); TrySetBlendTransparent(val); } } try { r.materials = materials; } catch { } } private bool TrySetAlphaOnly(Material m, float alpha01) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) if (m.HasProperty("_Color")) { Color color = m.GetColor("_Color"); color.a = alpha01; m.SetColor("_Color", color); return true; } if (m.HasProperty("_BaseColor")) { Color color2 = m.GetColor("_BaseColor"); color2.a = alpha01; m.SetColor("_BaseColor", color2); return true; } return false; } private void TrySetBlendTransparent(Material m) { try { if (m.HasProperty("_SrcBlend")) { m.SetInt("_SrcBlend", 5); } if (m.HasProperty("_DstBlend")) { m.SetInt("_DstBlend", 10); } if (m.HasProperty("_ZWrite")) { m.SetInt("_ZWrite", 0); } m.DisableKeyword("_ALPHATEST_ON"); m.EnableKeyword("_ALPHABLEND_ON"); m.DisableKeyword("_ALPHAPREMULTIPLY_ON"); m.renderQueue = 3000; } catch { } try { if (m.HasProperty("_Surface")) { m.SetFloat("_Surface", 1f); } if (m.HasProperty("_ZWriteControl")) { m.SetFloat("_ZWriteControl", 0f); } if (m.HasProperty("_ZWrite")) { m.SetFloat("_ZWrite", 0f); } } catch { } } private static Shader FindFallbackTransparentShader() { Shader val = Shader.Find("Universal Render Pipeline/Lit"); if ((Object)(object)val != (Object)null) { return val; } val = Shader.Find("Standard"); if ((Object)(object)val != (Object)null) { return val; } val = Shader.Find("Legacy Shaders/Transparent/Diffuse"); if ((Object)(object)val != (Object)null) { return val; } return null; } } private enum TraceKind { Raycast, OverlapBox, OverlapSphere } private struct TraceItem { public TraceKind Kind; public float UntilTime; public Vector3 Center; public Vector3 Size; public Quaternion Rotation; public float Radius; public Vector3 RayOrigin; public Vector3 RayDir; public float RayLength; } private sealed class PhysicsTraceBuffer { [CompilerGenerated] private sealed class <GetActive>d__3 : IEnumerable<TraceItem>, IEnumerable, IEnumerator<TraceItem>, IEnumerator, IDisposable { private int <>1__state; private TraceItem <>2__current; private int <>l__initialThreadId; private float now; public float <>3__now; public PhysicsTraceBuffer <>4__this; private int <i>5__1; TraceItem IEnumerator<TraceItem>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetActive>d__3(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; goto IL_007f; } <>1__state = -1; <i>5__1 = 0; goto IL_0090; IL_007f: <i>5__1++; goto IL_0090; IL_0090: if (<i>5__1 < <>4__this._buf.Length) { if (<>4__this._buf[<i>5__1].UntilTime > now) { <>2__current = <>4__this._buf[<i>5__1]; <>1__state = 1; return true; } goto IL_007f; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<TraceItem> IEnumerable<TraceItem>.GetEnumerator() { <GetActive>d__3 <GetActive>d__; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; <GetActive>d__ = this; } else { <GetActive>d__ = new <GetActive>d__3(0) { <>4__this = <>4__this }; } <GetActive>d__.now = <>3__now; return <GetActive>d__; } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<TraceItem>)this).GetEnumerator(); } } private readonly TraceItem[] _buf = new TraceItem[256]; private int _idx; public void Add(TraceItem it) { _buf[_idx] = it; _idx = (_idx + 1) % _buf.Length; } [IteratorStateMachine(typeof(<GetActive>d__3))] public IEnumerable<TraceItem> GetActive(float now) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetActive>d__3(-2) { <>4__this = this, <>3__now = now }; } public int CountActive(float now) { int num = 0; for (int i = 0; i < _buf.Length; i++) { if (_buf[i].UntilTime > now) { num++; } } return num; } } private static class PhysicsPatches { public static void Raycast_Postfix(Vector3 origin, Vector3 direction, ref RaycastHit hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction, bool __result) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) if (_traceBuffer != null) { float num = maxDistance; if (__result) { num = ((RaycastHit)(ref hitInfo)).distance; } _traceBuffer.Add(new TraceItem { Kind = TraceKind.Raycast, UntilTime = Time.unscaledTime + 0.1f, RayOrigin = origin, RayDir = direction, RayLength = Mathf.Max(0.02f, num), Center = origin + ((Vector3)(ref direction)).normalized * Mathf.Max(0.02f, num) * 0.5f }); } } public static void OverlapBox_Prefix(Vector3 center, Vector3 halfExtents, Quaternion orientation, int layerMask, QueryTriggerInteraction queryTriggerInteraction) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (_traceBuffer != null) { _traceBuffer.Add(new TraceItem { Kind = TraceKind.OverlapBox, UntilTime = Time.unscaledTime + 0.1f, Center = center, Size = halfExtents * 2f, Rotation = orientation }); } } public static void OverlapSphere_Prefix(Vector3 position, float radius, int layerMask, QueryTriggerInteraction queryTriggerInteraction) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (_traceBuffer != null) { _traceBuffer.Add(new TraceItem { Kind = TraceKind.OverlapSphere, UntilTime = Time.unscaledTime + 0.1f, Center = position, Radius = radius }); } } } public const string PluginGuid = "REPOJP.HitboxWireframeVisualizer"; public const string PluginName = "HitboxWireframeVisualizer"; public const string PluginVersion = "1.0.0"; private ConfigEntry<bool> CfgGenreEnemy; private ConfigEntry<bool> CfgGenrePlayer; private ConfigEntry<bool> CfgGenreRoomModule; private ConfigEntry<bool> CfgGenreItem; private ConfigEntry<int> CfgAlphaEnemyPct; private ConfigEntry<int> CfgAlphaPlayerPct; private ConfigEntry<int> CfgAlphaRoomModulePct; private ConfigEntry<int> CfgAlphaItemPct; private ConfigEntry<int> CfgMaxCollidersPerCollect; private ConfigEntry<bool> CfgEnemyPriority; private ConfigEntry<int> CfgCacheExpireFrames; private ConfigEntry<bool> CfgNearestFirst; private ConfigEntry<int> CfgOverlapBufferMax; private ConfigEntry<bool> CfgEnemyLayerNameFallback; private ConfigEntry<bool> CfgEnable; private ConfigEntry<bool> CfgShowUI; private ConfigEntry<float> CfgCollectorInterval; private ConfigEntry<float> CfgMaxDistance; private ConfigEntry<int> CfgMaxShapes; private ConfigEntry<int> CfgMaxTransparentRoots; private ConfigEntry<bool> CfgShowColliders; private ConfigEntry<bool> CfgShowHurtColliders; private ConfigEntry<bool> CfgShowPhysicsTrace; private ConfigEntry<bool> CfgShowMeshColliders; private ConfigEntry<bool> CfgMeshAsBoundsBox; private ConfigEntry<bool> CfgZTestAlways; private ConfigEntry<bool> CfgFillMode; private ConfigEntry<float> CfgWireAlpha; private ConfigEntry<float> CfgFillAlpha; private ConfigEntry<bool> CfgThickWireEnable; private ConfigEntry<float> CfgWireWidthWorld; private ConfigEntry<bool> CfgWireWidthDistanceScale; private ConfigEntry<int> CfgSphereSegments; private ConfigEntry<bool> CfgGridSampleEnable; private ConfigEntry<float> CfgGridPitch; private ConfigEntry<int> CfgGridMaxPoints; private ConfigEntry<bool> CfgTargetLockDefault; private ConfigEntry<float> CfgTargetRayDistance; private ConfigEntry<bool> CfgTransparencyEnable; private ConfigEntry<bool> CfgTransparencyForceFallbackShader; private ConfigEntry<bool> CfgTransparencyUsePropertyBlock; private ConfigEntry<string> CfgDefaultLayerColor; private ConfigEntry<string> CfgTriggerColor; private ConfigEntry<string> CfgLayerColorMap; private ConfigEntry<KeyCode> CfgKeyToggle; private ConfigEntry<KeyCode> CfgKeyTargetLock; private ConfigEntry<KeyCode> CfgKeyToggleZTest; private ConfigEntry<KeyCode> CfgKeyToggleFill; private ConfigEntry<KeyCode> CfgKeyToggleGrid; private ConfigEntry<KeyCode> CfgKeyToggleTrace; private ConfigEntry<KeyCode> CfgKeyFreeze; private ConfigEntry<KeyCode> CfgKeyExport; private float _nextCollectTime; private bool _frozen; private bool _targetLocked; private GameObject _lockedTargetRoot; private string _lockedTargetName; private Material _lineMat; private Material _fillMat; private readonly List<Shape> _shapes = new List<Shape>(2048); private readonly List<SamplePoint> _gridPoints = new List<SamplePoint>(2048); private readonly HashSet<int> _visibleRootIds = new HashSet<int>(); private readonly Dictionary<int, RootInfo> _visibleRoots = new Dictionary<int, RootInfo>(); private Color _defaultLayerColor; private Color _triggerColor; private readonly Dictionary<int, Color> _layerColors = new Dictionary<int, Color>(); private ModelTransparencyManager _transparency; private Harmony _harmony; private static PhysicsTraceBuffer _traceBuffer; private GUIStyle _uiStyle; private GUIStyle _uiStyleSmall; private FieldInfo _hcFiBox; private FieldInfo _hcFiSphere; private FieldInfo _hcFiCollider; private FieldInfo _hcFiColliderIsBox; private string _configPath; private long _configLastWriteTicks; private float _nextConfigPollTime; private Collider[] _overlapBuf = (Collider[])(object)new Collider[4096]; private readonly HashSet<int> _hurtUnique = new HashSet<int>(); private readonly Dictionary<int, CachedColliderInfo> _colliderCache = new Dictionary<int, CachedColliderInfo>(8192); private readonly Dictionary<int, CachedRootRenderers> _rootRendererCache = new Dictionary<int, CachedRootRenderers>(1024); private readonly List<Candidate> _enemyCandidates = new List<Candidate>(1024); private readonly List<Candidate> _otherCandidates = new List<Candidate>(2048); private void Awake() { //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown BindConfig(); _configPath = ((BaseUnityPlugin)this).Config.ConfigFilePath; _configLastWriteTicks = TryGetLastWriteTicks(_configPath); ReloadColors(); CreateMaterials(); _transparency = new ModelTransparencyManager(() => CfgTransparencyForceFallbackShader.Value, () => CfgTransparencyUsePropertyBlock.Value, GetOrCacheRootRenderers); _traceBuffer = new PhysicsTraceBuffer(); _harmony = new Harmony("REPOJP.HitboxWireframeVisualizer"); TryPatchPhysics(); CacheHurtColliderReflection(); _targetLocked = CfgTargetLockDefault.Value; EnsureOverlapCapacity(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"HitboxWireframeVisualizer 1.0.0 loaded"); } private void OnDestroy() { try { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } catch { } try { _transparency?.RestoreAll(); } catch { } } private void Update() { PollAndReloadConfig(); HandleInput(); if (!CfgEnable.Value) { _transparency.RestoreAll(); return; } if (_frozen) { _transparency.SweepOrphans(); return; } if (Time.unscaledTime < _nextCollectTime) { _transparency.SweepOrphans(); return; } _nextCollectTime = Time.unscaledTime + Mathf.Max(0.02f, CfgCollectorInterval.Value); CollectAndBuild(); } private void OnRenderObject() { if (!CfgEnable.Value) { return; } Camera current = Camera.current; if ((Object)(object)current == (Object)null) { return; } EnsureMaterials(); if (!((Object)(object)_lineMat == (Object)null)) { DrawWireframes(current); if (CfgFillMode.Value) { DrawFills(); } if (CfgGridSampleEnable.Value) { DrawGridPoints(); } } } private void OnGUI() { //IL_01bf: Unknown result type (might be due to invalid IL or missing references) if (CfgEnable.Value && CfgShowUI.Value) { EnsureUiStyles(); int count = _shapes.Count; int count2 = _visibleRoots.Count; int num = _traceBuffer.CountActive(Time.unscaledTime); string text = (_frozen ? "Frozen" : "Live"); string text2 = (_targetLocked ? "Locked" : "Free"); string text3 = "Enemy:" + (CfgGenreEnemy.Value ? "On" : "Off") + " Player:" + (CfgGenrePlayer.Value ? "On" : "Off") + " Module:" + (CfgGenreRoomModule.Value ? "On" : "Off") + " Item:" + (CfgGenreItem.Value ? "On" : "Off"); string text4 = string.Format("Collect:{0:0.###}s Dist:{1:0.#}m MaxShapes:{2} MaxCols:{3} Nearest:{4} Buf:{5}", CfgCollectorInterval.Value, CfgMaxDistance.Value, CfgMaxShapes.Value, CfgMaxCollidersPerCollect.Value, CfgNearestFirst.Value ? "On" : "Off", _overlapBuf.Length); GUILayout.BeginArea(new Rect(10f, 10f, 1200f, 360f)); GUILayout.Label("HitboxWireframeVisualizer 1.0.0 Mode:" + text + " Target:" + text2, _uiStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label(string.Format("Shapes:{0} VisibleRoots:{1} Trace:{2}({3})", count, count2, CfgShowPhysicsTrace.Value ? "On" : "Off", num), _uiStyleSmall, Array.Empty<GUILayoutOption>()); GUILayout.Label(text3, _uiStyleSmall, Array.Empty<GUILayoutOption>()); GUILayout.Label(text4, _uiStyleSmall, Array.Empty<GUILayoutOption>()); if (_targetLocked) { GUILayout.Label("LockedRoot: " + _lockedTargetName, _uiStyleSmall, Array.Empty<GUILayoutOption>()); } GUILayout.EndArea(); } } private void EnsureUiStyles() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown if (_uiStyle == null || _uiStyleSmall == null) { GUIStyle val = new GUIStyle(GUI.skin.label) { fontSize = 14 }; val.normal.textColor = Color.white; _uiStyle = val; GUIStyle val2 = new GUIStyle(GUI.skin.label) { fontSize = 12 }; val2.normal.textColor = Color.white; _uiStyleSmall = val2; } } private void PollAndReloadConfig() { if (Time.unscaledTime < _nextConfigPollTime) { return; } _nextConfigPollTime = Time.unscaledTime + 0.5f; if (string.IsNullOrEmpty(_configPath)) { return; } long num = TryGetLastWriteTicks(_configPath); if (num != 0 && num != _configLastWriteTicks) { _configLastWriteTicks = num; try { ((BaseUnityPlugin)this).Config.Reload(); } catch { return; } ReloadColors(); EnsureOverlapCapacity(); } } private void EnsureOverlapCapacity() { int num = Mathf.Clamp(CfgOverlapBufferMax.Value, 4096, 65536); int num2 = Mathf.Clamp(Mathf.Max(4096, CfgMaxCollidersPerCollect.Value * 6), 4096, num); if (_overlapBuf == null || _overlapBuf.Length < num2) { _overlapBuf = (Collider[])(object)new Collider[num2]; } } private static long TryGetLastWriteTicks(string path) { try { if (File.Exists(path)) { return File.GetLastWriteTimeUtc(path).Ticks; } } catch { } return 0L; } private void CacheHurtColliderReflection() { _hcFiBox = AccessTools.Field(typeof(HurtCollider), "BoxCollider"); _hcFiSphere = AccessTools.Field(typeof(HurtCollider), "SphereCollider"); _hcFiCollider = AccessTools.Field(typeof(HurtCollider), "Collider"); _hcFiColliderIsBox = AccessTools.Field(typeof(HurtCollider), "ColliderIsBox"); } private void BindConfig() { CfgGenreEnemy = ((BaseUnityPlugin)this).Config.Bind<bool>("0.Genres", "ShowEnemy", true, "Show enemy hitboxes.敵関連表示"); CfgGenrePlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("0.Genres", "ShowPlayer", false, "Show player-related hitboxes.プレイヤー関連表示"); CfgGenreRoomModule = ((BaseUnityPlugin)this).Config.Bind<bool>("0.Genres", "ShowRoomModule", true, "Show room module-related hitboxes.部屋モジュール関連表示"); CfgGenreItem = ((BaseUnityPlugin)this).Config.Bind<bool>("0.Genres", "ShowItem", false, "Show item/valuable/weapon-related hitboxes.アイテム関連表示"); CfgAlphaEnemyPct = ((BaseUnityPlugin)this).Config.Bind<int>("1.TransparencyPct", "AlphaEnemyPct", 25, "Enemy model alpha percent (0-100).敵モデル透明度(0-100)"); CfgAlphaPlayerPct = ((BaseUnityPlugin)this).Config.Bind<int>("1.TransparencyPct", "AlphaPlayerPct", 35, "Player model alpha percent (0-100).プレイヤーモデル透明度(0-100)"); CfgAlphaRoomModulePct = ((BaseUnityPlugin)this).Config.Bind<int>("1.TransparencyPct", "AlphaRoomModulePct", 15, "Room module model alpha percent (0-100).部屋モジュール透明度(0-100)"); CfgAlphaItemPct = ((BaseUnityPlugin)this).Config.Bind<int>("1.TransparencyPct", "AlphaItemPct", 25, "Item model alpha percent (0-100).アイテム透明度(0-100)"); CfgMaxCollidersPerCollect = ((BaseUnityPlugin)this).Config.Bind<int>("2.Performance", "MaxCollidersPerCollect", 650, "Max colliders processed per collect.収集1回の処理Collider上限"); CfgEnemyPriority = ((BaseUnityPlugin)this).Config.Bind<bool>("2.Performance", "EnemyPriority", true, "Process enemy colliders first.敵を優先処理"); CfgCacheExpireFrames = ((BaseUnityPlugin)this).Config.Bind<int>("2.Performance", "CacheExpireFrames", 600, "Cache expiry frames.キャッシュ有効期限フレーム"); CfgNearestFirst = ((BaseUnityPlugin)this).Config.Bind<bool>("2.Performance", "NearestFirst", true, "Process nearest colliders first.近距離を優先処理"); CfgOverlapBufferMax = ((BaseUnityPlugin)this).Config.Bind<int>("2.Performance", "OverlapBufferMax", 32768, "Max overlap buffer size.Overlapバッファ最大サイズ"); CfgEnemyLayerNameFallback = ((BaseUnityPlugin)this).Config.Bind<bool>("2.Performance", "EnemyLayerNameFallback", true, "Treat Layer name 'Enemy' as enemy.Layer名Enemyを敵扱い"); CfgEnable = ((BaseUnityPlugin)this).Config.Bind<bool>("3.General", "Enable", true, "Enable mod.有効化"); CfgShowUI = ((BaseUnityPlugin)this).Config.Bind<bool>("3.General", "ShowUI", true, "Show UI overlay.簡易UI表示"); CfgCollectorInterval = ((BaseUnityPlugin)this).Config.Bind<float>("3.General", "CollectorIntervalSeconds", 0.18f, "Collector interval (unscaled).収集間隔秒"); CfgMaxDistance = ((BaseUnityPlugin)this).Config.Bind<float>("3.General", "MaxDistanceMeters", 35f, "Max distance from camera for collection.カメラからの最大距離"); CfgMaxShapes = ((BaseUnityPlugin)this).Config.Bind<int>("3.General", "MaxShapes", 110, "Max shapes drawn per frame.描画最大Shape数"); CfgMaxTransparentRoots = ((BaseUnityPlugin)this).Config.Bind<int>("3.General", "MaxTransparentRoots", 16, "Max roots to apply model transparency.モデル透明化Root上限"); CfgShowColliders = ((BaseUnityPlugin)this).Config.Bind<bool>("4.Targets", "ShowColliders", true, "Show colliders.通常Collider表示"); CfgShowHurtColliders = ((BaseUnityPlugin)this).Config.Bind<bool>("4.Targets", "ShowHurtColliders", true, "Show HurtCollider shapes. HurtCollider判定形状表示"); CfgShowPhysicsTrace = ((BaseUnityPlugin)this).Config.Bind<bool>("4.Targets", "ShowPhysicsTrace", false, "Show Physics trace (Harmony). Physicsトレース表示(Harmony)"); CfgShowMeshColliders = ((BaseUnityPlugin)this).Config.Bind<bool>("5.Mesh", "ShowMeshColliders", false, "Show MeshCollider (heavy).MeshCollider表示(重い)"); CfgMeshAsBoundsBox = ((BaseUnityPlugin)this).Config.Bind<bool>("5.Mesh", "MeshAsBoundsBox", true, "Draw MeshCollider as bounds box. MeshColliderをBounds箱で近似"); CfgZTestAlways = ((BaseUnityPlugin)this).Config.Bind<bool>("6.Render", "ZTestAlways", false, "Draw through walls.壁越し表示"); CfgFillMode = ((BaseUnityPlugin)this).Config.Bind<bool>("6.Render", "FillMode", false, "Draw translucent fill.薄い面描画"); CfgWireAlpha = ((BaseUnityPlugin)this).Config.Bind<float>("6.Render", "WireAlpha", 1f, "Wire alpha.ワイヤー透明度"); CfgFillAlpha = ((BaseUnityPlugin)this).Config.Bind<float>("6.Render", "FillAlpha", 0.1f, "Fill alpha.面透明度"); CfgThickWireEnable = ((BaseUnityPlugin)this).Config.Bind<bool>("7.WireThickness", "ThickWireEnable", false, "Thick wire (heavy).太線表示(重い)"); CfgWireWidthWorld = ((BaseUnityPlugin)this).Config.Bind<float>("7.WireThickness", "WireWidthWorld", 0.015f, "Wire width approx in world space.線幅近似(ワールド)"); CfgWireWidthDistanceScale = ((BaseUnityPlugin)this).Config.Bind<bool>("7.WireThickness", "WireWidthDistanceScale", true, "Scale wire width by distance.距離で線幅スケール"); CfgSphereSegments = ((BaseUnityPlugin)this).Config.Bind<int>("8.Segments", "SphereSegments", 14, "Sphere wire segments.球ワイヤー分割数"); CfgGridSampleEnable = ((BaseUnityPlugin)this).Config.Bind<bool>("9.Grid", "GridSampleEnable", false, "Grid sample points (heavy).グリッドサンプル点(重い)"); CfgGridPitch = ((BaseUnityPlugin)this).Config.Bind<float>("9.Grid", "GridPitchMeters", 0.35f, "Grid pitch.グリッド間隔"); CfgGridMaxPoints = ((BaseUnityPlugin)this).Config.Bind<int>("9.Grid", "GridMaxPoints", 300, "Max grid points.最大点数"); CfgTargetLockDefault = ((BaseUnityPlugin)this).Config.Bind<bool>("10.Target", "TargetLockDefault", false, "Lock target by default.既定ロック"); CfgTargetRayDistance = ((BaseUnityPlugin)this).Config.Bind<float>("10.Target", "TargetRayDistance", 60f, "Ray distance for target selection.ターゲット選択レイ距離"); CfgTransparencyEnable = ((BaseUnityPlugin)this).Config.Bind<bool>("11.Transparency", "EnableModelTransparency", true, "Make target models transparent.モデル透明化"); CfgTransparencyUsePropertyBlock = ((BaseUnityPlugin)this).Config.Bind<bool>("11.Transparency", "UseMaterialPropertyBlock", true, "Use MPB to set alpha (fast).MPBでalpha設定(高速)"); CfgTransparencyForceFallbackShader = ((BaseUnityPlugin)this).Config.Bind<bool>("11.Transparency", "ForceFallbackShader", false, "Force fallback transparent shader swap.透明シェーダ差替え強制"); CfgDefaultLayerColor = ((BaseUnityPlugin)this).Config.Bind<string>("12.Colors", "DefaultLayerColor", "#AAAAAA", "Default layer color.既定Layer色(#RRGGBB)"); CfgTriggerColor = ((BaseUnityPlugin)this).Config.Bind<string>("12.Colors", "TriggerColor", "#FF00FF", "Trigger color. Trigger色(#RRGGBB)"); CfgLayerColorMap = ((BaseUnityPlugin)this).Config.Bind<string>("12.Colors", "LayerColorMap", "Player=#00A0FF;Enemy=#FF4040;Default=#B0B0B0;PhysGrabObjectHinge=#40FF40;Phys Grab Object=#FFFF40", "Layer color map by name: LayerName=#RRGGBB;... Layer色マップ"); CfgKeyToggle = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleEnable", (KeyCode)282, "Toggle enable.有効切替"); CfgKeyTargetLock = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleTargetLock", (KeyCode)285, "Toggle target lock.ターゲットロック切替"); CfgKeyToggleZTest = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleZTestAlways", (KeyCode)286, "Toggle ZTest always.壁越し切替"); CfgKeyToggleFill = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleFill", (KeyCode)287, "Toggle fill.面描画切替"); CfgKeyToggleGrid = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleGrid", (KeyCode)288, "Toggle grid points.グリッド切替"); CfgKeyToggleTrace = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "TogglePhysicsTrace", (KeyCode)289, "Toggle physics trace.物理トレース切替"); CfgKeyFreeze = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ToggleFreeze", (KeyCode)290, "Freeze collect.収集凍結切替"); CfgKeyExport = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("13.Keys", "ExportSelection", (KeyCode)291, "Export selection json.選択JSON出力"); } private void ReloadColors() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) _defaultLayerColor = ParseColorOrDefault(CfgDefaultLayerColor.Value, new Color(0.67f, 0.67f, 0.67f, 1f)); _triggerColor = ParseColorOrDefault(CfgTriggerColor.Value, Color.magenta); _layerColors.Clear(); string text = CfgLayerColorMap.Value ?? ""; string[] array = text.Split(new char[1] { ';' }, StringSplitOptions.RemoveEmptyEntries); string[] array2 = array; foreach (string text2 in array2) { string[] array3 = text2.Split(new char[1] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (array3.Length == 2) { string text3 = array3[0].Trim(); string text4 = array3[1].Trim(); int num = LayerMask.NameToLayer(text3); if (num >= 0) { Color value = ParseColorOrDefault(text4, _defaultLayerColor); _layerColors[num] = value; } } } } private void CreateMaterials() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown Shader val = Shader.Find("Hidden/Internal-Colored"); if ((Object)(object)val == (Object)null) { val = Shader.Find("Sprites/Default"); } if (!((Object)(object)val == (Object)null)) { _lineMat = new Material(val); ((Object)_lineMat).hideFlags = (HideFlags)61; TrySetInt(_lineMat, "_SrcBlend", 5); TrySetInt(_lineMat, "_DstBlend", 10); TrySetInt(_lineMat, "_Cull", 0); TrySetInt(_lineMat, "_ZWrite", 0); _fillMat = new Material(val); ((Object)_fillMat).hideFlags = (HideFlags)61; TrySetInt(_fillMat, "_SrcBlend", 5); TrySetInt(_fillMat, "_DstBlend", 10); TrySetInt(_fillMat, "_Cull", 2); TrySetInt(_fillMat, "_ZWrite", 0); } } private void EnsureMaterials() { if ((Object)(object)_lineMat == (Object)null || (Object)(object)_fillMat == (Object)null) { CreateMaterials(); } if (!((Object)(object)_lineMat == (Object)null) && !((Object)(object)_fillMat == (Object)null)) { TrySetInt(_lineMat, "_ZTest", CfgZTestAlways.Value ? 8 : 4); TrySetInt(_fillMat, "_ZTest", CfgZTestAlways.Value ? 8 : 4); } } private void HandleInput() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(CfgKeyToggle.Value)) { CfgEnable.Value = !CfgEnable.Value; if (!CfgEnable.Value) { _transparency.RestoreAll(); } } if (Input.GetKeyDown(CfgKeyTargetLock.Value)) { _targetLocked = !_targetLocked; if (!_targetLocked) { _lockedTargetRoot = null; _lockedTargetName = null; } } if (Input.GetKeyDown(CfgKeyToggleZTest.Value)) { CfgZTestAlways.Value = !CfgZTestAlways.Value; } if (Input.GetKeyDown(CfgKeyToggleFill.Value)) { CfgFillMode.Value = !CfgFillMode.Value; } if (Input.GetKeyDown(CfgKeyToggleGrid.Value)) { CfgGridSampleEnable.Value = !CfgGridSampleEnable.Value; } if (Input.GetKeyDown(CfgKeyToggleTrace.Value)) { CfgShowPhysicsTrace.Value = !CfgShowPhysicsTrace.Value; } if (Input.GetKeyDown(CfgKeyFreeze.Value)) { _frozen = !_frozen; } if (Input.GetKeyDown(CfgKeyExport.Value)) { ExportSelectionJsonToClipboard(); } } private void CollectAndBuild() { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_06ad: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_0660: Unknown result type (might be due to invalid IL or missing references) //IL_05c3: Unknown result type (might be due to invalid IL or missing references) Camera val = Camera.main; if ((Object)(object)val == (Object)null) { val = Camera.current; } if ((Object)(object)val == (Object)null) { _transparency.SweepOrphans(); return; } UpdateTargetLock(val); _shapes.Clear(); _gridPoints.Clear(); _visibleRoots.Clear(); _visibleRootIds.Clear(); _hurtUnique.Clear(); _enemyCandidates.Clear(); _otherCandidates.Clear(); Vector3 position = ((Component)val).transform.position; float num = Mathf.Max(1f, CfgMaxDistance.Value); if (_targetLocked && (Object)(object)_lockedTargetRoot != (Object)null) { if (CfgShowColliders.Value) { Collider[] componentsInChildren = _lockedTargetRoot.GetComponentsInChildren<Collider>(true); foreach (Collider val2 in componentsInChildren) { if (!((Object)(object)val2 == (Object)null)) { AddSingleColliderShapeCached(position, val2); } } } if (CfgShowHurtColliders.Value) { HurtCollider[] componentsInChildren2 = _lockedTargetRoot.GetComponentsInChildren<HurtCollider>(true); foreach (HurtCollider val3 in componentsInChildren2) { if (!((Object)(object)val3 == (Object)null)) { AddSingleHurtColliderShapeCached(position, val3); } } } } else { EnsureOverlapCapacity(); int num2 = Physics.OverlapSphereNonAlloc(position, num, _overlapBuf, -1, (QueryTriggerInteraction)2); if (num2 == _overlapBuf.Length) { int num3 = Mathf.Clamp(CfgOverlapBufferMax.Value, 4096, 65536); int num4 = Mathf.Min(num3, _overlapBuf.Length * 2); if (num4 > _overlapBuf.Length) { _overlapBuf = (Collider[])(object)new Collider[num4]; num2 = Physics.OverlapSphereNonAlloc(position, num, _overlapBuf, -1, (QueryTriggerInteraction)2); } } if (num2 <= 0) { _transparency.SweepOrphans(); return; } for (int k = 0; k < num2; k++) { Collider val4 = _overlapBuf[k]; if ((Object)(object)val4 == (Object)null) { continue; } Bounds bounds = val4.bounds; Vector3 val5 = ((Bounds)(ref bounds)).center - position; float sqrMagnitude = ((Vector3)(ref val5)).sqrMagnitude; bool flag = GetOrCacheColliderInfo(val4, Time.frameCount).Genre == Genre.Enemy; if (!flag && CfgEnemyLayerNameFallback.Value) { string text = LayerMask.LayerToName(((Component)val4).gameObject.layer); if (!string.IsNullOrEmpty(text) && string.Equals(text, "Enemy", StringComparison.OrdinalIgnoreCase)) { flag = true; } } Candidate candidate = default(Candidate); candidate.Col = val4; candidate.DistSqr = sqrMagnitude; Candidate item = candidate; if (flag) { _enemyCandidates.Add(item); } else { _otherCandidates.Add(item); } } if (CfgNearestFirst.Value) { _enemyCandidates.Sort((Candidate a, Candidate b) => a.DistSqr.CompareTo(b.DistSqr)); _otherCandidates.Sort((Candidate a, Candidate b) => a.DistSqr.CompareTo(b.DistSqr)); } int num5 = Mathf.Max(1, CfgMaxCollidersPerCollect.Value); int num6 = 0; if (CfgEnemyPriority.Value && CfgGenreEnemy.Value && CfgShowColliders.Value) { for (int l = 0; l < _enemyCandidates.Count; l++) { if (num6 >= num5) { break; } AddSingleColliderShapeCached(position, _enemyCandidates[l].Col); num6++; } } if (CfgShowColliders.Value && num6 < num5) { if (!CfgEnemyPriority.Value) { for (int m = 0; m < _enemyCandidates.Count; m++) { if (num6 >= num5) { break; } AddSingleColliderShapeCached(position, _enemyCandidates[m].Col); num6++; } } for (int n = 0; n < _otherCandidates.Count; n++) { if (num6 >= num5) { break; } AddSingleColliderShapeCached(position, _otherCandidates[n].Col); num6++; } } if (CfgShowHurtColliders.Value) { int num7 = Mathf.Max(1, num5 / 3); int num8 = 0; if (CfgEnemyPriority.Value && CfgGenreEnemy.Value) { for (int num9 = 0; num9 < _enemyCandidates.Count; num9++) { if (num8 >= num7) { break; } Collider col = _enemyCandidates[num9].Col; if ((Object)(object)col == (Object)null) { continue; } HurtCollider componentInParent = ((Component)col).GetComponentInParent<HurtCollider>(); if (!((Object)(object)componentInParent == (Object)null)) { int instanceID = ((Object)componentInParent).GetInstanceID(); if (_hurtUnique.Add(instanceID)) { AddSingleHurtColliderShapeCached(position, componentInParent); num8++; } } } } int num10 = 0; for (int num11 = 0; num11 < _otherCandidates.Count; num11++) { if (num10 >= num7) { break; } Collider col2 = _otherCandidates[num11].Col; if ((Object)(object)col2 == (Object)null) { continue; } HurtCollider componentInParent2 = ((Component)col2).GetComponentInParent<HurtCollider>(); if (!((Object)(object)componentInParent2 == (Object)null)) { int instanceID2 = ((Object)componentInParent2).GetInstanceID(); if (_hurtUnique.Add(instanceID2)) { AddSingleHurtColliderShapeCached(position, componentInParent2); num10++; } } } } } if (CfgShowPhysicsTrace.Value) { AddTraceShapes(position, num); } if (_shapes.Count > CfgMaxShapes.Value) { _shapes.Sort((Shape a, Shape b) => a.DistanceSqr.CompareTo(b.DistanceSqr)); _shapes.RemoveRange(CfgMaxShapes.Value, _shapes.Count - CfgMaxShapes.Value); } for (int num12 = 0; num12 < _shapes.Count; num12++) { Shape shape = _shapes[num12]; if (!((Object)(object)shape.OwnerRoot == (Object)null)) { int instanceID3 = ((Object)shape.OwnerRoot).GetInstanceID(); if (_visibleRootIds.Add(instanceID3)) { _visibleRoots[instanceID3] = new RootInfo { Root = shape.OwnerRoot, Genre = shape.Genre, DistanceSqr = shape.DistanceSqr }; } } } if (CfgTransparencyEnable.Value) { _transparency.BeginFrame(); foreach (RootInfo item2 in _visibleRoots.Values.OrderBy((RootInfo x) => x.DistanceSqr).Take(Mathf.Max(0, CfgMaxTransparentRoots.Value))) { float alpha = Alpha01ForGenre(item2.Genre); _transparency.ApplyTransparent(item2.Root, alpha); } _transparency.EndFrame(); } else { _transparency.RestoreAll(); } if (CfgGridSampleEnable.Value) { BuildGridSamples(val); } SweepCaches(); _transparency.SweepOrphans(); } private void UpdateTargetLock(Camera cam) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) if (!_targetLocked) { return; } if ((Object)(object)_lockedTargetRoot != (Object)null && !Object.op_Implicit((Object)(object)_lockedTargetRoot)) { _lockedTargetRoot = null; _lockedTargetName = null; } if ((Object)(object)_lockedTargetRoot != (Object)null) { return; } Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)cam).transform.position, ((Component)cam).transform.forward); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, ref val2, Mathf.Max(1f, CfgTargetRayDistance.Value), -1, (QueryTriggerInteraction)2)) { GameObject val3 = ResolveOwnerRoot(((RaycastHit)(ref val2)).collider); if ((Object)(object)val3 != (Object)null) { _lockedTargetRoot = val3; _lockedTargetName = ((Object)val3).name; } } } private void AddSingleColliderShapeCached(Vector3 camPos, Collider c) { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)c == (Object)null || !c.enabled || (c is MeshCollider && !CfgShowMeshColliders.Value)) { return; } CachedColliderInfo orCacheColliderInfo = GetOrCacheColliderInfo(c, Time.frameCount); if (!IsGenreEnabled(orCacheColliderInfo.Genre)) { return; } Bounds bounds = c.bounds; Vector3 val = ((Bounds)(ref bounds)).center - camPos; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; Color color = ResolveWireColor(c); BoxCollider val2 = (BoxCollider)(object)((c is BoxCollider) ? c : null); if (val2 != null) { Vector3 center = ((Component)val2).transform.TransformPoint(val2.center); Vector3 size = Vector3.Scale(val2.size, ((Component)val2).transform.lossyScale); Quaternion rotation = ((Component)val2).transform.rotation; _shapes.Add(Shape.Box(orCacheColliderInfo.Root, orCacheColliderInfo.Genre, center, size, rotation, color, sqrMagnitude)); return; } SphereCollider val3 = (SphereCollider)(object)((c is SphereCollider) ? c : null); if (val3 != null) { Vector3 center2 = ((Component)val3).transform.TransformPoint(val3.center); float radius = val3.radius * MaxAbs(((Component)val3).transform.lossyScale); _shapes.Add(Shape.Sphere(orCacheColliderInfo.Root, orCacheColliderInfo.Genre, center2, radius, color, sqrMagnitude)); return; } CapsuleCollider val4 = (CapsuleCollider)(object)((c is CapsuleCollider) ? c : null); if (val4 != null) { Vector3 center3 = ((Component)val4).transform.TransformPoint(val4.center); float num = MaxAbs(new Vector3(((Component)val4).transform.lossyScale.x, ((Component)val4).transform.lossyScale.z, ((Component)val4).transform.lossyScale.x)); float num2 = Mathf.Abs(((Component)val4).transform.lossyScale.y); float radius2 = val4.radius * num; float height = val4.height * num2; _shapes.Add(Shape.Capsule(orCacheColliderInfo.Root, orCacheColliderInfo.Genre, center3, radius2, height, val4.direction, ((Component)val4).transform.rotation, color, sqrMagnitude)); } else { MeshCollider val5 = (MeshCollider)(object)((c is MeshCollider) ? c : null); if (val5 != null) { Bounds bounds2 = ((Collider)val5).bounds; _shapes.Add(Shape.Box(orCacheColliderInfo.Root, orCacheColliderInfo.Genre, ((Bounds)(ref bounds2)).center, ((Bounds)(ref bounds2)).size, Quaternion.identity, color, sqrMagnitude)); } else { Bounds bounds3 = c.bounds; _shapes.Add(Shape.Box(orCacheColliderInfo.Root, orCacheColliderInfo.Genre, ((Bounds)(ref bounds3)).center, ((Bounds)(ref bounds3)).size, Quaternion.identity, color, sqrMagnitude)); } } } private void AddSingleHurtColliderShapeCached(Vector3 camPos, HurtCollider hc) { //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hc == (Object)null || !((Behaviour)hc).isActiveAndEnabled || _hcFiCollider == null || _hcFiColliderIsBox == null) { return; } object? value = _hcFiCollider.GetValue(hc); Collider val = (Collider)((value is Collider) ? value : null); if ((Object)(object)val == (Object)null) { return; } GameObject root = ResolveOwnerRoot(((Component)hc).gameObject); Genre genre = ResolveGenre(root); if (!IsGenreEnabled(genre)) { return; } Bounds bounds = val.bounds; Vector3 val2 = ((Bounds)(ref bounds)).center - camPos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; Color triggerColor = _triggerColor; bool flag = false; try { flag = (bool)_hcFiColliderIsBox.GetValue(hc); } catch { } if (flag) { object? obj2 = _hcFiBox?.GetValue(hc); BoxCollider val3 = (BoxCollider)((obj2 is BoxCollider) ? obj2 : null); if ((Object)(object)val3 == (Object)null) { Bounds bounds2 = val.bounds; _shapes.Add(Shape.Box(root, genre, ((Bounds)(ref bounds2)).center, ((Bounds)(ref bounds2)).size, Quaternion.identity, triggerColor, sqrMagnitude)); return; } Vector3 center = ((Component)val3).transform.TransformPoint(val3.center); Vector3 size = Vector3.Scale(val3.size, ((Component)val3).transform.lossyScale); Quaternion rotation = ((Component)val3).transform.rotation; _shapes.Add(Shape.Box(root, genre, center, size, rotation, triggerColor, sqrMagnitude)); } else { object? obj3 = _hcFiSphere?.GetValue(hc); SphereCollider val4 = (SphereCollider)((obj3 is SphereCollider) ? obj3 : null); if ((Object)(object)val4 == (Object)null) { Bounds bounds3 = val.bounds; _shapes.Add(Shape.Box(root, genre, ((Bounds)(ref bounds3)).center, ((Bounds)(ref bounds3)).size, Quaternion.identity, triggerColor, sqrMagnitude)); } else { Vector3 center2 = ((Component)val4).transform.TransformPoint(val4.center); float radius = val4.radius * MaxAbs(((Component)val4).transform.lossyScale); _shapes.Add(Shape.Sphere(root, genre, center2, radius, triggerColor, sqrMagnitude)); } } } private CachedColliderInfo GetOrCacheColliderInfo(Collider c, int frame) { int instanceID = ((Object)c).GetInstanceID(); if (_colliderCache.TryGetValue(instanceID, out var value)) { if ((Object)(object)value.Root == (Object)null || !Object.op_Implicit((Object)(object)value.Root)) { _colliderCache.Remove(instanceID); } else { if (value.Genre != 0) { value.LastFrame = frame; _colliderCache[instanceID] = value; return value; } _colliderCache.Remove(instanceID); } } GameObject root = ResolveOwnerRoot(c); Genre genre = ResolveGenre(root); if (genre != Genre.Enemy && CfgEnemyLayerNameFallback.Value) { string text = LayerMask.LayerToName(((Component)c).gameObject.layer); if (!string.IsNullOrEmpty(text) && string.Equals(text, "Enemy", StringComparison.OrdinalIgnoreCase)) { genre = Genre.Enemy; } } CachedColliderInfo cachedColliderInfo = default(CachedColliderInfo); cachedColliderInfo.Root = root; cachedColliderInfo.Genre = genre; cachedColliderInfo.LastFrame = frame; CachedColliderInfo cachedColliderInfo2 = cachedColliderInfo; _colliderCache[instanceID] = cachedColliderInfo2; return cachedColliderInfo2; } private Renderer[] GetOrCacheRootRenderers(GameObject root) { if ((Object)(object)root == (Object)null) { return Array.Empty<Renderer>(); } int instanceID = ((Object)root).GetInstanceID(); int frameCount = Time.frameCount; if (_rootRendererCache.TryGetValue(instanceID, out var value)) { if ((Object)(object)value.Root != (Object)null && Object.op_Implicit((Object)(object)value.Root)) { value.LastFrame = frameCount; _rootRendererCache[instanceID] = value; return value.Renderers ?? Array.Empty<Renderer>(); } _rootRendererCache.Remove(instanceID); } Renderer[] componentsInChildren = root.GetComponentsInChildren<Renderer>(true); CachedRootRenderers cachedRootRenderers = default(CachedRootRenderers); cachedRootRenderers.Root = root; cachedRootRenderers.Renderers = componentsInChildren; cachedRootRenderers.LastFrame = frameCount; CachedRootRenderers value2 = cachedRootRenderers; _rootRendererCache[instanceID] = value2; return componentsInChildren ?? Array.Empty<Renderer>(); } private void SweepCaches() { int num = Mathf.Max(60, CfgCacheExpireFrames.Value); int frameCount = Time.frameCount; if (_colliderCache.Count > 0) { int[] array = _colliderCache.Keys.ToArray(); foreach (int key in array) { if (_colliderCache.TryGetValue(key, out var value) && ((Object)(object)value.Root == (Object)null || !Object.op_Implicit((Object)(object)value.Root) || frameCount - value.LastFrame > num)) { _colliderCache.Remove(key); } } } if (_rootRendererCache.Count <= 0) { return; } int[] array2 = _rootRendererCache.Keys.ToArray(); foreach (int key2 in array2) { if (_rootRendererCache.TryGetValue(key2, out var value2) && ((Object)(object)value2.Root == (Object)null || !Object.op_Implicit((Object)(object)value2.Root) || frameCount - value2.LastFrame > num)) { _rootRendererCache.Remove(key2); } } } private void AddTraceShapes(Vector3 camPos, float maxDist) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) float num = maxDist * maxDist; float unscaledTime = Time.unscaledTime; foreach (TraceItem item in _traceBuffer.GetActive(unscaledTime)) { Vector3 val = item.Center - camPos; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (!(sqrMagnitude > num)) { Color white = Color.white; if (item.Kind == TraceKind.Raycast) { _shapes.Add(Shape.Ray(null, Genre.Trace, item.RayOrigin, item.RayDir, item.RayLength, white, sqrMagnitude)); } else if (item.Kind == TraceKind.OverlapBox) { _shapes.Add(Shape.Box(null, Genre.Trace, item.Center, item.Size, item.Rotation, white, sqrMagnitude)); } else if (item.Kind == TraceKind.OverlapSphere) { _shapes.Add(Shape.Sphere(null, Genre.Trace, item.Center, item.Radius, white, sqrMagnitude)); } } } } private void BuildGridSamples(Camera cam) { //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) Shape? shape = null; if (_targetLocked && (Object)(object)_lockedTargetRoot != (Object)null) { for (int i = 0; i < _shapes.Count; i++) { Shape value = _shapes[i]; if ((Object)(object)value.OwnerRoot == (Object)(object)_lockedTargetRoot && (value.Kind == ShapeKind.Box || value.Kind == ShapeKind.Sphere || value.Kind == ShapeKind.Capsule)) { shape = value; break; } } } if (!shape.HasValue && _shapes.Count > 0) { _shapes.Sort((Shape a, Shape b) => a.DistanceSqr.CompareTo(b.DistanceSqr)); for (int j = 0; j < _shapes.Count; j++) { Shape value2 = _shapes[j]; if (value2.Kind == ShapeKind.Box || value2.Kind == ShapeKind.Sphere || value2.Kind == ShapeKind.Capsule) { shape = value2; break; } } } if (!shape.HasValue) { return; } Bounds approxBounds = shape.Value.GetApproxBounds(); float num = Mathf.Max(0.05f, CfgGridPitch.Value); int num2 = Mathf.Max(1, CfgGridMaxPoints.Value); Vector3 min = ((Bounds)(ref approxBounds)).min; Vector3 max = ((Bounds)(ref approxBounds)).max; int num3 = 0; Vector3 val = default(Vector3); for (float num4 = min.x; num4 <= max.x; num4 += num) { for (float num5 = min.y; num5 <= max.y; num5 += num) { for (float num6 = min.z; num6 <= max.z; num6 += num) { if (num3 >= num2) { return; } ((Vector3)(ref val))..ctor(num4, num5, num6); if (shape.Value.ContainsApprox(val)) { _gridPoints.Add(new SamplePoint { Position = val, Color = shape.Value.Color }); num3++; } } } } } private void DrawWireframes(Camera cam) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Clamp(CfgWireWidthWorld.Value, 0.002f, 0.15f); bool value = CfgThickWireEnable.Value; _lineMat.SetPass(0); GL.PushMatrix(); GL.MultMatrix(Matrix4x4.identity); GL.Begin(1); int sphereSeg = Mathf.Clamp(CfgSphereSegments.Value, 6, 64); for (int i = 0; i < _shapes.Count; i++) { Shape s = _shapes[i]; Color color = s.Color; color.a = Mathf.Clamp01(CfgWireAlpha.Value); if (!value) { GL.Color(color); DrawShapeWireThin(s, sphereSeg); continue; } float num2 = num; if (CfgWireWidthDistanceScale.Value) { float num3 = Mathf.Sqrt(Mathf.Max(0f, s.DistanceSqr)); num2 = num * Mathf.Clamp(num3 * 0.06f, 1f, 5f); } Vector3 off = ((Component)cam).transform.right * num2; Vector3 off2 = ((Component)cam).transform.up * num2; GL.Color(color); DrawShapeWireThick(s, sphereSeg, off, off2); } GL.End(); GL.PopMatrix(); } private void DrawFills() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_fillMat == (Object)null)) { _fillMat.SetPass(0); GL.PushMatrix(); GL.MultMatrix(Matrix4x4.identity); GL.Begin(4); for (int i = 0; i < _shapes.Count; i++) { Shape s = _shapes[i]; Color color = s.Color; color.a = Mathf.Clamp01(CfgFillAlpha.Value); GL.Color(color); DrawShapeFillApprox(s); } GL.End(); GL.PopMatrix(); } } private void DrawGridPoints() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) _lineMat.SetPass(0); GL.PushMatrix(); GL.MultMatrix(Matrix4x4.identity); GL.Begin(1); float num = 0.06f; for (int i = 0; i < _gridPoints.Count; i++) { SamplePoint samplePoint = _gridPoints[i]; Color color = samplePoint.Color; color.a = 0.9f; Vector3 position = samplePoint.Position; GL.Color(color); GL.Vertex(position + new Vector3(0f - num, 0f, 0f)); GL.Vertex(position + new Vector3(num, 0f, 0f)); GL.Vertex(position + new Vector3(0f, 0f - num, 0f)); GL.Vertex(position + new Vector3(0f, num, 0f)); GL.Vertex(position + new Vector3(0f, 0f, 0f - num)); GL.Vertex(position + new Vector3(0f, 0f, num)); } GL.End(); GL.PopMatrix(); } private void DrawShapeWireThin(Shape s, int sphereSeg) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) switch (s.Kind) { case ShapeKind.Box: DrawBoxWireThin(s.Center, s.Size, s.Rotation); break; case ShapeKind.Sphere: DrawSphereWireThin(s.Center, s.Radius, sphereSeg); break; case ShapeKind.Capsule: DrawCapsuleWireThin(s.Center, s.Radius, s.Height, s.CapsuleDirection, s.Rotation, sphereSeg); break; case ShapeKind.Ray: DrawRayWireThin(s.RayOrigin, s.RayDir, s.RayLength); break; } } private void DrawShapeWireThick(Shape s, int sphereSeg, Vector3 off1, Vector3 off2) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) switch (s.Kind) { case ShapeKind.Box: DrawBoxWireThick(s.Center, s.Size, s.Rotation, off1, off2); break; case ShapeKind.Sphere: DrawSphereWireThick(s.Center, s.Radius, sphereSeg, off1, off2); break; case ShapeKind.Capsule: DrawCapsuleWireThick(s.Center, s.Radius, s.Height, s.CapsuleDirection, s.Rotation, sphereSeg, off1, off2); break; case ShapeKind.Ray: DrawRayWireThick(s.RayOrigin, s.RayDir, s.RayLength, off1, off2); break; } } private void DrawBoxWireThin(Vector3 center, Vector3 size, Quaternion rot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) Vector3 val = size * 0.5f; Vector3[] array = (Vector3[])(object)new Vector3[8] { rot * new Vector3(0f - val.x, 0f - val.y, 0f - val.z) + center, rot * new Vector3(val.x, 0f - val.y, 0f - val.z) + center, rot * new Vector3(val.x, 0f - val.y, val.z) + center, rot * new Vector3(0f - val.x, 0f - val.y, val.z) + center, rot * new Vector3(0f - val.x, val.y, 0f - val.z) + center, rot * new Vector3(val.x, val.y, 0f - val.z) + center, rot * new Vector3(val.x, val.y, val.z) + center, rot * new Vector3(0f - val.x, val.y, val.z) + center }; int[,] array2 = new int[12, 2] { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 4, 5 }, { 5, 6 }, { 6, 7 }, { 7, 4 }, { 0, 4 }, { 1, 5 }, { 2, 6 }, { 3, 7 } }; for (int i = 0; i < 12; i++) { Vector3 val2 = array[array2[i, 0]]; Vector3 val3 = array[array2[i, 1]]; GL.Vertex(val2); GL.Vertex(val3); } } private void DrawBoxWireThick(Vector3 center, Vector3 size, Quaternion rot, Vector3 off1, Vector3 off2) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid I