Decompiled source of BetterPlayerDistance v0.1.17
BetterPlayerDistance.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BetterPlayerDistance")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("High Performance Distance Display")] [assembly: AssemblyFileVersion("0.1.16.0")] [assembly: AssemblyInformationalVersion("0.1.16+c785f022e43b3a8daf7dabdeecb08500b5364cde")] [assembly: AssemblyProduct("BetterPlayerDistance")] [assembly: AssemblyTitle("BetterPlayerDistance")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.16.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 BetterPlayerDistance { public enum TriggerModeEnum { Toggle, Hold, AlwaysOn } public static class Configuration { public static ConfigEntry<bool> ShowName; public static ConfigEntry<bool> ShowDistance; public static ConfigEntry<KeyCode> ToggleKey; public static ConfigEntry<TriggerModeEnum> TriggerMode; public static ConfigEntry<float> ToggleDuration; public static ConfigEntry<float> HoldKeepDuration; public static ConfigEntry<float> MinDistance; public static ConfigEntry<float> MaxDistance; public static ConfigEntry<float> NameFontSize; public static ConfigEntry<float> DistFontSize; public static ConfigEntry<float> GlobalOpacity; public static ConfigEntry<bool> EnableDownedLabel; public static ConfigEntry<bool> UseDownedIcon; public static ConfigEntry<bool> EnableDownedEdgeIndicator; public static ConfigEntry<float> DownedFontSize; public static ConfigEntry<float> DownedIconSize; public static ConfigEntry<float> DownedEdgeIconSize; public const float FixedShadowSpread = 1.5f; public const float FixedShadowAlpha = 0.8f; public const float FixedDownedEdgeMargin = 60f; public const float FixedDownedBreathPeriod = 1.5f; public const float FixedDownedBreathMinAlpha = 0.6f; public const float FixedDownedDeadMarkerDuration = 5f; public const bool FixedHighQuality = false; public static readonly Color FixedShadowColor = new Color(0.267f, 0.275f, 0.216f, 1f); public static ConfigEntry<bool> DebugMode; public static ConfigEntry<KeyCode> DebugMenuKey; public static ConfigEntry<bool> DisableTMPWarnings; private const string CAT_BASIC = "1. 基础 (Basic)"; private const string CAT_UI = "2. 界面 (UI)"; private const string CAT_DEBUG = "3. 调试 (Debug)"; public static void Initialize(ConfigFile config) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Expected O, but got Unknown //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Expected O, but got Unknown ToggleKey = config.Bind<KeyCode>("1. 基础 (Basic)", "快捷键 (Hotkey)", (KeyCode)99, "显示/隐藏玩家标签的按键;Hold/Toggle/AlwaysOn 三种模式均可用。\nHotkey to show/hide player labels; works in all three modes (Hold/Toggle/AlwaysOn)."); TriggerMode = config.Bind<TriggerModeEnum>("1. 基础 (Basic)", "显示模式 (Display Mode)", TriggerModeEnum.Hold, new ConfigDescription("Hold=按住显示;Toggle=切换开关;AlwaysOn=常显(默认全程显示,可按快捷键手动隐藏/恢复)。\nHold = press to show; Toggle = press to switch; AlwaysOn = always-on by default, hotkey toggles a user-hide flag.", (AcceptableValueBase)null, Array.Empty<object>())); ToggleDuration = config.Bind<float>("1. 基础 (Basic)", "切换显示时长 (Toggle Duration)", 10f, new ConfigDescription("Toggle 模式下按一次后保持显示的秒数。\nHow many seconds labels stay visible after a single press in Toggle mode.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 9999f), Array.Empty<object>())); HoldKeepDuration = config.Bind<float>("1. 基础 (Basic)", "松手保持时长 (Hold Release Linger)", 1f, new ConfigDescription("Hold 模式下松开按键后继续显示的秒数。\nHow many extra seconds labels linger after the key is released in Hold mode.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>())); ShowName = config.Bind<bool>("2. 界面 (UI)", "显示名称 (Show Name)", true, "是否显示玩家名字。\nWhether to display the player name."); ShowDistance = config.Bind<bool>("2. 界面 (UI)", "显示距离 (Show Distance)", true, "是否显示距离数值。\nWhether to display the distance number."); MinDistance = config.Bind<float>("2. 界面 (UI)", "最小显示距离 (Min Display Distance)", 15f, new ConfigDescription("小于此距离不显示(米)。\nPlayers closer than this distance are hidden (meters).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 50f), Array.Empty<object>())); MaxDistance = config.Bind<float>("2. 界面 (UI)", "最大显示距离 (Max Display Distance)", 1000f, new ConfigDescription("超过此距离不显示(米)。\nPlayers farther than this distance are hidden (meters).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(50f, 1500f), Array.Empty<object>())); NameFontSize = config.Bind<float>("2. 界面 (UI)", "名字字号 (Name Font Size)", 16f, new ConfigDescription("玩家名字字体大小。\nFont size for the player name.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(9f, 60f), Array.Empty<object>())); DistFontSize = config.Bind<float>("2. 界面 (UI)", "距离字号 (Distance Font Size)", 17f, new ConfigDescription("距离数值字体大小。\nFont size for the distance number.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(9f, 60f), Array.Empty<object>())); GlobalOpacity = config.Bind<float>("2. 界面 (UI)", "整体透明度 (Global Opacity)", 0.85f, new ConfigDescription("整体不透明度 (0-1)。\nOverall opacity (0-1).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); DebugMode = config.Bind<bool>("3. 调试 (Debug)", "启用调试工具 (Enable Debug Tools)", true, "Insert 键呼出调试控制台。\nPress Insert to summon the debug console."); DebugMenuKey = config.Bind<KeyCode>("3. 调试 (Debug)", "调试菜单键 (Debug Menu Key)", (KeyCode)277, "打开调试控制台的按键。\nKey used to open the debug console."); DisableTMPWarnings = config.Bind<bool>("3. 调试 (Debug)", "禁用全局TMP缺字警告 (Disable TMP Missing-Glyph Warnings)", true, "开启后将禁止 TextMeshPro 向控制台输出缺字警告,可显著解决特殊字符导致的掉帧问题(开发者请关闭)。\nWhen on, suppresses TextMeshPro missing-glyph warnings to avoid console spam and frame drops (developers should disable this)."); } } internal static class DownedConfiguration { private const string Category = "4. 昏迷指向 (Downed Pointer)"; public static void Initialize(ConfigFile config) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown Configuration.EnableDownedLabel = config.Bind<bool>("4. 昏迷指向 (Downed Pointer)", "显示昏迷计时 (Show Downed Timer)", true, "总开关:在昏迷玩家头顶显示倒计时标签。\nMaster switch: show a countdown label above downed players."); Configuration.UseDownedIcon = config.Bind<bool>("4. 昏迷指向 (Downed Pointer)", "以图标形式显示昏迷 (Use Downed Icon)", true, "启用后以表情图标表示昏迷/死亡状态;关闭后用「昏迷/死亡」文字替代图标。\nWhen on, a face icon marks downed/dead players; when off, the text 昏迷/死亡 replaces the icon."); Configuration.EnableDownedEdgeIndicator = config.Bind<bool>("4. 昏迷指向 (Downed Pointer)", "显示屏幕边缘昏迷指示器 (Show Edge Indicator)", true, "屏幕外的昏迷/死亡玩家在屏幕边缘显示指示器。\nShow an indicator at the screen edge for off-screen downed/dead players."); Configuration.DownedFontSize = config.Bind<float>("4. 昏迷指向 (Downed Pointer)", "昏迷标签字号 (Downed Label Font Size)", 18f, new ConfigDescription("昏迷倒计时文字的字体大小;与玩家名称的间距会随字号自动调整避免重叠。\nFont size of the downed countdown text; spacing above the player label auto-adjusts to avoid overlap.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(9f, 60f), Array.Empty<object>())); Configuration.DownedIconSize = config.Bind<float>("4. 昏迷指向 (Downed Pointer)", "标签图标大小 (Label Icon Size)", 20f, new ConfigDescription("头顶昏迷标签中表情图标的像素大小。\nPixel size of the face icon in the overhead downed label.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(12f, 96f), Array.Empty<object>())); Configuration.DownedEdgeIconSize = config.Bind<float>("4. 昏迷指向 (Downed Pointer)", "指示器图标大小 (Edge Icon Size)", 30f, new ConfigDescription("屏幕边缘指示器中表情图标的像素大小。\nPixel size of the face icon in the screen-edge indicator.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(12f, 96f), Array.Empty<object>())); } } public sealed class DownedManager { private sealed class State { public Character Character; public GameObject LabelRoot; public GameObject EdgeRoot; public Image LabelRing; public Image LabelFace; public RectTransform LabelIcon; public RectTransform EdgeIcon; public CanvasGroup LabelGroup; public CanvasGroup EdgeGroup; public float Fade; public float BreathPhase; public Image EdgeRing; public Image EdgeFace; public TextMeshProUGUI LabelText; public TextMeshProUGUI EdgeName; public List<TextMeshProUGUI> LabelShadows = new List<TextMeshProUGUI>(); public List<TextMeshProUGUI> EdgeShadows = new List<TextMeshProUGUI>(); public float LastDeathTimer; public float Rate; public float LastUpdate; public float DeadUntil; public bool HasGrowth; public bool WasDead; public bool IsFake; public GameObject Owner; public Transform Target; public string DisplayName; public Color FakeColor; public float FakeRate; public float FakeTimer; public bool FakeDead; } private readonly Dictionary<Character, State> _states = new Dictionary<Character, State>(); private readonly List<State> _fakeStates = new List<State>(); private readonly HashSet<Character> _seen = new HashSet<Character>(); private readonly List<Character> _stale = new List<Character>(); private Canvas _canvas; private Texture2D _faceTexture; private Texture2D _deadTexture; private Texture2D _ringTexture; private Sprite _faceSprite; private Sprite _deadSprite; private Sprite _ringSprite; private Camera _camera; private const float FadeDuration = 0.6f; private const string RingPngBase64 = "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"; private const string FacePngBase64 = "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"; private const string DeadPngBase64 = "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"; public DownedManager() { CreateCanvas(); CreateTextures(); } public void Dispose() { foreach (State value in _states.Values) { if ((Object)(object)value.LabelRoot != (Object)null) { Object.Destroy((Object)(object)value.LabelRoot); } if ((Object)(object)value.EdgeRoot != (Object)null) { Object.Destroy((Object)(object)value.EdgeRoot); } } _states.Clear(); foreach (State fakeState in _fakeStates) { if ((Object)(object)fakeState.LabelRoot != (Object)null) { Object.Destroy((Object)(object)fakeState.LabelRoot); } if ((Object)(object)fakeState.EdgeRoot != (Object)null) { Object.Destroy((Object)(object)fakeState.EdgeRoot); } } _fakeStates.Clear(); if ((Object)(object)_canvas != (Object)null) { Object.Destroy((Object)(object)((Component)_canvas).gameObject); } if ((Object)(object)_faceSprite != (Object)null) { Object.Destroy((Object)(object)_faceSprite); } if ((Object)(object)_deadSprite != (Object)null) { Object.Destroy((Object)(object)_deadSprite); } if ((Object)(object)_ringSprite != (Object)null) { Object.Destroy((Object)(object)_ringSprite); } if ((Object)(object)_faceTexture != (Object)null) { Object.Destroy((Object)(object)_faceTexture); } if ((Object)(object)_deadTexture != (Object)null) { Object.Destroy((Object)(object)_deadTexture); } if ((Object)(object)_ringTexture != (Object)null) { Object.Destroy((Object)(object)_ringTexture); } } public void LateUpdate() { if (Configuration.EnableDownedLabel == null || Configuration.EnableDownedEdgeIndicator == null) { return; } if (!Configuration.EnableDownedLabel.Value && !Configuration.EnableDownedEdgeIndicator.Value) { HideAll(); return; } if ((Object)(object)_canvas == (Object)null) { CreateCanvas(); } _camera = Camera.main; if ((Object)(object)_camera == (Object)null || (Object)(object)_canvas == (Object)null) { return; } _seen.Clear(); List<Character> allCharacters = Character.AllCharacters; for (int i = 0; i < allCharacters.Count; i++) { Character val = allCharacters[i]; if (!((Object)(object)val == (Object)null) && !((Object)(object)val == (Object)(object)Character.localCharacter) && ((Object)val).name.IndexOf("Bot", StringComparison.OrdinalIgnoreCase) < 0) { _seen.Add(val); UpdateState(GetState(val)); } } _stale.Clear(); foreach (KeyValuePair<Character, State> state2 in _states) { if (!_seen.Contains(state2.Key) || (Object)(object)state2.Key == (Object)null) { _stale.Add(state2.Key); } } foreach (Character item in _stale) { RemoveState(item); } for (int num = _fakeStates.Count - 1; num >= 0; num--) { State state = _fakeStates[num]; if ((Object)(object)state.Owner == (Object)null) { RemoveFakeState(state); } else { UpdateFakeState(state); } } } public void RegisterFakeTarget(GameObject owner, Transform target, string displayName, Color color) { //IL_0035: 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) if (!((Object)(object)owner == (Object)null) && !((Object)(object)target == (Object)null)) { State state = new State { IsFake = true, Owner = owner, Target = target, DisplayName = displayName, FakeColor = color, FakeRate = 1f / 60f, LastUpdate = Time.unscaledTime }; CreateViews(state); _fakeStates.Add(state); } } public void MarkAllFakeTargetsDead() { float unscaledTime = Time.unscaledTime; foreach (State fakeState in _fakeStates) { fakeState.FakeDead = true; fakeState.DeadUntil = unscaledTime + 5f; } } public void ClearFakeTargets() { foreach (State fakeState in _fakeStates) { if ((Object)(object)fakeState.LabelRoot != (Object)null) { Object.Destroy((Object)(object)fakeState.LabelRoot); } if ((Object)(object)fakeState.EdgeRoot != (Object)null) { Object.Destroy((Object)(object)fakeState.EdgeRoot); } } _fakeStates.Clear(); } private State GetState(Character character) { if (_states.TryGetValue(character, out var value)) { return value; } value = new State { Character = character, LastDeathTimer = character.data.deathTimer, LastUpdate = Time.unscaledTime }; _states.Add(character, value); return value; } private void UpdateState(State state) { //IL_012b: 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_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) Character character = state.Character; if ((Object)(object)character == (Object)null || (Object)(object)character.data == (Object)null) { Hide(state); return; } float unscaledTime = Time.unscaledTime; float num = Mathf.Clamp01(character.data.deathTimer); float num2 = num - state.LastDeathTimer; float num3 = Mathf.Max(0.001f, unscaledTime - state.LastUpdate); if (num2 > 1E-05f) { float num4 = num2 / num3; state.Rate = ((state.Rate <= 0f) ? num4 : Mathf.Lerp(state.Rate, num4, 0.2f)); state.HasGrowth = true; } state.LastDeathTimer = num; state.LastUpdate = unscaledTime; bool dead = character.data.dead; if (dead && !state.WasDead) { state.DeadUntil = unscaledTime + 5f; } state.WasDead = dead; bool num5 = !dead && character.data.fullyPassedOut && state.HasGrowth; bool flag = dead && unscaledTime <= state.DeadUntil; if (!num5 && !flag) { Hide(state); if (!dead && !character.data.fullyPassedOut) { state.HasGrowth = false; } return; } Color playerColor = GetPlayerColor(character); float alpha = BreathAlpha(state, 1f - num); string text = (flag ? "DEAD" : BuildCountdown(num, state.Rate)); EnsureViews(state); state.Fade = Mathf.MoveTowards(state.Fade, 1f, Time.unscaledDeltaTime / 0.6f); ApplyCurrentFont(state); UpdateLabel(state, GetTarget(character), Tracking.ExtractDisplayName(((Object)character).name), playerColor, flag, text, alpha); UpdateEdge(state, GetTarget(character), Tracking.ExtractDisplayName(((Object)character).name), playerColor, flag, alpha); } private void UpdateFakeState(State state) { //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)state.Target == (Object)null) { Hide(state); return; } float unscaledTime = Time.unscaledTime; float num = Mathf.Max(0.001f, unscaledTime - state.LastUpdate); if (!state.FakeDead) { state.FakeTimer = Mathf.Min(1f, state.FakeTimer + num * state.FakeRate); if (state.FakeTimer >= 1f) { state.FakeTimer = 1f; state.FakeDead = true; state.DeadUntil = unscaledTime + 5f; } } state.LastUpdate = unscaledTime; bool flag = state.FakeDead && unscaledTime <= state.DeadUntil; if (!flag && state.FakeDead) { Hide(state); return; } float alpha = BreathAlpha(state, 1f - state.FakeTimer); string text = (flag ? "DEAD" : BuildCountdown(state.FakeTimer, state.FakeRate)); EnsureViews(state); state.Fade = Mathf.MoveTowards(state.Fade, 1f, Time.unscaledDeltaTime / 0.6f); ApplyCurrentFont(state); UpdateLabel(state, state.Target, state.DisplayName, state.FakeColor, flag, text, alpha); UpdateEdge(state, state.Target, state.DisplayName, state.FakeColor, flag, alpha); } private string BuildCountdown(float timer, float rate) { int num = Mathf.FloorToInt(Mathf.Clamp01(1f - timer) * 100f); if (rate > 1E-05f) { int num2 = Mathf.Max(0, Mathf.CeilToInt(Mathf.Max(0f, 1f - timer) / rate)); return $"{num}% | {num2}s"; } return $"{num}%"; } private void UpdateLabel(State state, Transform target, string displayName, Color playerColor, bool dead, string text, float alpha) { //IL_0020: 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_002f: 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_0039: 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_003f: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) if (!Configuration.EnableDownedLabel.Value) { state.LabelRoot.SetActive(false); return; } Vector3 val = _camera.WorldToScreenPoint(target.position + Vector3.up * 1.2f); bool flag = val.z > 0f && val.x >= 0f && val.x <= (float)Screen.width && val.y >= 0f && val.y <= (float)Screen.height; state.LabelRoot.SetActive(flag); if (!flag) { return; } state.LabelGroup.alpha = state.Fade; float value = Configuration.DownedFontSize.Value; float num = ((Configuration.NameFontSize != null) ? ((Configuration.NameFontSize.Value + Configuration.DistFontSize.Value) * 0.7f) : 24f); state.LabelRoot.transform.position = val + Vector3.up * (num + value * 0.5f); bool value2 = Configuration.UseDownedIcon.Value; ((Component)state.LabelIcon).gameObject.SetActive(value2); string text2 = (value2 ? text : (dead ? "死亡" : ("昏迷 " + text))); ((TMP_Text)state.LabelText).fontSize = value; ((TMP_Text)state.LabelText).text = text2; float x = ((TMP_Text)state.LabelText).GetPreferredValues(text2).x; if (value2) { float value3 = Configuration.DownedIconSize.Value; state.LabelIcon.sizeDelta = new Vector2(value3, value3); state.LabelIcon.anchoredPosition = new Vector2(0f - (x * 0.5f + value3 * 0.5f + 5f), -1.5f); ((Graphic)state.LabelRing).color = WithAlpha(playerColor, alpha); state.LabelFace.sprite = (dead ? _deadSprite : _faceSprite); ((Graphic)state.LabelFace).color = WithAlpha(Color.white, alpha); } ApplyTextStyle(state.LabelText, state.LabelShadows, alpha); foreach (TextMeshProUGUI labelShadow in state.LabelShadows) { ((TMP_Text)labelShadow).text = text2; } } private void UpdateEdge(State state, Transform target, string displayName, Color playerColor, bool dead, float alpha) { //IL_0020: 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_002a: 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_0038: 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_0075: 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_00c7: 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_00e1: 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_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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0185: 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_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018e: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0212: 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_0246: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) state.EdgeRoot.SetActive(false); if (!Configuration.EnableDownedEdgeIndicator.Value) { return; } Vector3 val = _camera.WorldToViewportPoint(target.position); if (val.z > 0f && val.x >= -0.02f && val.x <= 1.02f && val.y >= -0.02f && val.y <= 1.02f) { return; } if (val.z < 0f) { val.x = 1f - val.x; val.y = 1f - val.y; } Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor((float)Screen.width * 0.5f, (float)Screen.height * 0.5f); Vector2 val3 = new Vector2(val.x * (float)Screen.width, val.y * (float)Screen.height) - val2; if (((Vector2)(ref val3)).sqrMagnitude < 0.01f) { val3 = Vector2.up; } float num = Mathf.Clamp(60f, 10f, (float)Mathf.Min(Screen.width, Screen.height) * 0.45f); float num2 = (float)Screen.width * 0.5f - num; float num3 = (float)Screen.height * 0.5f - num; float num4 = Mathf.Min(num2 / Mathf.Max(0.001f, Mathf.Abs(val3.x)), num3 / Mathf.Max(0.001f, Mathf.Abs(val3.y))); state.EdgeRoot.transform.position = Vector2.op_Implicit(val2 + val3 * num4); state.EdgeRoot.SetActive(true); state.EdgeGroup.alpha = state.Fade; bool value = Configuration.UseDownedIcon.Value; float value2 = Configuration.DownedFontSize.Value; float value3 = Configuration.DownedEdgeIconSize.Value; ((Component)state.EdgeIcon).gameObject.SetActive(value); if (value) { state.EdgeIcon.sizeDelta = new Vector2(value3, value3); ((Graphic)state.EdgeRing).color = WithAlpha(playerColor, alpha); state.EdgeFace.sprite = (dead ? _deadSprite : _faceSprite); ((Graphic)state.EdgeFace).color = WithAlpha(Color.white, alpha); } string text = (value ? displayName : (displayName + "\n" + (dead ? "死亡" : "昏迷"))); ((TMP_Text)state.EdgeName).fontSize = value2; ((TMP_Text)state.EdgeName).rectTransform.anchoredPosition = new Vector2(0f, (value ? (value3 * 0.5f) : 0f) + value2 * 0.8f + 4f); ((TMP_Text)state.EdgeName).text = text; ApplyTextStyle(state.EdgeName, state.EdgeShadows, alpha); foreach (TextMeshProUGUI edgeShadow in state.EdgeShadows) { ((TMP_Text)edgeShadow).text = text; } } private void ApplyTextStyle(TextMeshProUGUI main, List<TextMeshProUGUI> shadows, float alpha) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)main == (Object)null)) { Color fixedShadowColor = Configuration.FixedShadowColor; fixedShadowColor.a = 0.8f; Color color = default(Color); ((Color)(ref color))..ctor(0.875f, 0.855f, 0.761f, alpha); ((Graphic)main).color = color; float num = 1.5f; Vector2[] array = (Vector2[])(object)new Vector2[8] { new Vector2(0f, 1f), new Vector2(0f, -1f), new Vector2(-1f, 0f), new Vector2(1f, 0f), new Vector2(-1f, 1f), new Vector2(1f, 1f), new Vector2(-1f, -1f), new Vector2(1f, -1f) }; for (int i = 0; i < shadows.Count && i < array.Length; i++) { ((TMP_Text)shadows[i]).font = ((TMP_Text)main).font; ((TMP_Text)shadows[i]).fontSize = ((TMP_Text)main).fontSize; ((TMP_Text)shadows[i]).alignment = ((TMP_Text)main).alignment; ((TMP_Text)shadows[i]).overflowMode = ((TMP_Text)main).overflowMode; ((TMP_Text)shadows[i]).rectTransform.sizeDelta = ((TMP_Text)main).rectTransform.sizeDelta; ((Transform)((TMP_Text)shadows[i]).rectTransform).localScale = Vector3.one; ((Graphic)shadows[i]).color = WithAlpha(fixedShadowColor, fixedShadowColor.a * alpha); ((TMP_Text)shadows[i]).rectTransform.anchoredPosition = ((TMP_Text)main).rectTransform.anchoredPosition + array[i] * num; } } } private float BreathAlpha(State state, float remaining01) { float num = 1.5f; float num2 = 1f + 0.5f * Mathf.Clamp01(1f - remaining01); state.BreathPhase += Time.unscaledDeltaTime * num2; float num3 = (Mathf.Sin(state.BreathPhase * MathF.PI * 2f / num) + 1f) * 0.5f; return Mathf.Lerp(0.6f, 1f, num3); } private Transform GetTarget(Character character) { Transform val = ((Component)character).transform.Find("Scout/Misc/CharacterLight"); if (!((Object)(object)val != (Object)null)) { return ((Component)character).transform; } return val; } private Color GetPlayerColor(Character character) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) try { return character.refs.customization.PlayerColor; } catch { return Color.white; } } private void CreateCanvas() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_canvas != (Object)null)) { GameObject val = GameObject.Find("GAME/GUIManager"); if (!((Object)(object)val == (Object)null)) { GameObject val2 = new GameObject("Canvas_DownedAwareness", new Type[3] { typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster) }); val2.transform.SetParent(val.transform, false); _canvas = val2.GetComponent<Canvas>(); _canvas.renderMode = (RenderMode)0; _canvas.sortingOrder = 110; CanvasScaler component = val2.GetComponent<CanvasScaler>(); component.uiScaleMode = (ScaleMode)1; component.referenceResolution = new Vector2(1920f, 1080f); component.screenMatchMode = (ScreenMatchMode)0; } } } private void CreateTextures() { //IL_004e: 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_008c: 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_00ca: 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) _ringTexture = LoadIconTexture("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"); _faceTexture = LoadIconTexture("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"); _deadTexture = LoadIconTexture("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"); _ringSprite = Sprite.Create(_ringTexture, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f), 128f); _faceSprite = Sprite.Create(_faceTexture, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f), 128f); _deadSprite = Sprite.Create(_deadTexture, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f), 128f); } private Texture2D LoadIconTexture(string base64) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false); ImageConversion.LoadImage(val, Convert.FromBase64String(base64), false); ((Texture)val).filterMode = (FilterMode)1; return val; } private void EnsureViews(State state) { if ((Object)(object)state.LabelRoot == (Object)null) { CreateViews(state); } } private void CreateViews(State state) { //IL_0097: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) state.LabelRoot = CreateRoot("DownedLabel"); state.LabelGroup = state.LabelRoot.GetComponent<CanvasGroup>(); GameObject val = CreateIcon(state.LabelRoot.transform, Configuration.DownedIconSize.Value, out state.LabelRing, out state.LabelFace); state.LabelIcon = val.GetComponent<RectTransform>(); state.LabelText = CreateText(state.LabelRoot.transform, "DownedText", Configuration.DownedFontSize.Value, out state.LabelShadows); ((TMP_Text)state.LabelText).rectTransform.sizeDelta = new Vector2(150f, 32f); ((TMP_Text)state.LabelText).rectTransform.anchoredPosition = Vector2.zero; state.EdgeRoot = CreateRoot("DownedEdge"); state.EdgeGroup = state.EdgeRoot.GetComponent<CanvasGroup>(); GameObject val2 = CreateIcon(state.EdgeRoot.transform, Configuration.DownedEdgeIconSize.Value, out state.EdgeRing, out state.EdgeFace); state.EdgeIcon = val2.GetComponent<RectTransform>(); state.EdgeName = CreateText(state.EdgeRoot.transform, "Name", Configuration.DownedFontSize.Value, out state.EdgeShadows); ((TMP_Text)state.EdgeName).rectTransform.sizeDelta = new Vector2(240f, 28f); ((TMP_Text)state.EdgeName).rectTransform.anchoredPosition = new Vector2(0f, 42f); state.EdgeRoot.SetActive(false); } private void ApplyCurrentFont(State state) { TMP_FontAsset val = ((Plugin.Overlay != null) ? Plugin.Overlay.CurrentFont : null); if ((Object)(object)val == (Object)null) { return; } ((TMP_Text)state.LabelText).font = val; ((TMP_Text)state.EdgeName).font = val; foreach (TextMeshProUGUI labelShadow in state.LabelShadows) { ((TMP_Text)labelShadow).font = val; } foreach (TextMeshProUGUI edgeShadow in state.EdgeShadows) { ((TMP_Text)edgeShadow).font = val; } } private GameObject CreateRoot(string name) { //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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown GameObject val = new GameObject(name, new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val.transform.SetParent(((Component)_canvas).transform, false); CanvasGroup component = val.GetComponent<CanvasGroup>(); component.blocksRaycasts = false; component.interactable = false; return val; } private GameObject CreateIcon(Transform parent, float size, out Image ring, out Image face) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_0033: 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_0075: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown GameObject val = new GameObject("Icon", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(parent, false); val.GetComponent<RectTransform>().sizeDelta = new Vector2(size, size); GameObject val2 = new GameObject("Ring", new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image) }); val2.transform.SetParent(val.transform, false); ring = val2.GetComponent<Image>(); SetFullRect(((Graphic)ring).rectTransform); ring.preserveAspect = true; ring.sprite = _ringSprite; GameObject val3 = new GameObject("Face", new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image) }); val3.transform.SetParent(val.transform, false); face = val3.GetComponent<Image>(); SetFullRect(((Graphic)face).rectTransform); face.preserveAspect = true; face.sprite = _faceSprite; return val; } private static void SetFullRect(RectTransform rect) { //IL_0001: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) rect.anchorMin = Vector2.zero; rect.anchorMax = Vector2.one; rect.offsetMin = Vector2.zero; rect.offsetMax = Vector2.zero; } private TextMeshProUGUI CreateText(Transform parent, string name, float size, out List<TextMeshProUGUI> shadows) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) shadows = new List<TextMeshProUGUI>(); GameObject val = new GameObject(name, new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(TextMeshProUGUI) }); val.transform.SetParent(parent, false); TextMeshProUGUI component = val.GetComponent<TextMeshProUGUI>(); ((TMP_Text)component).fontSize = size; ((TMP_Text)component).alignment = (TextAlignmentOptions)514; ((Graphic)component).raycastTarget = false; ((TMP_Text)component).overflowMode = (TextOverflowModes)0; ((TMP_Text)component).enableWordWrapping = false; ((TMP_Text)component).richText = true; for (int i = 0; i < 8; i++) { GameObject val2 = new GameObject(name + "Shadow" + i, new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(TextMeshProUGUI) }); val2.transform.SetParent(parent, false); TextMeshProUGUI component2 = val2.GetComponent<TextMeshProUGUI>(); ((TMP_Text)component2).fontSize = size; ((TMP_Text)component2).alignment = (TextAlignmentOptions)514; ((Graphic)component2).raycastTarget = false; ((TMP_Text)component2).overflowMode = (TextOverflowModes)0; ((TMP_Text)component2).enableWordWrapping = false; ((TMP_Text)component2).richText = false; ((TMP_Text)component2).transform.SetAsFirstSibling(); shadows.Add(component2); } return component; } private void Hide(State state) { if ((Object)(object)state.LabelRoot == (Object)null) { state.Fade = 0f; return; } if (state.Fade > 0f) { state.Fade = Mathf.MoveTowards(state.Fade, 0f, Time.unscaledDeltaTime / 0.6f); state.LabelGroup.alpha = state.Fade; state.EdgeGroup.alpha = state.Fade; if (state.Fade > 0f) { return; } } state.LabelRoot.SetActive(false); state.EdgeRoot.SetActive(false); } private void HideAll() { foreach (State value in _states.Values) { Hide(value); } foreach (State fakeState in _fakeStates) { Hide(fakeState); } } private void RemoveState(Character character) { if (_states.TryGetValue(character, out var value)) { if ((Object)(object)value.LabelRoot != (Object)null) { Object.Destroy((Object)(object)value.LabelRoot); } if ((Object)(object)value.EdgeRoot != (Object)null) { Object.Destroy((Object)(object)value.EdgeRoot); } _states.Remove(character); } } private void RemoveFakeState(State state) { if ((Object)(object)state.LabelRoot != (Object)null) { Object.Destroy((Object)(object)state.LabelRoot); } if ((Object)(object)state.EdgeRoot != (Object)null) { Object.Destroy((Object)(object)state.EdgeRoot); } _fakeStates.Remove(state); } private static Color WithAlpha(Color color, float alpha) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) color.a = alpha; return color; } } public class OverlayManager { private Canvas _canvas; private GameObject _labelPrefab; private Transform _canvasTransform; private List<TMP_FontAsset> _availableFonts = new List<TMP_FontAsset>(); private int _currentFontIndex; private TMP_FontAsset _currentFont; private readonly Dictionary<int, PlayerLabel> _activeLabels = new Dictionary<int, PlayerLabel>(); private bool _shouldShowLabels; private float _hideTimeTimestamp; private bool _initialized; private float _lastGlobalOpacity = -1f; private bool _lastDisableWarnings = true; private TriggerModeEnum _lastTriggerMode; private bool _alwaysOnUserHidden; private float _nextFontCheckTime; private bool _isUsingFallbackFont; public int ActiveCount => _activeLabels.Count; public string CurrentFontName { get { if (!((Object)(object)_currentFont != (Object)null)) { return "None"; } return ((Object)_currentFont).name; } } public TMP_FontAsset CurrentFont => _currentFont; public OverlayManager() { SceneManager.sceneLoaded += OnSceneLoaded; } public void Dispose() { SceneManager.sceneLoaded -= OnSceneLoaded; ClearAllLabels(); if ((Object)(object)_canvas != (Object)null) { Object.Destroy((Object)(object)((Component)_canvas).gameObject); } } public void TryInitialize() { if (_initialized) { return; } try { CreateCanvasSystem(); _initialized = true; Plugin.Log.LogInfo((object)"OverlayManager: Initialized."); } catch (Exception arg) { Plugin.Log.LogError((object)$"Init Failed: {arg}"); } } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { ClearAllLabels(); _availableFonts.Clear(); _initialized = false; } private void ClearAllLabels() { foreach (PlayerLabel value in _activeLabels.Values) { value.Destroy(); } _activeLabels.Clear(); } public void UpdateInput() { if (!_initialized || (Object)(object)_canvas == (Object)null) { TryInitialize(); } else { HandleInput(); } } public void LateUpdate() { if (Configuration.ShowName == null || Configuration.ShowDistance == null) { return; } if (!Configuration.ShowName.Value && !Configuration.ShowDistance.Value) { if (_activeLabels.Count > 0) { ClearAllLabels(); } } else { if (!_initialized || (Object)(object)_canvas == (Object)null) { return; } if (Configuration.DisableTMPWarnings != null && _lastDisableWarnings != Configuration.DisableTMPWarnings.Value) { ApplyTMPSettings(); _lastDisableWarnings = Configuration.DisableTMPWarnings.Value; } if (_isUsingFallbackFont && Time.time > _nextFontCheckTime) { _nextFontCheckTime = Time.time + 1f; TryFindBetterFont(); } bool flag = Mathf.Abs(_lastGlobalOpacity - Configuration.GlobalOpacity.Value) > 0.01f; foreach (int item in _activeLabels.Keys.ToList()) { PlayerLabel playerLabel = _activeLabels[item]; if (!playerLabel.IsValid()) { playerLabel.SetVisible(visible: false); continue; } if (flag) { playerLabel.RefreshStyle(); } playerLabel.UpdateState(_shouldShowLabels); } if (flag) { _lastGlobalOpacity = Configuration.GlobalOpacity.Value; } } } public void RegisterCharacter(Character c) { if (!_initialized) { TryInitialize(); } if (!((Object)(object)c == (Object)null) && !((Object)(object)c == (Object)(object)Character.localCharacter)) { string text = Tracking.ExtractDisplayName(((Object)c).name); if (!(text == "Bot")) { Transform val = ((Component)c).transform.Find("Scout/Misc/CharacterLight"); Transform trackTarget = (((Object)(object)val != (Object)null) ? val : ((Component)c).transform); RegisterGenericTarget(((Component)c).gameObject, trackTarget, text); } } } public void RegisterFakeTarget(GameObject root, string customName) { if (!_initialized) { TryInitialize(); } if (!((Object)(object)root == (Object)null)) { Transform val = root.transform.Find("Scout/Misc/CharacterLight"); Transform trackTarget = (((Object)(object)val != (Object)null) ? val : root.transform); RegisterGenericTarget(root, trackTarget, customName); } } private void RegisterGenericTarget(GameObject owner, Transform trackTarget, string displayName) { int instanceID = ((Object)owner).GetInstanceID(); if (!_activeLabels.ContainsKey(instanceID)) { if ((Object)(object)_currentFont == (Object)null) { InitializeFonts(); } GameObject val = Object.Instantiate<GameObject>(_labelPrefab, _canvasTransform); val.SetActive(true); SetLayerRecursively(val, 5); PlayerLabel value = new PlayerLabel(trackTarget, val, _currentFont, displayName); _activeLabels.Add(instanceID, value); } } public void UnregisterCharacter(GameObject owner) { if (!((Object)(object)owner == (Object)null)) { int instanceID = ((Object)owner).GetInstanceID(); if (_activeLabels.TryGetValue(instanceID, out var value)) { value.Destroy(); _activeLabels.Remove(instanceID); } } } public void UnregisterTarget(GameObject owner) { UnregisterCharacter(owner); } public void CycleFont(int direction) { if (_availableFonts.Count == 0) { InitializeFonts(); } if (_availableFonts.Count == 0) { return; } _currentFontIndex += direction; if (_currentFontIndex >= _availableFonts.Count) { _currentFontIndex = 0; } if (_currentFontIndex < 0) { _currentFontIndex = _availableFonts.Count - 1; } _currentFont = _availableFonts[_currentFontIndex]; _isUsingFallbackFont = false; foreach (PlayerLabel value in _activeLabels.Values) { value.SetFont(_currentFont); } Plugin.Log.LogInfo((object)("Switched Font to: " + ((Object)_currentFont).name)); } private void HandleInput() { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) if (Configuration.TriggerMode == null) { return; } TriggerModeEnum value = Configuration.TriggerMode.Value; if (value != _lastTriggerMode) { _hideTimeTimestamp = 0f; _shouldShowLabels = false; _alwaysOnUserHidden = false; _lastTriggerMode = value; Plugin.Log.LogInfo((object)$"Mode changed to {value}, state reset."); } switch (value) { case TriggerModeEnum.AlwaysOn: if (Configuration.ToggleKey != null && Input.GetKeyDown(Configuration.ToggleKey.Value)) { _alwaysOnUserHidden = !_alwaysOnUserHidden; } _shouldShowLabels = !_alwaysOnUserHidden; return; case TriggerModeEnum.Toggle: if (Configuration.ToggleKey != null && Input.GetKeyDown(Configuration.ToggleKey.Value)) { float num = ((Configuration.ToggleDuration != null) ? Configuration.ToggleDuration.Value : 10f); if (Time.time < _hideTimeTimestamp) { _hideTimeTimestamp = Time.time; } else { _hideTimeTimestamp = Time.time + num; } } _shouldShowLabels = Time.time < _hideTimeTimestamp; return; } float num2 = ((Configuration.HoldKeepDuration != null) ? Configuration.HoldKeepDuration.Value : 1f); if (Configuration.ToggleKey != null) { if (Input.GetKey(Configuration.ToggleKey.Value)) { _hideTimeTimestamp = Time.time + num2 + 0.1f; } else if (Input.GetKeyUp(Configuration.ToggleKey.Value)) { _hideTimeTimestamp = Time.time + num2; } } _shouldShowLabels = Time.time < _hideTimeTimestamp; } private void CreateCanvasSystem() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_canvas != (Object)null)) { ApplyTMPSettings(); InitializeFonts(); GameObject val = new GameObject("DistanceDisplayCanvas"); Object.DontDestroyOnLoad((Object)(object)val); val.layer = 5; _canvas = val.AddComponent<Canvas>(); _canvas.renderMode = (RenderMode)0; _canvas.sortingOrder = 999; CanvasScaler obj = val.AddComponent<CanvasScaler>(); obj.uiScaleMode = (ScaleMode)1; obj.referenceResolution = new Vector2(1920f, 1080f); val.AddComponent<GraphicRaycaster>(); _canvasTransform = val.transform; CreateLabelPrefab(); } } private void ApplyTMPSettings() { if (Configuration.DisableTMPWarnings == null || !Configuration.DisableTMPWarnings.Value) { return; } try { TMP_Settings val = Resources.Load<TMP_Settings>("TMP Settings"); if ((Object)(object)val == (Object)null) { val = Resources.FindObjectsOfTypeAll<TMP_Settings>().FirstOrDefault(); } if (!((Object)(object)val != (Object)null)) { return; } FieldInfo field = typeof(TMP_Settings).GetField("m_warningsDisabled", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { field.SetValue(val, true); Plugin.Log.LogInfo((object)"TMP Warnings disabled (Reflection)."); return; } PropertyInfo property = typeof(TMP_Settings).GetProperty("warningsDisabled", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public); if (property != null && property.CanWrite) { property.SetValue(val, true); } } catch (Exception) { } } private void InitializeFonts() { _availableFonts.Clear(); try { TMP_FontAsset[] array = Resources.FindObjectsOfTypeAll<TMP_FontAsset>(); if (array != null) { TMP_FontAsset[] array2 = array; foreach (TMP_FontAsset val in array2) { if ((Object)(object)val != (Object)null && !string.IsNullOrEmpty(((Object)val).name) && (Object)(object)val.atlasTexture != (Object)null) { _availableFonts.Add(val); } } } _availableFonts.Sort((TMP_FontAsset a, TMP_FontAsset b) => string.Compare(((Object)a).name, ((Object)b).name)); } catch { } if (_availableFonts.Count > 0) { TMP_FontAsset val2 = ((IEnumerable<TMP_FontAsset>)_availableFonts).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => ((Object)f).name.IndexOf("Daruma", StringComparison.OrdinalIgnoreCase) >= 0)) ?? ((IEnumerable<TMP_FontAsset>)_availableFonts).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => ((Object)f).name.IndexOf("Noto", StringComparison.OrdinalIgnoreCase) >= 0)) ?? ((IEnumerable<TMP_FontAsset>)_availableFonts).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => ((Object)f).name.IndexOf("Liberation", StringComparison.OrdinalIgnoreCase) >= 0)); if ((Object)(object)val2 != (Object)null) { _currentFont = val2; _currentFontIndex = _availableFonts.IndexOf(val2); } else { _currentFont = _availableFonts[0]; _currentFontIndex = 0; } if (((Object)_currentFont).name.IndexOf("Daruma", StringComparison.OrdinalIgnoreCase) >= 0) { _isUsingFallbackFont = false; } else { _isUsingFallbackFont = true; } } } private void TryFindBetterFont() { try { TMP_FontAsset val = ((IEnumerable<TMP_FontAsset>)Resources.FindObjectsOfTypeAll<TMP_FontAsset>()).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => (Object)(object)f != (Object)null && ((Object)f).name.IndexOf("Daruma", StringComparison.OrdinalIgnoreCase) >= 0 && (Object)(object)f.atlasTexture != (Object)null)); if (!((Object)(object)val != (Object)null)) { return; } if (!_availableFonts.Contains(val)) { _availableFonts.Add(val); } _availableFonts.Sort((TMP_FontAsset a, TMP_FontAsset b) => string.Compare(((Object)a).name, ((Object)b).name)); _currentFont = val; _currentFontIndex = _availableFonts.IndexOf(val); _isUsingFallbackFont = false; foreach (PlayerLabel value in _activeLabels.Values) { value.SetFont(_currentFont); } Plugin.Log.LogInfo((object)("Auto-recovered Font to: " + ((Object)val).name)); } catch { } } private void CreateLabelPrefab() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown _labelPrefab = new GameObject("LabelPrefab"); _labelPrefab.transform.SetParent(_canvasTransform); _labelPrefab.layer = 5; _labelPrefab.SetActive(false); CanvasGroup obj = _labelPrefab.AddComponent<CanvasGroup>(); obj.alpha = 0f; obj.blocksRaycasts = false; obj.interactable = false; } private void SetLayerRecursively(GameObject obj, int newLayer) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown if ((Object)(object)obj == (Object)null) { return; } obj.layer = newLayer; foreach (Transform item in obj.transform) { Transform val = item; if ((Object)(object)val != (Object)null) { SetLayerRecursively(((Component)val).gameObject, newLayer); } } } } public class PlayerLabel { private Transform _targetPoint; private GameObject _rootObj; private RectTransform _rootRect; private CanvasGroup _canvasGroup; private TextMeshProUGUI _mainText; private List<TextMeshProUGUI> _shadowTexts = new List<TextMeshProUGUI>(); private string _displayName; private Camera _mainCam; private const float FADE_TIME = 0.4f; private static readonly Regex ColorTagRegex = new Regex("<color=.*?>|<\\/color>", RegexOptions.IgnoreCase); private readonly Vector2[] _offsets = (Vector2[])(object)new Vector2[8] { new Vector2(0f, 1f), new Vector2(0f, -1f), new Vector2(-1f, 0f), new Vector2(1f, 0f), new Vector2(-1f, 1f), new Vector2(1f, 1f), new Vector2(-1f, -1f), new Vector2(1f, -1f) }; public PlayerLabel(Transform target, GameObject rootUiObj, TMP_FontAsset font, string name) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_0039: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00a2: 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_00b8: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Expected O, but got Unknown _targetPoint = target; _rootObj = rootUiObj; _rootRect = _rootObj.GetComponent<RectTransform>(); _canvasGroup = _rootObj.GetComponent<CanvasGroup>(); _displayName = name; _mainCam = Camera.main; for (int i = 0; i < 8; i++) { GameObject val = new GameObject($"Shadow_{i}"); val.transform.SetParent(_rootObj.transform); val.layer = 5; TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>(); SetupTextCommon(val2, font); _shadowTexts.Add(val2); } GameObject val3 = new GameObject("MainText"); val3.transform.SetParent(_rootObj.transform); val3.layer = 5; _mainText = val3.AddComponent<TextMeshProUGUI>(); SetupTextCommon(_mainText, font); RefreshStyle(); } private void SetupTextCommon(TextMeshProUGUI tmp, TMP_FontAsset font) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)tmp).alignment = (TextAlignmentOptions)514; ((Graphic)tmp).raycastTarget = false; ((TMP_Text)tmp).overflowMode = (TextOverflowModes)0; ((TMP_Text)tmp).enableWordWrapping = false; ((TMP_Text)tmp).richText = true; if ((Object)(object)font != (Object)null) { ((TMP_Text)tmp).font = font; } ((TMP_Text)tmp).rectTransform.anchoredPosition = Vector2.zero; } public bool IsValid() { if ((Object)(object)_targetPoint != (Object)null) { return ((Component)_targetPoint).gameObject.activeInHierarchy; } return false; } public void SetFont(TMP_FontAsset font) { if ((Object)(object)_mainText != (Object)null) { ((TMP_Text)_mainText).font = font; } foreach (TextMeshProUGUI shadowText in _shadowTexts) { ((TMP_Text)shadowText).font = font; } } public void RefreshStyle() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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_0064: 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) _ = Configuration.FixedShadowColor; Color fixedShadowColor = Configuration.FixedShadowColor; fixedShadowColor.a = 0.8f; Color color = default(Color); ((Color)(ref color))..ctor(0.875f, 0.855f, 0.761f, 1f); ((Graphic)_mainText).color = color; float num = 1.5f; for (int i = 0; i < 8 && i < _shadowTexts.Count; i++) { TextMeshProUGUI obj = _shadowTexts[i]; ((Graphic)obj).color = fixedShadowColor; ((TMP_Text)obj).rectTransform.anchoredPosition = _offsets[i] * num; } } public void UpdateState(bool globalShow) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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_0084: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: 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_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_00e8: 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_0102: 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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_rootObj == (Object)null || (Object)(object)_canvasGroup == (Object)null) { return; } if ((Object)(object)_mainCam == (Object)null) { _mainCam = Camera.main; } if ((Object)(object)_mainCam == (Object)null || (Object)(object)_targetPoint == (Object)null) { _canvasGroup.alpha = 0f; SetVisible(visible: false); return; } Vector3 val = _targetPoint.position + Vector3.up * 1.2f; float num = Vector3.Distance(((Component)_mainCam).transform.position, _targetPoint.position); Vector3 val2 = _mainCam.WorldToViewportPoint(val); bool flag = globalShow; if (Configuration.MinDistance != null && num < Configuration.MinDistance.Value) { flag = false; } else if (Configuration.MaxDistance != null && num > Configuration.MaxDistance.Value) { flag = false; } if (val2.z <= 0f || val2.x < 0f || val2.x > 1f || val2.y < 0f || val2.y > 1f) { _canvasGroup.alpha = 0f; SetVisible(visible: false); return; } float num2 = 2.5f; float num3 = ((Configuration.GlobalOpacity != null && flag) ? Configuration.GlobalOpacity.Value : 0f); float num4 = Mathf.MoveTowards(_canvasGroup.alpha, num3, num2 * Time.deltaTime); bool flag2 = flag || num4 > 0.01f; SetVisible(flag2); _canvasGroup.alpha = num4; if (!flag2) { return; } Vector3 position = _mainCam.WorldToScreenPoint(val); _rootObj.transform.position = position; string text = ""; if (Configuration.NameFontSize != null) { float value = Configuration.NameFontSize.Value; float value2 = Configuration.DistFontSize.Value; bool value3 = Configuration.ShowName.Value; bool value4 = Configuration.ShowDistance.Value; if (value3) { text += $"<size={value}>{_displayName}</size>"; } if (value3 && value4) { text += "\n"; } if (value4) { text += $"<size={value2}>{num:F0}m</size>"; } } ((TMP_Text)_mainText).text = text; string text2 = ColorTagRegex.Replace(text, string.Empty); foreach (TextMeshProUGUI shadowText in _shadowTexts) { ((TMP_Text)shadowText).text = text2; } } public void SetVisible(bool visible) { if (!((Object)(object)_rootObj == (Object)null) && _rootObj.activeSelf != visible) { _rootObj.SetActive(visible); } } public void Destroy() { if ((Object)(object)_rootObj != (Object)null) { Object.Destroy((Object)(object)_rootObj); } } } [BepInPlugin("com.AiAe.betterplayerdistance", "Better Player Distance", "0.1.17")] public class Plugin : BaseUnityPlugin { public static Plugin Instance; public static ManualLogSource Log; public static OverlayManager Overlay; public static DownedManager Downed; private Harmony _harmony; private bool _showDebugMenu; private string _debugNameInput = "测试员01"; private List<GameObject> _fakePlayers = new List<GameObject>(); private Rect _debugWindowRect = new Rect(20f, 20f, 350f, 500f); private bool _hasLoggedError; private bool _isConfigLoaded; private void Awake() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; try { Configuration.Initialize(((BaseUnityPlugin)this).Config); DownedConfiguration.Initialize(((BaseUnityPlugin)this).Config); _isConfigLoaded = true; } catch (Exception arg) { Log.LogError((object)$"Config Init Failed: {arg}"); _isConfigLoaded = false; } try { _harmony = new Harmony("com.AiAe.betterplayerdistance"); _harmony.PatchAll(); } catch { } Overlay = new OverlayManager(); Downed = new DownedManager(); Log.LogInfo((object)"BetterPlayerDistance v0.1.17 (AIAE) Loaded."); } private void Start() { if (Overlay != null) { Overlay.TryInitialize(); } } private void Update() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(Configuration.DebugMenuKey.Value)) { _showDebugMenu = !_showDebugMenu; if (_showDebugMenu) { Cursor.visible = true; Cursor.lockState = (CursorLockMode)0; } } if (Overlay == null) { return; } try { Overlay.UpdateInput(); } catch (Exception arg) { if (!_hasLoggedError) { Log.LogError((object)$"Overlay Input Error: {arg}"); _hasLoggedError = true; } } } private void LateUpdate() { if (Overlay != null) { try { Overlay.LateUpdate(); } catch (Exception arg) { if (!_hasLoggedError) { Log.LogError((object)$"Overlay Render Error: {arg}"); _hasLoggedError = true; } } } if (Downed == null) { return; } try { Downed.LateUpdate(); } catch (Exception arg2) { if (!_hasLoggedError) { Log.LogError((object)$"Downed Render Error: {arg2}"); _hasLoggedError = true; } } } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } Downed?.Dispose(); Overlay?.Dispose(); } private void OnGUI() { //IL_003d: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_0064: 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) if (!_showDebugMenu || !Configuration.DebugMode.Value) { return; } if (_showDebugMenu) { Cursor.visible = true; Cursor.lockState = (CursorLockMode)0; } GUI.backgroundColor = new Color(0.1f, 0.1f, 0.1f, 0.95f); try { _debugWindowRect = GUI.Window(888, _debugWindowRect, new WindowFunction(DrawDebugWindow), "调试控制台 / Debug Console [Insert]"); } catch { } } private void DrawDebugWindow(int windowID) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) GUI.DragWindow(new Rect(0f, 0f, 10000f, 20f)); GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); GUILayout.Label("BetterPlayerDistance (AIAE) <color=yellow>v0.1.17</color>", Array.Empty<GUILayoutOption>()); if (!_isConfigLoaded) { GUILayout.Label("<color=red>严重错误 / Fatal: 配置文件加载失败!Config init failed.</color>", Array.Empty<GUILayoutOption>()); GUILayout.Label("请删除 BepInEx/config 下的 .cfg 文件并重启。\nDelete the .cfg under BepInEx/config and restart.", Array.Empty<GUILayoutOption>()); } else { string text = ((Configuration.TriggerMode != null) ? Configuration.TriggerMode.Value.ToString() : "Error"); GUILayout.Label("当前模式 / Mode: <color=cyan>" + text + "</color>", Array.Empty<GUILayoutOption>()); } GUILayout.Label(string.Format("状态 / State: {0} | 标签数 / Labels: {1}", (Overlay != null) ? "Active" : "Null", Overlay?.ActiveCount ?? 0), Array.Empty<GUILayoutOption>()); GUILayout.Label("字体 / Font: " + (Overlay?.CurrentFontName ?? "Unknown"), Array.Empty<GUILayoutOption>()); GUILayout.Space(5f); GUILayout.Label("--- 性能 / Performance ---", Array.Empty<GUILayoutOption>()); if (Configuration.DisableTMPWarnings != null) { string text2 = (Configuration.DisableTMPWarnings.Value ? "开启 / On" : "关闭 / Off"); if (GUILayout.Button("禁用TMP警告 / Disable TMP Warnings: [" + text2 + "]", Array.Empty<GUILayoutOption>())) { Configuration.DisableTMPWarnings.Value = !Configuration.DisableTMPWarnings.Value; } } else { GUILayout.Label("<color=red>Config Error: DisableTMPWarnings is NULL</color>", Array.Empty<GUILayoutOption>()); } GUILayout.Space(5f); GUILayout.Label("--- 假人测试 / Fake Players ---", Array.Empty<GUILayoutOption>()); _debugNameInput = GUILayout.TextField(_debugNameInput, 20, Array.Empty<GUILayoutOption>()); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); if (GUILayout.Button("生成-前方 / Spawn (Front)", Array.Empty<GUILayoutOption>())) { SpawnFakeSafe(_debugNameInput, isColorful: false); } if (GUILayout.Button("生成-彩名 / Spawn (Colored)", Array.Empty<GUILayoutOption>())) { SpawnFakeSafe(_debugNameInput, isColorful: true); } GUILayout.EndHorizontal(); if (GUILayout.Button("清除所有假人 / Clear All Fakes", Array.Empty<GUILayoutOption>())) { ClearFakePlayers(); } GUILayout.Space(5f); GUILayout.Label("--- 昏迷测试 / Downed Test ---", Array.Empty<GUILayoutOption>()); GUILayout.BeginHorizontal(