Decompiled source of Radiance v0.2.1

Radiance.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
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 System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GlobalEnums;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using Microsoft.CodeAnalysis;
using Radiance.Behaviours.Common;
using Radiance.Behaviours.Fixed;
using Radiance.Behaviours.ImmortalLight;
using Radiance.Managers;
using Radiance.Patches;
using Radiance.Tools;
using Satchel;
using Satchel.Futils;
using TeamCherry.Localization;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

[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: AssemblyCompany("Radiance")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.2.1.0")]
[assembly: AssemblyInformationalVersion("0.2.1+91f3f6a9060da0e21b6ffbce8e7c13bd955dbf9d")]
[assembly: AssemblyProduct("Radiance")]
[assembly: AssemblyTitle("Radiance")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/xieedechunniunai/Radiance")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.2.1.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 BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace Satchel
{
	public static class FsmUtil
	{
		public static bool TryGetState(this PlayMakerFSM fsm, string stateName, out FsmState? state)
		{
			object obj;
			if (fsm == null)
			{
				obj = null;
			}
			else
			{
				Fsm fsm2 = fsm.Fsm;
				obj = ((fsm2 != null) ? fsm2.GetState(stateName) : null);
			}
			state = (FsmState?)obj;
			return state != null;
		}

		public static FsmState GetValidState(this PlayMakerFSM fsm, string stateName)
		{
			if (fsm.TryGetState(stateName, out FsmState state))
			{
				return state;
			}
			throw new ArgumentException("FSM \"" + ((fsm != null) ? fsm.FsmName : null) + "\" does not have state \"" + stateName + "\"");
		}

		public static FsmTransition? GetTransition(this FsmState state, string onEventName)
		{
			if (((state != null) ? state.Transitions : null) == null)
			{
				return null;
			}
			FsmTransition[] transitions = state.Transitions;
			foreach (FsmTransition val in transitions)
			{
				if (((val != null) ? val.EventName : null) == onEventName)
				{
					return val;
				}
			}
			return null;
		}

		public static FsmTransition? GetTransition(this PlayMakerFSM fsm, string fromStateName, string onEventName)
		{
			return fsm.GetValidState(fromStateName).GetTransition(onEventName);
		}

		public static void ChangeTransition(this FsmState state, string onEventName, string toStateName)
		{
			FsmTransition val = state.GetTransition(onEventName) ?? throw new ArgumentException("State \"" + state.Name + "\" does not have transition \"" + onEventName + "\"");
			val.ToState = toStateName;
			val.ToFsmState = state.Fsm.GetState(toStateName);
		}

		public static void ChangeTransition(this PlayMakerFSM fsm, string fromStateName, string onEventName, string toStateName)
		{
			fsm.GetValidState(fromStateName).ChangeTransition(onEventName, toStateName);
		}

		public static void RemoveTransition(this FsmState state, string onEventName)
		{
			string onEventName2 = onEventName;
			if (((state != null) ? state.Transitions : null) != null && state.Transitions.Length != 0)
			{
				state.Transitions = state.Transitions.Where((FsmTransition t) => ((t != null) ? t.EventName : null) != onEventName2).ToArray();
			}
		}

		public static void RemoveTransition(this PlayMakerFSM fsm, string fromStateName, string onEventName)
		{
			fsm.GetValidState(fromStateName).RemoveTransition(onEventName);
		}

		public static FsmStateAction GetAction(this FsmState state, int index)
		{
			return state.Actions[index];
		}

		public static FsmStateAction GetAction(this PlayMakerFSM fsm, string stateName, int index)
		{
			return fsm.GetValidState(stateName).GetAction(index);
		}

		public static T? GetAction<T>(this FsmState state, int index) where T : FsmStateAction
		{
			FsmStateAction action = state.GetAction(index);
			return (T)(object)((action is T) ? action : null);
		}

		public static T? GetAction<T>(this PlayMakerFSM fsm, string stateName, int index) where T : FsmStateAction
		{
			FsmStateAction action = fsm.GetAction(stateName, index);
			return (T)(object)((action is T) ? action : null);
		}

		public static void InsertAction(this FsmState state, FsmStateAction action, int index)
		{
			if (state == null || action == null)
			{
				return;
			}
			FsmStateAction[] array = state.Actions ?? Array.Empty<FsmStateAction>();
			index = Math.Clamp(index, 0, array.Length);
			List<FsmStateAction> list = new List<FsmStateAction>(array.Length + 1);
			for (int i = 0; i < array.Length; i++)
			{
				if (i == index)
				{
					list.Add(action);
				}
				list.Add(array[i]);
			}
			if (index == array.Length)
			{
				list.Add(action);
			}
			state.Actions = list.ToArray();
			action.Init(state);
		}

		public static void InsertAction(this PlayMakerFSM fsm, string stateName, FsmStateAction action, int index)
		{
			fsm.GetValidState(stateName).InsertAction(action, index);
		}

		public static void RemoveAction(this FsmState state, int index)
		{
			if (((state != null) ? state.Actions : null) != null && index >= 0 && index < state.Actions.Length)
			{
				List<FsmStateAction> list = state.Actions.ToList();
				list.RemoveAt(index);
				state.Actions = list.ToArray();
			}
		}

		public static void RemoveAction(this PlayMakerFSM fsm, string stateName, int index)
		{
			fsm.GetValidState(stateName).RemoveAction(index);
		}

		public static void AddCustomAction(this FsmState state, Action method)
		{
			CustomFsmAction action = new CustomFsmAction
			{
				method = method
			};
			FsmStateAction[] actions = state.Actions;
			state.InsertAction((FsmStateAction)(object)action, (actions != null) ? actions.Length : 0);
		}

		public static void AddCustomAction(this PlayMakerFSM fsm, string stateName, Action method)
		{
			fsm.GetValidState(stateName).AddCustomAction(method);
		}

		public static void InsertCustomAction(this FsmState state, Action method, int index)
		{
			state.InsertAction((FsmStateAction)(object)new CustomFsmAction
			{
				method = method
			}, index);
		}

		public static void InsertCustomAction(this PlayMakerFSM fsm, string stateName, Action method, int index)
		{
			fsm.GetValidState(stateName).InsertCustomAction(method, index);
		}

		public static void InsertCustomAction(this FsmState state, Action<FsmState> method, int index)
		{
			Action<FsmState> method2 = method;
			FsmState state2 = state;
			state2.InsertAction((FsmStateAction)(object)new CustomFsmAction
			{
				method = delegate
				{
					method2(state2);
				}
			}, index);
		}

		public static void InsertCustomAction(this PlayMakerFSM fsm, string stateName, Action<PlayMakerFSM> method, int index)
		{
			Action<PlayMakerFSM> method2 = method;
			PlayMakerFSM fsm2 = fsm;
			fsm2.GetValidState(stateName).InsertCustomAction((Action)delegate
			{
				method2(fsm2);
			}, index);
		}
	}
	public static class GameObjectUtils
	{
		public static T GetAddComponent<T>(this GameObject go) where T : Component
		{
			T val = go.GetComponent<T>();
			if ((Object)(object)val == (Object)null)
			{
				val = go.AddComponent<T>();
			}
			return val;
		}

		public static GameObject? FindGameObjectInChildren(this GameObject gameObject, string name, bool useBaseName = false)
		{
			if ((Object)(object)gameObject == (Object)null)
			{
				return null;
			}
			Transform[] componentsInChildren = gameObject.GetComponentsInChildren<Transform>(true);
			foreach (Transform val in componentsInChildren)
			{
				if (val.GetName(useBaseName) == name)
				{
					return ((Component)val).gameObject;
				}
			}
			return null;
		}

		public static void FindAllChildren(this GameObject go, List<GameObject> allGoList)
		{
			if (!((Object)(object)go == (Object)null) && allGoList != null)
			{
				for (int i = 0; i < go.transform.childCount; i++)
				{
					GameObject gameObject = ((Component)go.transform.GetChild(i)).gameObject;
					allGoList.Add(gameObject);
				}
				for (int j = 0; j < go.transform.childCount; j++)
				{
					((Component)go.transform.GetChild(j)).gameObject.FindAllChildren(allGoList);
				}
			}
		}

		public static List<GameObject> GetAllGameObjects(this Scene scene)
		{
			List<GameObject> list = new List<GameObject>();
			GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
			foreach (GameObject val in rootGameObjects)
			{
				list.Add(val);
				val.FindAllChildren(list);
			}
			return list;
		}

		public static string GetName(this Transform transform, bool useBaseName = false)
		{
			return ((Component)transform).gameObject.GetName(useBaseName);
		}

		public static string GetName(this GameObject go, bool useBaseName = false)
		{
			string name = ((Object)go).name;
			if (!useBaseName)
			{
				return name;
			}
			name = name.ToLowerInvariant();
			name = name.Replace("(clone)", string.Empty).Trim();
			name = name.Replace("cln", string.Empty).Trim();
			name = Regex.Replace(name, "\\([0-9+]+\\)", string.Empty).Trim();
			name = Regex.Replace(name, "[0-9+]+$", string.Empty).Trim();
			return name.Replace("(clone)", string.Empty).Trim();
		}
	}
	public static class SceneUtils
	{
		public static Scene getCurrentScene()
		{
			//IL_0001: 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_0009: Unknown result type (might be due to invalid IL or missing references)
			return SceneManager.GetActiveScene();
		}
	}
}
namespace Satchel.Futils
{
	public class CustomFsmAction : FsmStateAction
	{
		public Action? method;

		public CustomFsmAction()
		{
		}

		public CustomFsmAction(Action method)
		{
			this.method = method;
		}

		public override void Reset()
		{
			method = null;
			((FsmStateAction)this).Reset();
		}

		public override void OnEnter()
		{
			method?.Invoke();
			((FsmStateAction)this).Finish();
		}
	}
	public static class FsmVariables
	{
		public static NamedVariable[]? GetVariables<T>(this PlayMakerFSM fsm) where T : NamedVariable, new()
		{
			if ((Object)(object)fsm == (Object)null)
			{
				return null;
			}
			FsmVariables fsmVariables = fsm.FsmVariables;
			Type typeFromHandle = typeof(T);
			if (typeFromHandle == typeof(FsmFloat))
			{
				return (NamedVariable[]?)(object)fsmVariables.FloatVariables;
			}
			if (typeFromHandle == typeof(FsmInt))
			{
				return (NamedVariable[]?)(object)fsmVariables.IntVariables;
			}
			if (typeFromHandle == typeof(FsmBool))
			{
				return (NamedVariable[]?)(object)fsmVariables.BoolVariables;
			}
			if (typeFromHandle == typeof(FsmString))
			{
				return (NamedVariable[]?)(object)fsmVariables.StringVariables;
			}
			if (typeFromHandle == typeof(FsmVector2))
			{
				return (NamedVariable[]?)(object)fsmVariables.Vector2Variables;
			}
			if (typeFromHandle == typeof(FsmVector3))
			{
				return (NamedVariable[]?)(object)fsmVariables.Vector3Variables;
			}
			if (typeFromHandle == typeof(FsmColor))
			{
				return (NamedVariable[]?)(object)fsmVariables.ColorVariables;
			}
			if (typeFromHandle == typeof(FsmRect))
			{
				return (NamedVariable[]?)(object)fsmVariables.RectVariables;
			}
			if (typeFromHandle == typeof(FsmQuaternion))
			{
				return (NamedVariable[]?)(object)fsmVariables.QuaternionVariables;
			}
			if (typeFromHandle == typeof(FsmGameObject))
			{
				return (NamedVariable[]?)(object)fsmVariables.GameObjectVariables;
			}
			if (typeFromHandle == typeof(FsmObject))
			{
				return (NamedVariable[]?)(object)fsmVariables.ObjectVariables;
			}
			return null;
		}

		public static void SetVariables<T>(this PlayMakerFSM fsm, NamedVariable[] namedVariables) where T : NamedVariable, new()
		{
			if ((Object)(object)fsm == (Object)null || namedVariables == null)
			{
				return;
			}
			FsmVariables fsmVariables = fsm.FsmVariables;
			Type typeFromHandle = typeof(T);
			if (typeFromHandle == typeof(FsmFloat))
			{
				fsmVariables.FloatVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmFloat>)((NamedVariable v) => (FsmFloat)v));
			}
			else if (typeFromHandle == typeof(FsmInt))
			{
				fsmVariables.IntVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmInt>)((NamedVariable v) => (FsmInt)v));
			}
			else if (typeFromHandle == typeof(FsmBool))
			{
				fsmVariables.BoolVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmBool>)((NamedVariable v) => (FsmBool)v));
			}
			else if (typeFromHandle == typeof(FsmString))
			{
				fsmVariables.StringVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmString>)((NamedVariable v) => (FsmString)v));
			}
			else if (typeFromHandle == typeof(FsmVector2))
			{
				fsmVariables.Vector2Variables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmVector2>)((NamedVariable v) => (FsmVector2)v));
			}
			else if (typeFromHandle == typeof(FsmVector3))
			{
				fsmVariables.Vector3Variables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmVector3>)((NamedVariable v) => (FsmVector3)v));
			}
			else if (typeFromHandle == typeof(FsmColor))
			{
				fsmVariables.ColorVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmColor>)((NamedVariable v) => (FsmColor)v));
			}
			else if (typeFromHandle == typeof(FsmRect))
			{
				fsmVariables.RectVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmRect>)((NamedVariable v) => (FsmRect)v));
			}
			else if (typeFromHandle == typeof(FsmQuaternion))
			{
				fsmVariables.QuaternionVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmQuaternion>)((NamedVariable v) => (FsmQuaternion)v));
			}
			else if (typeFromHandle == typeof(FsmGameObject))
			{
				fsmVariables.GameObjectVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmGameObject>)((NamedVariable v) => (FsmGameObject)v));
			}
			else if (typeFromHandle == typeof(FsmObject))
			{
				fsmVariables.ObjectVariables = Array.ConvertAll(namedVariables, (Converter<NamedVariable, FsmObject>)((NamedVariable v) => (FsmObject)v));
			}
		}

		public static void AddVariable<T>(this PlayMakerFSM fsm, string name) where T : NamedVariable, new()
		{
			fsm.AddGetVariable<T>(name);
		}

		public static T? AddGetVariable<T>(this PlayMakerFSM fsm, string name) where T : NamedVariable, new()
		{
			NamedVariable[] variables = fsm.GetVariables<T>();
			if (variables == null)
			{
				return default(T);
			}
			List<T> list = new List<T>(Array.ConvertAll(variables, (NamedVariable v) => (T)(object)v));
			T val = new T();
			((NamedVariable)val).Name = name;
			T val2 = val;
			list.Add(val2);
			fsm.SetVariables<T>(Array.ConvertAll(list.ToArray(), (T v) => (NamedVariable)(object)v));
			return val2;
		}

		public static T? GetVariable<T>(this PlayMakerFSM fsm, string name) where T : NamedVariable, new()
		{
			NamedVariable[] variables = fsm.GetVariables<T>();
			if (variables == null)
			{
				return default(T);
			}
			NamedVariable[] array = variables;
			foreach (NamedVariable val in array)
			{
				T val2 = (T)(object)((val is T) ? val : null);
				if (val2 != null && ((NamedVariable)val2).Name == name)
				{
					return val2;
				}
			}
			return default(T);
		}
	}
}
namespace Radiance
{
	[BepInPlugin("io.github.xieedechunniunai.radiance", "Radiance", "0.2.1")]
	public class RadiancePlugin : BaseUnityPlugin
	{
		private Harmony? _harmony;

		private GameObject? _radianceManager;

		public const string Id = "io.github.xieedechunniunai.radiance";

		public static RadiancePlugin? Instance { get; private set; }

		public static string Name => "Radiance";

		public static string Version => "0.2.1";

		private void Awake()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			Instance = this;
			Log.Init(((BaseUnityPlugin)this).Logger);
			Configuration.Init(((BaseUnityPlugin)this).Config);
			_harmony = new Harmony("io.github.xieedechunniunai.radiance");
			_harmony.PatchAll(typeof(FsmFixPatches));
			_harmony.PatchAll(typeof(GodfinderIconPatches));
			_harmony.PatchAll(typeof(RadiancePatches));
			_harmony.PatchAll(typeof(MemoryScenePatches));
			_harmony.PatchAll(typeof(SceneTransitionPatches));
			_harmony.PatchAll(typeof(Tk2dCollectionPatches));
			_harmony.PatchAll(typeof(RadiantOrbFixPatches));
			Log.Info("Harmony patches applied");
			Configuration.EnableMod.SettingChanged += OnRuntimeFeatureSettingChanged;
			Configuration.EnableImmortalLight.SettingChanged += OnRuntimeFeatureSettingChanged;
			Configuration.EnableVanillaRadianceFix.SettingChanged += OnRuntimeFeatureSettingChanged;
			SceneManager.activeSceneChanged += OnSceneChange;
			Log.InfoAlways("Plugin " + Name + " (io.github.xieedechunniunai.radiance) has loaded!");
		}

		private void OnRuntimeFeatureSettingChanged(object sender, EventArgs e)
		{
			RadiancePatches.RefreshFeatureBehavioursInScene();
		}

		private void OnSceneChange(Scene oldScene, Scene newScene)
		{
			if (((Scene)(ref oldScene)).name == "Menu_Title")
			{
				CreateManager();
			}
		}

		private void CreateManager()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			_radianceManager = GameObject.Find("RadianceManager");
			if ((Object)(object)_radianceManager == (Object)null)
			{
				_radianceManager = new GameObject("RadianceManager");
				Object.DontDestroyOnLoad((Object)(object)_radianceManager);
				AssetManager assetManager = _radianceManager.AddComponent<AssetManager>();
				_radianceManager.AddComponent<RadianceSceneManager>();
				_radianceManager.AddComponent<ConfigUI>();
				Log.Info("Created persistent RadianceManager");
				((MonoBehaviour)this).StartCoroutine(assetManager.PreloadAllAssets());
			}
			else
			{
				Log.Info("Found existing persistent RadianceManager");
			}
		}

		private void OnDestroy()
		{
			if (Configuration.IsInitialized)
			{
				Configuration.EnableMod.SettingChanged -= OnRuntimeFeatureSettingChanged;
				Configuration.EnableImmortalLight.SettingChanged -= OnRuntimeFeatureSettingChanged;
				Configuration.EnableVanillaRadianceFix.SettingChanged -= OnRuntimeFeatureSettingChanged;
			}
			SceneManager.activeSceneChanged -= OnSceneChange;
		}
	}
	internal sealed class ConfigUI : MonoBehaviour
	{
		private bool _showGui;

		private Vector2 _scrollPosition;

		private Rect _windowRect = new Rect(20f, 20f, 480f, 420f);

		private readonly Dictionary<string, string> _texts = new Dictionary<string, string>
		{
			{ "window_title_cn", "Radiance 配置面板" },
			{ "window_title_en", "Radiance Config Panel" },
			{ "language_cn", "语言" },
			{ "language_en", "Language" },
			{ "enable_mod_cn", "模组总开关" },
			{ "enable_mod_en", "Enable Mod" },
			{ "enable_mod_desc_cn", "启用或禁用整个 Radiance 模组" },
			{ "enable_mod_desc_en", "Enable or disable the entire Radiance mod" },
			{ "enable_immortal_cn", "启用永恒之光" },
			{ "enable_immortal_en", "Enable ImmortalLight" },
			{ "enable_immortal_desc_cn", "一个强大的辐光mod" },
			{ "enable_immortal_desc_en", "A powerful Radiance mod" },
			{ "enable_vanilla_fix_cn", "修复原版辐光" },
			{ "enable_vanilla_fix_en", "Fix Vanilla Radiance" },
			{ "enable_vanilla_fix_desc_cn", "光球消散后仍造成伤害、P4动画过渡期受伤BUG修复" },
			{ "enable_vanilla_fix_desc_en", "Orb damage after dissipate, hit during Final Impact transition, etc." },
			{ "enable_shader_compat_cn", "Shader 兼容" },
			{ "enable_shader_compat_en", "Shader Compatibility" },
			{ "enable_shader_compat_desc_cn", "HK1 资源运行时 shader 修复,关闭 Mac 可能失效" },
			{ "enable_shader_compat_desc_en", "Runtime fix for HK1 shaders. Off may break on Mac" },
			{ "enable_collection_namespace_cn", "图集命名空间" },
			{ "enable_collection_namespace_en", "Collection Namespace" },
			{ "enable_collection_namespace_desc_cn", "为 Patchwork 皮肤 mod 隔离 tk2d 图集" },
			{ "enable_collection_namespace_desc_en", "Isolate tk2d collections for Patchwork skin mod" },
			{ "enable_compat_diagnostics_cn", "兼容诊断日志" },
			{ "enable_compat_diagnostics_en", "Compatibility Diagnostics" },
			{ "enable_compat_diagnostics_desc_cn", "输出 shader/皮肤兼容详细日志(调试用)" },
			{ "enable_compat_diagnostics_desc_en", "Verbose logs for shader/skin compatibility (debug)" },
			{ "apply_cn", "应用并保存" },
			{ "apply_en", "Apply & Save" },
			{ "reset_cn", "恢复默认值" },
			{ "reset_en", "Reset Defaults" },
			{ "close_cn", "关闭面板" },
			{ "close_en", "Close Panel" },
			{ "tip_cn", "打开/关闭配置面板" },
			{ "tip_en", "Open/close config panel" },
			{ "config_key_cn", "快捷键" },
			{ "config_key_en", "Hotkey" }
		};

		private void Update()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			if (Configuration.IsInitialized && Input.GetKeyDown(Configuration.GetConfigPanelKeyCode()))
			{
				_showGui = !_showGui;
			}
		}

		private void OnGUI()
		{
			//IL_0023: 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_0044: Expected O, but got Unknown
			//IL_003f: 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)
			if (_showGui && Configuration.IsInitialized)
			{
				_windowRect = GUI.Window(((Object)this).GetInstanceID(), _windowRect, new WindowFunction(DrawWindow), GetText("window_title"));
			}
		}

		private void DrawWindow(int windowId)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			_scrollPosition = GUILayout.BeginScrollView(_scrollPosition, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(300f) });
			DrawLanguageSwitch();
			GUILayout.Space(8f);
			DrawToggleRow(GetText("enable_mod"), GetText("enable_mod_desc"), Configuration.EnableMod);
			DrawToggleRow(GetText("enable_immortal"), GetText("enable_immortal_desc"), Configuration.EnableImmortalLight);
			DrawToggleRow(GetText("enable_vanilla_fix"), GetText("enable_vanilla_fix_desc"), Configuration.EnableVanillaRadianceFix);
			DrawToggleRow(GetText("enable_shader_compat"), GetText("enable_shader_compat_desc"), Configuration.EnableShaderCompatFix);
			DrawToggleRow(GetText("enable_collection_namespace"), GetText("enable_collection_namespace_desc"), Configuration.EnableCollectionNamespace);
			DrawToggleRow(GetText("enable_compat_diagnostics"), GetText("enable_compat_diagnostics_desc"), Configuration.EnableCompatDiagnostics);
			GUILayout.Space(8f);
			DrawConfigKeyRow();
			GUILayout.Space(10f);
			GUILayout.Label(GetText("tip") + ": " + (Configuration.ConfigPanelKey?.Value ?? "F6"), Array.Empty<GUILayoutOption>());
			GUILayout.EndScrollView();
			GUILayout.Space(8f);
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			if (GUILayout.Button(GetText("apply"), Array.Empty<GUILayoutOption>()))
			{
				ApplyAndSave();
			}
			if (GUILayout.Button(GetText("reset"), Array.Empty<GUILayoutOption>()))
			{
				ResetToDefaults();
			}
			if (GUILayout.Button(GetText("close"), Array.Empty<GUILayoutOption>()))
			{
				_showGui = false;
			}
			GUILayout.EndHorizontal();
			GUI.DragWindow(new Rect(0f, 0f, 10000f, 24f));
		}

		private void DrawLanguageSwitch()
		{
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label(GetText("language"), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) });
			bool value = Configuration.UseEnglish.Value;
			if (GUILayout.Button("中文", value ? GUI.skin.button : GUI.skin.box, Array.Empty<GUILayoutOption>()))
			{
				Configuration.UseEnglish.Value = false;
			}
			if (GUILayout.Button("ENGLISH", value ? GUI.skin.box : GUI.skin.button, Array.Empty<GUILayoutOption>()))
			{
				Configuration.UseEnglish.Value = true;
			}
			GUILayout.EndHorizontal();
		}

		private static void DrawToggleRow(string label, string? description, ConfigEntry<bool> entry)
		{
			//IL_003b: 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_0050: 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)
			bool flag = GUILayout.Toggle(entry.Value, label, Array.Empty<GUILayoutOption>());
			if (flag != entry.Value)
			{
				entry.Value = flag;
			}
			if (!string.IsNullOrEmpty(description))
			{
				Color color = GUI.color;
				GUI.color = new Color(0.7f, 0.7f, 0.7f);
				GUILayout.Label(description, GUI.skin.label, Array.Empty<GUILayoutOption>());
				GUI.color = color;
			}
		}

		private void DrawConfigKeyRow()
		{
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label(GetText("config_key"), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) });
			string text = GUILayout.TextField(Configuration.ConfigPanelKey?.Value ?? "F6", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) });
			if (!string.IsNullOrWhiteSpace(text) && !string.Equals(text, Configuration.ConfigPanelKey?.Value, StringComparison.Ordinal))
			{
				Configuration.ConfigPanelKey.Value = text.Trim();
			}
			GUILayout.EndHorizontal();
		}

		private void ApplyAndSave()
		{
			try
			{
				RadiancePlugin? instance = RadiancePlugin.Instance;
				if (instance != null)
				{
					((BaseUnityPlugin)instance).Config.Save();
				}
				Log.InfoAlways("[ConfigUI] Applied and saved configuration.");
			}
			catch (Exception ex)
			{
				Log.Error("[ConfigUI] Failed to apply config: " + ex.Message);
			}
		}

		private void ResetToDefaults()
		{
			try
			{
				Configuration.ResetToDefaults();
				RadiancePlugin? instance = RadiancePlugin.Instance;
				if (instance != null)
				{
					((BaseUnityPlugin)instance).Config.Save();
				}
				Log.InfoAlways("[ConfigUI] Reset configuration to defaults.");
			}
			catch (Exception ex)
			{
				Log.Error("[ConfigUI] Failed to reset config: " + ex.Message);
			}
		}

		private string GetText(string key)
		{
			string text = (Configuration.UseEnglish.Value ? "_en" : "_cn");
			string value;
			return _texts.TryGetValue(key + text, out value) ? value : key;
		}
	}
	internal static class Configuration
	{
		public static bool IsInitialized { get; private set; }

		public static ConfigEntry<bool> EnableMod { get; private set; }

		public static ConfigEntry<bool> UseEnglish { get; private set; }

		public static ConfigEntry<bool> EnableImmortalLight { get; private set; }

		public static ConfigEntry<bool> EnableVanillaRadianceFix { get; private set; }

		public static ConfigEntry<bool> EnableShaderCompatFix { get; private set; }

		public static ConfigEntry<bool> EnableCollectionNamespace { get; private set; }

		public static ConfigEntry<bool> EnableCompatDiagnostics { get; private set; }

		public static ConfigEntry<string> ConfigPanelKey { get; private set; }

		public static bool IsModEnabled => IsInitialized && EnableMod.Value;

		public static bool IsImmortalLightEnabled => IsModEnabled && EnableImmortalLight.Value;

		public static bool IsVanillaRadianceFixEnabled => IsModEnabled && EnableVanillaRadianceFix.Value;

		public static bool IsShaderCompatEnabled => IsModEnabled && EnableShaderCompatFix.Value;

		public static bool IsCollectionNamespaceEnabled => IsModEnabled && EnableCollectionNamespace.Value;

		public static bool IsCompatDiagnosticsEnabled => IsModEnabled && EnableCompatDiagnostics.Value;

		public static void Init(ConfigFile config)
		{
			if (!IsInitialized)
			{
				EnableMod = config.Bind<bool>("General", "EnableMod", true, "[EN] Master switch: enable or disable the entire Radiance mod.\n[中] 模组总开关:启用或禁用整个 Radiance 模组。");
				EnableImmortalLight = config.Bind<bool>("Features", "EnableImmortalLight", false, "[EN] Enable ImmortalLight content: Belltown entry point and custom GG_Radiance story flow.\n[中] 永恒之光内容:从 Belltown 进入入口及自定义剧情流程。");
				EnableVanillaRadianceFix = config.Bind<bool>("Features", "EnableVanillaRadianceFix", true, "[EN] Fix vanilla Absolute Radiance bugs: orphan orb damage after dissipate, getting hit during Death Ready→Final Impact transition.\n[中] 修复原版无上辐光 bug:Orb 消散后仍造成伤害、Death Ready 到 Final Impact 过渡期受伤等。");
				EnableShaderCompatFix = config.Bind<bool>("Compatibility", "EnableShaderCompatFix", true, "[EN] Runtime shader compatibility for HK1 assets. Disable to use original shaders (may break on Mac).\n[中] HK1 资源的运行时 shader 兼容。关闭则使用原版 shader(Mac 可能失效)。");
				EnableCollectionNamespace = config.Bind<bool>("Compatibility", "EnableCollectionNamespace", true, "[EN] Rename tk2d collections with (HK1) suffix for Patchwork skin mod compatibility.\n[中] 为 tk2d 图集添加 (HK1) 后缀,以兼容 Patchwork 皮肤 mod。");
				EnableCompatDiagnostics = config.Bind<bool>("Compatibility", "EnableCompatDiagnostics", false, "[EN] Emit verbose logs for shader and skin compatibility (for debugging).\n[中] 输出 shader/皮肤兼容相关的详细日志(用于调试)。");
				ConfigPanelKey = config.Bind<string>("UI", "ConfigPanelKey", "F6", "[EN] Hotkey to open/close the in-game config panel.\n[中] 打开/关闭配置面板的快捷键。");
				UseEnglish = config.Bind<bool>("UI", "UseEnglish", false, "[EN] Use English in the in-game config panel.\n[中] 配置面板使用英文显示。");
				IsInitialized = true;
			}
		}

		public static void ResetToDefaults()
		{
			if (IsInitialized)
			{
				EnableMod.Value = (bool)((ConfigEntryBase)EnableMod).DefaultValue;
				UseEnglish.Value = (bool)((ConfigEntryBase)UseEnglish).DefaultValue;
				EnableImmortalLight.Value = (bool)((ConfigEntryBase)EnableImmortalLight).DefaultValue;
				EnableVanillaRadianceFix.Value = (bool)((ConfigEntryBase)EnableVanillaRadianceFix).DefaultValue;
				EnableShaderCompatFix.Value = (bool)((ConfigEntryBase)EnableShaderCompatFix).DefaultValue;
				EnableCollectionNamespace.Value = (bool)((ConfigEntryBase)EnableCollectionNamespace).DefaultValue;
				EnableCompatDiagnostics.Value = (bool)((ConfigEntryBase)EnableCompatDiagnostics).DefaultValue;
				ConfigPanelKey.Value = (string)((ConfigEntryBase)ConfigPanelKey).DefaultValue;
			}
		}

		public static KeyCode GetConfigPanelKeyCode()
		{
			//IL_0023: 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_0041: 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_004d: Unknown result type (might be due to invalid IL or missing references)
			if (!IsInitialized || string.IsNullOrWhiteSpace(ConfigPanelKey.Value))
			{
				return (KeyCode)287;
			}
			if (Enum.TryParse<KeyCode>(ConfigPanelKey.Value.Trim(), ignoreCase: true, out KeyCode result))
			{
				return result;
			}
			return (KeyCode)287;
		}
	}
}
namespace Radiance.Tools
{
	public static class FsmAnalyzer
	{
		private static readonly string DefaultOutputDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "BepInEx", "plugins", "Radiance", "temp");

		public static void AnalyzeAllFsms(GameObject gameObject, string? outputDir = null)
		{
			if ((Object)(object)gameObject == (Object)null)
			{
				Log.Error("[FsmAnalyzer] GameObject 为空");
				return;
			}
			string text = outputDir ?? DefaultOutputDir;
			Directory.CreateDirectory(text);
			PlayMakerFSM[] components = gameObject.GetComponents<PlayMakerFSM>();
			Log.Info($"[FsmAnalyzer] 开始分析 {((Object)gameObject).name} 的 {components.Length} 个 FSM");
			string text2 = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
			string text3 = SanitizeFileName(((Object)gameObject).name);
			PlayMakerFSM[] array = components;
			foreach (PlayMakerFSM val in array)
			{
				string text4 = SanitizeFileName(val.FsmName);
				string text5 = text3 + "_" + text4 + "_" + text2 + ".txt";
				string outputPath = Path.Combine(text, text5);
				WriteFsmReport(val, outputPath);
				Log.Info("[FsmAnalyzer] 已输出: " + text5);
			}
			string outputPath2 = Path.Combine(text, text3 + "_Summary_" + text2 + ".txt");
			WriteSummaryReport(gameObject, components, outputPath2);
			Log.Info("[FsmAnalyzer] 已输出汇总: " + text3 + "_Summary_" + text2 + ".txt");
		}

		public static void WriteFsmReport(PlayMakerFSM fsm, string outputPath)
		{
			//IL_06a6: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)fsm == (Object)null)
			{
				return;
			}
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.AppendLine("================================================================================");
			stringBuilder.AppendLine("FSM 报告: " + fsm.FsmName);
			stringBuilder.AppendLine("GameObject: " + ((Object)((Component)fsm).gameObject).name);
			stringBuilder.AppendLine("路径: " + GetGameObjectPath(((Component)fsm).gameObject));
			stringBuilder.AppendLine($"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
			stringBuilder.AppendLine("================================================================================");
			stringBuilder.AppendLine("当前状态: " + fsm.ActiveStateName);
			stringBuilder.AppendLine("起始状态: " + fsm.Fsm.StartState);
			FsmState[] fsmStates = fsm.FsmStates;
			stringBuilder.AppendLine($"\n--- 所有状态 ({fsmStates.Length}个) ---");
			FsmState[] array = fsmStates;
			foreach (FsmState val in array)
			{
				stringBuilder.AppendLine("  - " + val.Name);
			}
			FsmEvent[] fsmEvents = fsm.FsmEvents;
			stringBuilder.AppendLine($"\n--- 所有事件 ({fsmEvents.Length}个) ---");
			FsmEvent[] array2 = fsmEvents;
			foreach (FsmEvent val2 in array2)
			{
				stringBuilder.AppendLine($"  - {val2.Name} (IsGlobal: {val2.IsGlobal})");
			}
			FsmTransition[] fsmGlobalTransitions = fsm.FsmGlobalTransitions;
			stringBuilder.AppendLine($"\n--- 全局转换 ({fsmGlobalTransitions.Length}个) ---");
			FsmTransition[] array3 = fsmGlobalTransitions;
			foreach (FsmTransition val3 in array3)
			{
				FsmEvent fsmEvent = val3.FsmEvent;
				stringBuilder.AppendLine("  " + ((fsmEvent != null) ? fsmEvent.Name : null) + " -> " + val3.toState);
			}
			stringBuilder.AppendLine("\n================================================================================");
			stringBuilder.AppendLine("各状态详情");
			stringBuilder.AppendLine("================================================================================");
			FsmState[] array4 = fsmStates;
			foreach (FsmState val4 in array4)
			{
				stringBuilder.AppendLine("\n【状态: " + val4.Name + "】");
				stringBuilder.AppendLine("  转换:");
				if (val4.Transitions != null && val4.Transitions.Length != 0)
				{
					FsmTransition[] transitions = val4.Transitions;
					foreach (FsmTransition val5 in transitions)
					{
						FsmEvent fsmEvent2 = val5.FsmEvent;
						stringBuilder.AppendLine("    " + (((fsmEvent2 != null) ? fsmEvent2.Name : null) ?? "(null)") + " -> " + val5.toState);
					}
				}
				else
				{
					stringBuilder.AppendLine("    (无转换)");
				}
				FsmStateAction[] actions = val4.Actions;
				stringBuilder.AppendLine($"  动作 ({((actions != null) ? actions.Length : 0)}个):");
				if (val4.Actions != null && val4.Actions.Length != 0)
				{
					for (int n = 0; n < val4.Actions.Length; n++)
					{
						FsmStateAction val6 = val4.Actions[n];
						if (val6 == null)
						{
							stringBuilder.AppendLine($"    [{n}] (null)");
							continue;
						}
						stringBuilder.AppendLine($"    [{n}] {((object)val6).GetType().Name}");
						AnalyzeActionVariables(stringBuilder, val6, n);
					}
				}
				else
				{
					stringBuilder.AppendLine("    (无动作)");
				}
			}
			FsmVariables fsmVariables = fsm.FsmVariables;
			stringBuilder.AppendLine("\n================================================================================");
			stringBuilder.AppendLine("FSM 变量");
			stringBuilder.AppendLine("================================================================================");
			stringBuilder.AppendLine($"Bool: {fsmVariables.BoolVariables.Length}, Int: {fsmVariables.IntVariables.Length}, Float: {fsmVariables.FloatVariables.Length}, String: {fsmVariables.StringVariables.Length}");
			stringBuilder.AppendLine($"GameObject: {fsmVariables.GameObjectVariables.Length}, Object: {fsmVariables.ObjectVariables.Length}, Vector3: {fsmVariables.Vector3Variables.Length}");
			stringBuilder.AppendLine("\n  Float 变量:");
			FsmFloat[] floatVariables = fsmVariables.FloatVariables;
			foreach (FsmFloat val7 in floatVariables)
			{
				stringBuilder.AppendLine($"    {((NamedVariable)val7).Name} = {val7.Value}");
			}
			stringBuilder.AppendLine("\n  Bool 变量:");
			FsmBool[] boolVariables = fsmVariables.BoolVariables;
			foreach (FsmBool val8 in boolVariables)
			{
				stringBuilder.AppendLine($"    {((NamedVariable)val8).Name} = {val8.Value}");
			}
			stringBuilder.AppendLine("\n  Int 变量:");
			FsmInt[] intVariables = fsmVariables.IntVariables;
			foreach (FsmInt val9 in intVariables)
			{
				stringBuilder.AppendLine($"    {((NamedVariable)val9).Name} = {val9.Value}");
			}
			stringBuilder.AppendLine("\n  String 变量:");
			FsmString[] stringVariables = fsmVariables.StringVariables;
			foreach (FsmString val10 in stringVariables)
			{
				stringBuilder.AppendLine("    " + ((NamedVariable)val10).Name + " = \"" + val10.Value + "\"");
			}
			stringBuilder.AppendLine("\n  GameObject 变量:");
			FsmGameObject[] gameObjectVariables = fsmVariables.GameObjectVariables;
			foreach (FsmGameObject val11 in gameObjectVariables)
			{
				string text = (((Object)(object)val11.Value != (Object)null) ? ((Object)val11.Value).name : "(null)");
				stringBuilder.AppendLine("    " + ((NamedVariable)val11).Name + " = " + text);
			}
			stringBuilder.AppendLine("\n  Vector3 变量:");
			FsmVector3[] vector3Variables = fsmVariables.Vector3Variables;
			foreach (FsmVector3 val12 in vector3Variables)
			{
				stringBuilder.AppendLine($"    {((NamedVariable)val12).Name} = {val12.Value}");
			}
			Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? ".");
			File.WriteAllText(outputPath, stringBuilder.ToString(), Encoding.UTF8);
		}

		private static void WriteSummaryReport(GameObject gameObject, PlayMakerFSM[] fsms, string outputPath)
		{
			GameObject gameObject2 = gameObject;
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.AppendLine("================================================================================");
			stringBuilder.AppendLine("FSM 汇总报告: " + ((Object)gameObject2).name);
			stringBuilder.AppendLine("路径: " + GetGameObjectPath(gameObject2));
			stringBuilder.AppendLine($"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
			stringBuilder.AppendLine($"FSM 数量: {fsms.Length}");
			stringBuilder.AppendLine("================================================================================");
			foreach (PlayMakerFSM val in fsms)
			{
				stringBuilder.AppendLine("\n【" + val.FsmName + "】");
				stringBuilder.AppendLine($"  状态数: {val.FsmStates.Length}");
				stringBuilder.AppendLine($"  事件数: {val.FsmEvents.Length}");
				stringBuilder.AppendLine("  起始状态: " + val.Fsm.StartState);
				stringBuilder.AppendLine("  状态列表:");
				FsmState[] fsmStates = val.FsmStates;
				foreach (FsmState val2 in fsmStates)
				{
					FsmStateAction[] actions = val2.Actions;
					int num = ((actions != null) ? actions.Length : 0);
					FsmTransition[] transitions = val2.Transitions;
					int num2 = ((transitions != null) ? transitions.Length : 0);
					stringBuilder.AppendLine($"    - {val2.Name} ({num} actions, {num2} transitions)");
				}
			}
			stringBuilder.AppendLine("\n================================================================================");
			stringBuilder.AppendLine("子对象 FSM");
			stringBuilder.AppendLine("================================================================================");
			PlayMakerFSM[] componentsInChildren = gameObject2.GetComponentsInChildren<PlayMakerFSM>(true);
			PlayMakerFSM[] array = componentsInChildren.Where((PlayMakerFSM f) => (Object)(object)((Component)f).gameObject != (Object)(object)gameObject2).ToArray();
			stringBuilder.AppendLine($"子对象 FSM 数量: {array.Length}");
			PlayMakerFSM[] array2 = array;
			foreach (PlayMakerFSM val3 in array2)
			{
				stringBuilder.AppendLine($"  {GetGameObjectPath(((Component)val3).gameObject)} -> {val3.FsmName} ({val3.FsmStates.Length} states)");
			}
			Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? ".");
			File.WriteAllText(outputPath, stringBuilder.ToString(), Encoding.UTF8);
		}

		private static void AnalyzeActionVariables(StringBuilder sb, FsmStateAction action, int actionIndex)
		{
			try
			{
				Type type = ((object)action).GetType();
				FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
				FieldInfo[] array = fields;
				foreach (FieldInfo fieldInfo in array)
				{
					object value = fieldInfo.GetValue(action);
					if (value != null)
					{
						string text = FormatValue(value, action);
						sb.AppendLine("        " + fieldInfo.Name + ": " + text);
					}
				}
			}
			catch (Exception ex)
			{
				sb.AppendLine("        (分析变量时出错: " + ex.Message + ")");
			}
		}

		private static string FormatValue(object value, FsmStateAction action)
		{
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			if (1 == 0)
			{
			}
			FsmFloat val = (FsmFloat)((value is FsmFloat) ? value : null);
			string result;
			if (val == null)
			{
				FsmInt val2 = (FsmInt)((value is FsmInt) ? value : null);
				if (val2 == null)
				{
					FsmBool val3 = (FsmBool)((value is FsmBool) ? value : null);
					if (val3 == null)
					{
						FsmString val4 = (FsmString)((value is FsmString) ? value : null);
						if (val4 == null)
						{
							FsmEvent val5 = (FsmEvent)((value is FsmEvent) ? value : null);
							if (val5 == null)
							{
								FsmGameObject val6 = (FsmGameObject)((value is FsmGameObject) ? value : null);
								if (val6 == null)
								{
									FsmOwnerDefault val7 = (FsmOwnerDefault)((value is FsmOwnerDefault) ? value : null);
									if (val7 == null)
									{
										FsmColor val8 = (FsmColor)((value is FsmColor) ? value : null);
										if (val8 == null)
										{
											FsmVector3 val9 = (FsmVector3)((value is FsmVector3) ? value : null);
											if (val9 == null)
											{
												FsmObject val10 = (FsmObject)((value is FsmObject) ? value : null);
												if (val10 == null)
												{
													GameObject val11 = (GameObject)((value is GameObject) ? value : null);
													result = ((val11 == null) ? $"{value} ({value.GetType().Name})" : ("GO:" + ((Object)val11).name));
												}
												else
												{
													result = (((NamedVariable)val10).UseVariable ? ("[Obj变量:" + ((NamedVariable)val10).Name + "]") : ("Obj:" + (((object)val10.Value)?.GetType().Name ?? "(null)")));
												}
											}
											else
											{
												result = (((NamedVariable)val9).UseVariable ? ("[V3变量:" + ((NamedVariable)val9).Name + "]") : $"({val9.Value.x:F2},{val9.Value.y:F2},{val9.Value.z:F2})");
											}
										}
										else
										{
											result = (((NamedVariable)val8).UseVariable ? ("[Color变量:" + ((NamedVariable)val8).Name + "]") : $"RGBA({val8.Value.r:F2},{val8.Value.g:F2},{val8.Value.b:F2},{val8.Value.a:F2})");
										}
									}
									else
									{
										result = FormatOwnerDefault(val7, action);
									}
								}
								else
								{
									result = (((NamedVariable)val6).UseVariable ? ("[GO变量:" + ((NamedVariable)val6).Name + "]") : (((Object)(object)val6.Value != (Object)null) ? ("GO:" + ((Object)val6.Value).name) : "GO:(null)"));
								}
							}
							else
							{
								result = "[Event:" + val5.Name + "]";
							}
						}
						else
						{
							result = (((NamedVariable)val4).UseVariable ? ("[String变量:" + ((NamedVariable)val4).Name + "]") : ("\"" + val4.Value + "\""));
						}
					}
					else
					{
						result = (((NamedVariable)val3).UseVariable ? ("[Bool变量:" + ((NamedVariable)val3).Name + "]") : $"{val3.Value}");
					}
				}
				else
				{
					result = (((NamedVariable)val2).UseVariable ? ("[Int变量:" + ((NamedVariable)val2).Name + "]") : $"{val2.Value}");
				}
			}
			else
			{
				result = (((NamedVariable)val).UseVariable ? ("[Float变量:" + ((NamedVariable)val).Name + "]") : $"{val.Value}");
			}
			if (1 == 0)
			{
			}
			return result;
		}

		private static string FormatOwnerDefault(FsmOwnerDefault od, FsmStateAction action)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: 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_000b: Invalid comparison between Unknown and I4
			try
			{
				OwnerDefaultOption ownerOption = od.OwnerOption;
				if ((int)ownerOption == 0)
				{
					return "[Owner]";
				}
				if (od.GameObject != null && (Object)(object)od.GameObject.Value != (Object)null)
				{
					return "GO:" + ((Object)od.GameObject.Value).name;
				}
				if (od.GameObject != null && ((NamedVariable)od.GameObject).UseVariable)
				{
					return "[GO变量:" + ((NamedVariable)od.GameObject).Name + "]";
				}
			}
			catch
			{
			}
			return "[OwnerDefault]";
		}

		private static string GetGameObjectPath(GameObject obj)
		{
			if ((Object)(object)obj == (Object)null)
			{
				return "(null)";
			}
			string text = ((Object)obj).name;
			Transform parent = obj.transform.parent;
			while ((Object)(object)parent != (Object)null)
			{
				text = ((Object)parent).name + "/" + text;
				parent = parent.parent;
			}
			return text;
		}

		private static string SanitizeFileName(string name)
		{
			char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
			return string.Join("_", name.Split(invalidFileNameChars, StringSplitOptions.RemoveEmptyEntries));
		}
	}
	public static class FsmStateBuilder
	{
		public struct StateDefinition
		{
			public string Name;

			public string Description;

			public StateDefinition(string name, string description = "")
			{
				Name = name;
				Description = description;
			}
		}

		public static FsmState CreateState(Fsm fsm, string name, string description = "")
		{
			//IL_0002: 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_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			return new FsmState(fsm)
			{
				Name = name,
				Description = description
			};
		}

		public static FsmState CreateState(PlayMakerFSM pmFsm, string name, string description = "")
		{
			return CreateState(pmFsm.Fsm, name, description);
		}

		public static FsmState CreateAndAddState(PlayMakerFSM pmFsm, string name, string description = "")
		{
			FsmState val = CreateState(pmFsm.Fsm, name, description);
			AddStateToFsm(pmFsm, val);
			return val;
		}

		public static void AddStateToFsm(PlayMakerFSM pmFsm, FsmState state)
		{
			List<FsmState> list = pmFsm.Fsm.States.ToList();
			list.Add(state);
			pmFsm.Fsm.States = list.ToArray();
		}

		public static void AddStatesToFsm(PlayMakerFSM pmFsm, params FsmState[] statesToAdd)
		{
			List<FsmState> list = pmFsm.Fsm.States.ToList();
			list.AddRange(statesToAdd);
			pmFsm.Fsm.States = list.ToArray();
		}

		public static FsmState[] CreateStates(Fsm fsm, params StateDefinition[] definitions)
		{
			FsmState[] array = (FsmState[])(object)new FsmState[definitions.Length];
			for (int i = 0; i < definitions.Length; i++)
			{
				array[i] = CreateState(fsm, definitions[i].Name, definitions[i].Description);
			}
			return array;
		}

		public static FsmState[] CreateStates(Fsm fsm, params (string name, string description)[] definitions)
		{
			FsmState[] array = (FsmState[])(object)new FsmState[definitions.Length];
			for (int i = 0; i < definitions.Length; i++)
			{
				array[i] = CreateState(fsm, definitions[i].name, definitions[i].description);
			}
			return array;
		}

		public static FsmState[] CreateAndAddStates(PlayMakerFSM pmFsm, params (string name, string description)[] definitions)
		{
			FsmState[] array = CreateStates(pmFsm.Fsm, definitions);
			AddStatesToFsm(pmFsm, array);
			return array;
		}

		public static FsmState? FindState(PlayMakerFSM pmFsm, string stateName)
		{
			string stateName2 = stateName;
			return ((IEnumerable<FsmState>)pmFsm.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState s) => s.Name == stateName2));
		}

		public static bool StateExists(PlayMakerFSM pmFsm, string stateName)
		{
			string stateName2 = stateName;
			return pmFsm.FsmStates.Any((FsmState s) => s.Name == stateName2);
		}

		public static FsmState GetOrCreateState(PlayMakerFSM pmFsm, string name, string description = "")
		{
			FsmState val = FindState(pmFsm, name);
			if (val != null)
			{
				return val;
			}
			return CreateAndAddState(pmFsm, name, description);
		}

		public static FsmTransition CreateFinishedTransition(FsmState targetState)
		{
			//IL_0001: 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_0012: 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_0026: Expected O, but got Unknown
			return new FsmTransition
			{
				FsmEvent = FsmEvent.Finished,
				toState = targetState.Name,
				toFsmState = targetState
			};
		}

		public static FsmTransition CreateTransition(FsmEvent fsmEvent, FsmState targetState)
		{
			//IL_0001: 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_000e: 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_0022: Expected O, but got Unknown
			return new FsmTransition
			{
				FsmEvent = fsmEvent,
				toState = targetState.Name,
				toFsmState = targetState
			};
		}

		public static void SetFinishedTransition(FsmState state, FsmState targetState)
		{
			state.Transitions = (FsmTransition[])(object)new FsmTransition[1] { CreateFinishedTransition(targetState) };
		}

		public static int ForceSetTransition(PlayMakerFSM pmFsm, string fromStateName, string eventName, string targetStateName)
		{
			FsmState val = FindState(pmFsm, fromStateName);
			FsmState val2 = FindState(pmFsm, targetStateName);
			if (val == null || val2 == null || val.Transitions == null)
			{
				return 0;
			}
			FsmTransition[] transitions = val.Transitions;
			foreach (FsmTransition val3 in transitions)
			{
				object obj;
				if (val3 == null)
				{
					obj = null;
				}
				else
				{
					FsmEvent fsmEvent = val3.FsmEvent;
					obj = ((fsmEvent != null) ? fsmEvent.Name : null);
				}
				if (!((string?)obj != eventName))
				{
					val3.toState = val2.Name;
					val3.toFsmState = val2;
					return 1;
				}
			}
			return 0;
		}

		public static void AddTransition(FsmState state, FsmTransition transition)
		{
			List<FsmTransition> list = state.Transitions?.ToList() ?? new List<FsmTransition>();
			list.Add(transition);
			state.Transitions = list.ToArray();
		}

		public static FsmEvent GetOrCreateEvent(PlayMakerFSM pmFsm, string eventName)
		{
			FsmEvent fsmEvent = FsmEvent.GetFsmEvent(eventName);
			List<FsmEvent> list = pmFsm.Fsm.Events.ToList();
			if (!list.Contains(fsmEvent))
			{
				list.Add(fsmEvent);
				pmFsm.Fsm.Events = list.ToArray();
			}
			return fsmEvent;
		}

		public static FsmEvent[] RegisterEvents(PlayMakerFSM pmFsm, params string[] eventNames)
		{
			List<FsmEvent> list = pmFsm.Fsm.Events.ToList();
			FsmEvent[] array = (FsmEvent[])(object)new FsmEvent[eventNames.Length];
			for (int i = 0; i < eventNames.Length; i++)
			{
				array[i] = FsmEvent.GetFsmEvent(eventNames[i]);
				if (!list.Contains(array[i]))
				{
					list.Add(array[i]);
				}
			}
			pmFsm.Fsm.Events = list.ToArray();
			return array;
		}

		public static void ReinitializeFsm(PlayMakerFSM pmFsm)
		{
		}

		public static void ReinitializeFsmVariables(PlayMakerFSM pmFsm)
		{
			pmFsm.FsmVariables.Init();
		}
	}
	internal static class Log
	{
		private static ManualLogSource? _logSource;

		private static string LogPrefix => $"[{Assembly.GetExecutingAssembly().GetName().Version}] ";

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object debug)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogDebug((object)(LogPrefix + debug));
			}
		}

		internal static void Info(object info)
		{
			if (Configuration.IsInitialized && Configuration.IsCompatDiagnosticsEnabled)
			{
				ManualLogSource? logSource = _logSource;
				if (logSource != null)
				{
					logSource.LogInfo((object)(LogPrefix + info));
				}
			}
		}

		internal static void InfoAlways(object info)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogInfo((object)(LogPrefix + info));
			}
		}

		internal static void Warn(object warning)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogWarning((object)(LogPrefix + warning));
			}
		}

		internal static void Error(object error)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogError((object)(LogPrefix + error));
			}
		}
	}
}
namespace Radiance.Patches
{
	[HarmonyPatch]
	internal static class FsmFixPatches
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayMakerFSM), "OnEnable")]
		private static void FixFsmEventHandlersOnEnable(PlayMakerFSM __instance)
		{
			if (!Configuration.IsModEnabled || (Object)(object)__instance == (Object)null)
			{
				return;
			}
			try
			{
				Fsm fsm = __instance.Fsm;
				if (fsm == null || fsm.States == null)
				{
					return;
				}
				FsmState[] states = fsm.States;
				foreach (FsmState val in states)
				{
					if (((val != null) ? val.Actions : null) == null)
					{
						continue;
					}
					FsmStateAction[] actions = val.Actions;
					foreach (FsmStateAction val2 in actions)
					{
						if (val2 != null)
						{
							try
							{
								val2.OnPreprocess();
							}
							catch
							{
							}
						}
					}
				}
				__instance.AddEventHandlerComponents();
			}
			catch (Exception ex)
			{
				Log.Debug("[FsmFixPatch] 修复 FSM 事件处理组件失败: " + ((Object)((Component)__instance).gameObject).name + "/" + __instance.FsmName + " - " + ex.Message);
			}
		}
	}
	[HarmonyPatch]
	internal static class GodfinderIconPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(ShowGodfinderIcon), "OnEnter")]
		private static bool SkipShowGodfinderIcon()
		{
			if (!Configuration.IsModEnabled)
			{
				return true;
			}
			return !RadianceSceneManager.IsInCustomScene;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(GodfinderIcon), "Show")]
		private static bool SkipHideGodfinderIcon()
		{
			if (!Configuration.IsModEnabled)
			{
				return true;
			}
			return !RadianceSceneManager.IsInCustomScene;
		}
	}
	[HarmonyPatch]
	internal static class MemoryScenePatches
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameManager), "IsMemoryScene", new Type[] { })]
		private static void ForceMemoryInCustomScene(ref bool __result)
		{
			if (Configuration.IsModEnabled && RadianceSceneManager.IsInCustomScene)
			{
				__result = true;
			}
		}
	}
	[HarmonyPatch]
	internal static class RadiancePatches
	{
		public delegate void FsmHandler(PlayMakerFSM fsm);

		private const string TargetGameObjectName = "Absolute Radiance";

		private const string TargetControlFsmName = "Control";

		private static readonly Dictionary<string, FsmHandler> FsmHandlers = new Dictionary<string, FsmHandler> { { "Control", HandleControlFsm } };

		[HarmonyPrefix]
		[HarmonyPatch(typeof(PlayMakerFSM), "Start")]
		private static void MountRadianceBehaviours(PlayMakerFSM __instance)
		{
			if (!Configuration.IsModEnabled || (Object)(object)__instance == (Object)null || ((Object)((Component)__instance).gameObject).name != "Absolute Radiance" || !FsmHandlers.TryGetValue(__instance.FsmName, out FsmHandler value))
			{
				return;
			}
			Log.Info("[RadiancePatch] 发现目标 FSM: Absolute Radiance/" + __instance.FsmName);
			try
			{
				value(__instance);
			}
			catch (Exception ex)
			{
				Log.Error("[RadiancePatch] 处理 FSM [" + __instance.FsmName + "] 失败: " + ex.Message);
			}
		}

		private static void HandleControlFsm(PlayMakerFSM fsm)
		{
			PlayMakerFSM fsm2 = fsm;
			SyncImmortalLightBehaviour(fsm2);
			SyncVanillaRadianceFixBehaviour(fsm2);
			MountBehaviour(fsm2, delegate(RadianceReturnOnDialogueBehavior b)
			{
				b.Initialize(fsm2);
			});
		}

		private static T MountBehaviour<T>(PlayMakerFSM fsm, Action<T>? initializer = null) where T : MonoBehaviour
		{
			T val = ((Component)fsm).gameObject.GetComponent<T>();
			if ((Object)(object)val == (Object)null)
			{
				val = ((Component)fsm).gameObject.AddComponent<T>();
				Log.Info("[RadiancePatch] 已挂载 " + typeof(T).Name + " 组件");
			}
			initializer?.Invoke(val);
			return val;
		}

		private static void UnmountBehaviour<T>(PlayMakerFSM fsm) where T : MonoBehaviour
		{
			T component = ((Component)fsm).gameObject.GetComponent<T>();
			if (!((Object)(object)component == (Object)null))
			{
				Object.Destroy((Object)(object)component);
				Log.Info("[RadiancePatch] 已卸载 " + typeof(T).Name + " 组件");
			}
		}

		private static void SyncImmortalLightBehaviour(PlayMakerFSM fsm)
		{
			PlayMakerFSM fsm2 = fsm;
			if (Configuration.IsImmortalLightEnabled)
			{
				MountBehaviour(fsm2, delegate(RadianceImmortalLightBehavior b)
				{
					b.Initialize(fsm2);
				});
			}
			else
			{
				UnmountBehaviour<RadianceImmortalLightBehavior>(fsm2);
			}
		}

		private static void SyncVanillaRadianceFixBehaviour(PlayMakerFSM fsm)
		{
			PlayMakerFSM fsm2 = fsm;
			if (Configuration.IsModEnabled && Configuration.EnableVanillaRadianceFix.Value)
			{
				MountBehaviour(fsm2, delegate(RadianceVanillaFixBehavior b)
				{
					b.Initialize(fsm2);
				});
			}
			else
			{
				UnmountBehaviour<RadianceVanillaFixBehavior>(fsm2);
			}
		}

		public static void RefreshFeatureBehavioursInScene()
		{
			PlayMakerFSM[] array = Object.FindObjectsByType<PlayMakerFSM>((FindObjectsInactive)1, (FindObjectsSortMode)0);
			PlayMakerFSM[] array2 = array;
			foreach (PlayMakerFSM val in array2)
			{
				if (!((Object)(object)val == (Object)null) && !(((Object)((Component)val).gameObject).name != "Absolute Radiance") && !(val.FsmName != "Control"))
				{
					SyncImmortalLightBehaviour(val);
					SyncVanillaRadianceFixBehaviour(val);
				}
			}
		}

		public static void RefreshImmortalLightBehavioursInScene()
		{
			RefreshFeatureBehavioursInScene();
		}

		public static void RegisterFsmHandler(string fsmName, FsmHandler handler)
		{
			if (FsmHandlers.ContainsKey(fsmName))
			{
				Log.Warn("[RadiancePatch] FSM 处理器 [" + fsmName + "] 已存在,将被覆盖");
			}
			FsmHandlers[fsmName] = handler;
			Log.Info("[RadiancePatch] 已注册 FSM 处理器: " + fsmName);
		}

		public static void UnregisterFsmHandler(string fsmName)
		{
			if (FsmHandlers.Remove(fsmName))
			{
				Log.Info("[RadiancePatch] 已注销 FSM 处理器: " + fsmName);
			}
		}
	}
	[HarmonyPatch]
	internal static class RadiantOrbFixPatches
	{
		private const string RadiantOrbName = "Radiant Orb";

		[HarmonyPostfix]
		[HarmonyPatch(typeof(SpawnObjectFromGlobalPool), "OnEnter")]
		private static void OnRadiantOrbSpawned(SpawnObjectFromGlobalPool __instance)
		{
			if (Configuration.IsVanillaRadianceFixEnabled)
			{
				FsmGameObject storeObject = __instance.storeObject;
				GameObject val = ((storeObject != null) ? storeObject.Value : null);
				if (!((Object)(object)val == (Object)null) && ((Object)val).name.Contains("Radiant Orb") && !((Object)(object)val.GetComponent<RadiantOrbDissipateFixBehavior>() != (Object)null))
				{
					val.AddComponent<RadiantOrbDissipateFixBehavior>();
				}
			}
		}
	}
	[HarmonyPatch]
	internal static class SceneTransitionPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(GameManager), "BeginSceneTransition")]
		private static bool InterceptSceneTransition(SceneLoadInfo info)
		{
			if (!Configuration.IsModEnabled)
			{
				return true;
			}
			if (!RadianceSceneManager.IsInCustomScene && info.SceneName == "GG_Radiance")
			{
				RadianceSceneManager instance = RadianceSceneManager.Instance;
				if ((Object)(object)instance != (Object)null)
				{
					Log.Info("[SceneTransitionPatch] 拦截 TransitionPoint 入场: GG_Radiance,转为 AssetBundle 加载");
					instance.EnterViaTransitionPoint();
					return false;
				}
			}
			if (RadianceSceneManager.IsInCustomScene)
			{
				RadianceSceneManager instance2 = RadianceSceneManager.Instance;
				if ((Object)(object)instance2 != (Object)null)
				{
					Log.Info("[SceneTransitionPatch] 自定义场景内场景转换: " + info.SceneName + ",执行清理");
					instance2.CleanupCustomScene();
				}
			}
			return true;
		}
	}
	[HarmonyPatch]
	internal static class Tk2dCollectionPatches
	{
		[HarmonyPrefix]
		[HarmonyPriority(800)]
		[HarmonyPatch(typeof(tk2dSpriteCollectionData), "Init")]
		private static void NamespaceBeforeInit(tk2dSpriteCollectionData __instance)
		{
			if (Configuration.IsModEnabled)
			{
				SkinCompatibilityService.TryNamespaceBeforeCollectionInit(__instance, "tk2d.Init.Prefix");
			}
		}
	}
}
namespace Radiance.Managers
{
	internal sealed class AssetManager : MonoBehaviour
	{
		[CompilerGenerated]
		private sealed class <EnsureBundleLoadedAsync>d__15 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public AssetManager <>4__this;

			private AssetBundleCreateRequest <req>5__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <EnsureBundleLoadedAsync>d__15(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<req>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if ((Object)(object)<>4__this._bundle != (Object)null)
					{
						if (string.IsNullOrEmpty(<>4__this._scenePathInBundle))
						{
							<>4__this.ResolveScenePath();
						}
						return false;
					}
					if (<>4__this._bundleBytes == null)
					{
						<>4__this._bundleBytes = <>4__this.GetEmbeddedBundleBytes();
					}
					if (<>4__this._bundleBytes == null)
					{
						Log.Error("[AssetManager] 无法获取嵌入的 radiance.bundle 字节数据");
						return false;
					}
					<req>5__1 = AssetBundle.LoadFromMemoryAsync(<>4__this._bundleBytes);
					<>2__current = <req>5__1;
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this._bundle = <req>5__1.assetBundle;
					if ((Object)(object)<>4__this._bundle == (Object)null)
					{
						Log.Error("[AssetManager] AssetBundle.LoadFromMemoryAsync 失败");
						return false;
					}
					<>4__this.ResolveScenePath();
					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();
			}
		}

		[CompilerGenerated]
		private sealed class <LoadRadianceSceneSingleAsync>d__13 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public AssetManager <>4__this;

			private AsyncOperation <op>5__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <LoadRadianceSceneSingleAsync>d__13(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<op>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = <>4__this.EnsureBundleLoadedAsync();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					if (string.IsNullOrEmpty(<>4__this._scenePathInBundle))
					{
						Log.Error("[AssetManager] scenePath 为空,无法加载 GG_Radiance 场景");
						return false;
					}
					Log.Info("[AssetManager] 加载场景(Single):" + <>4__this._scenePathInBundle);
					<op>5__1 = SceneManager.LoadSceneAsync(<>4__this._scenePathInBundle, (LoadSceneMode)0);
					if (<op>5__1 == null)
					{
						Log.Error("[AssetManager] SceneManager.LoadSceneAsync 返回 null");
						return false;
					}
					<>2__current = <op>5__1;
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					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();
			}
		}

		[CompilerGenerated]
		private sealed class <PreloadAllAssets>d__12 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public AssetManager <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PreloadAllAssets>d__12(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					if (<>4__this._isPreloaded || <>4__this._isPreloading)
					{
						goto IL_0064;
					}
					<>4__this._isPreloading = true;
					<>2__current = <>4__this.EnsureBundleLoadedAsync();
					<>1__state = 2;
					return true;
				case 1:
					<>1__state = -1;
					goto IL_0064;
				case 2:
					{
						<>1__state = -1;
						<>4__this._isPreloaded = true;
						<>4__this._isPreloading = false;
						Log.Info("[AssetManager] 预加载完成");
						return false;
					}
					IL_0064:
					if (<>4__this._isPreloading)
					{
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					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();
			}
		}

		private const string EmbeddedBundleName = "Radiance.Asset.radiance.bundle";

		private const string EmbeddedBundleSuffix = ".radiance.bundle";

		private byte[]? _bundleBytes;

		private AssetBundle? _bundle;

		private string? _scenePathInBundle;

		private bool _isPreloaded;

		private bool _isPreloading;

		public bool IsBundleLoaded => (Object)(object)_bundle != (Object)null;

		public bool IsPreloaded => _isPreloaded;

		private void Awake()
		{
			Log.Info("[AssetManager] 已初始化(Scene bundle 模式)");
		}

		[IteratorStateMachine(typeof(<PreloadAllAssets>d__12))]
		public IEnumerator PreloadAllAssets()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <PreloadAllAssets>d__12(0)
			{
				<>4__this = this
			};
		}

		[IteratorStateMachine(typeof(<LoadRadianceSceneSingleAsync>d__13))]
		public IEnumerator LoadRadianceSceneSingleAsync()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <LoadRadianceSceneSingleAsync>d__13(0)
			{
				<>4__this = this
			};
		}

		public void UnloadBundleKeepLoadedAssets()
		{
			if (!((Object)(object)_bundle == (Object)null))
			{
				_bundle.Unload(false);
				Resources.UnloadUnusedAssets();
				_bundle = null;
			}
		}

		[IteratorStateMachine(typeof(<EnsureBundleLoadedAsync>d__15))]
		private IEnumerator EnsureBundleLoadedAsync()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <EnsureBundleLoadedAsync>d__15(0)
			{
				<>4__this = this
			};
		}

		private void ResolveScenePath()
		{
			if ((Object)(object)_bundle == (Object)null)
			{
				return;
			}
			string[] allScenePaths = _bundle.GetAllScenePaths();
			if (allScenePaths == null || allScenePaths.Length == 0)
			{
				Log.Error("[AssetManager] radiance.bundle 内没有 Scene。请确认打包的是 Scene bundle(包含 GG_Radiance.unity)");
				return;
			}
			_scenePathInBundle = allScenePaths.FirstOrDefault((string p) => p.IndexOf("gg_radiance", StringComparison.OrdinalIgnoreCase) >= 0) ?? allScenePaths[0];
			Log.Info("[AssetManager] ScenePaths: " + string.Join(", ", allScenePaths));
			Log.Info("[AssetManager] 选用 scenePath: " + _scenePathInBundle);
		}

		private byte[]? GetEmbeddedBundleBytes()
		{
			try
			{
				Assembly executingAssembly = Assembly.GetExecutingAssembly();
				Stream manifestResourceStream = executingAssembly.GetManifestResourceStream("Radiance.Asset.radiance.bundle");
				if (manifestResourceStream == null)
				{
					string[] manifestResourceNames = executingAssembly.GetManifestResourceNames();
					string text = manifestResourceNames.FirstOrDefault((string n) => n.EndsWith(".radiance.bundle", StringComparison.OrdinalIgnoreCase));
					if (string.IsNullOrEmpty(text))
					{
						Log.Error("[AssetManager] 未找到嵌入资源:Radiance.Asset.radiance.bundle(也没有匹配 .radiance.bundle 的资源)");
						Log.Debug("[AssetManager] 可用嵌入资源:" + string.Join(", ", manifestResourceNames));
						return null;
					}
					manifestResourceStream = executingAssembly.GetManifestResourceStream(text);
					Log.Warn("[AssetManager] EmbeddedBundleName 不匹配,使用兜底资源名:" + text);
				}
				using (manifestResourceStream)
				{
					using MemoryStream memoryStream = new MemoryStream();
					manifestResourceStream.CopyTo(memoryStream);
					return memoryStream.ToArray();
				}
			}
			catch (Exception ex)
			{
				Log.Error("[AssetManager] 读取嵌入 bundle 失败:" + ex.Message);
				return null;
			}
		}

		private void OnDestroy()
		{
			if ((Object)(object)_bundle != (Object)null)
			{
				_bundle.Unload(false);
				_bundle = null;
			}
			_bundleBytes = null;
		}
	}
	public class RadianceSceneManager : MonoBehaviour, IWorldRumblePreventer
	{
		[CompilerGenerated]
		private sealed class <EnsureCustomSceneAudioState>d__55 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public RadianceSceneManager <>4__this;

			private GameManager <gm>5__1;

			private CustomSceneManager <sm>5__2;

			private CameraController <cameraController>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <EnsureCustomSceneAudioState>d__55(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<gm>5__1 = null;
				<sm>5__2 = null;
				<cameraController>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0099: Expected O, but got Unknown
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					<gm>5__1 = GameManager._instance;
					GameManager obj = <gm>5__1;
					<sm>5__2 = ((obj != null) ? obj.sm : null);
					<cameraController>5__3 = GameCameras.instance?.cameraController;
					if ((Object)(object)<cameraController>5__3 != (Object)null)
					{
						<cameraController>5__3.PositionToHero(true);
						<>2__current = (object)new WaitForSecondsRealtime(0.15f);
						<>1__state = 1;
						return true;
					}
					goto IL_00aa;
				}
				case 1:
					<>1__state = -1;
					goto IL_00aa;
				case 2:
					{
						<>1__state = -1;
						break;
					}
					IL_00aa:
					if ((Object)(object)<gm>5__1 == (Object)null || (Object)(object)<sm>5__2 == (Object)null || (Object)(object)<gm>5__1.AudioManager == (Object)null)
					{
						return false;
					}
					if (<sm>5__2.IsAudioSnapshotsApplied)
					{
						return false;
					}
					if (!HasCustomSceneAudioConfig(<sm>5__2))
					{
						<gm>5__1.AudioManager.StopAndClearMusic();
						<gm>5__1.AudioManager.StopAndClearAtmos();
						AudioManager.CustomSceneManagerReady();
						Log.Info("[RadianceSceneManager] 未检测到场景音频配置,已清理旧场景音乐/氛围");
						return false;
					}
					if ((Object)(object)<cameraController>5__3 != (Object)null)
					{
						<cameraController>5__3.PositionToHero(true);
						<>2__current = (object)new WaitForSecondsRealtime(0.15f);
						<>1__state = 2;
						return true;
					}
					break;
				}
				if (!<sm>5__2.IsAudioSnapshotsApplied)
				{
					AudioManager.CustomSceneManagerReady();
					Log.Warn("[RadianceSceneManager] 场景音频回调未触发,已执行 Ready 兜底");
				}
				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();
			}
		}

		[CompilerGenerated]
		private sealed class <EnterCustomSceneRoutine>d__41 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public string customSceneName;

			public Vector3 spawnPosition;

			public string targetSceneName;

			public RadianceSceneManager <>4__this;

			private HeroController <hero>5__1;

			private AssetManager <assetManager>5__2;

			private Exception <ex>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <EnterCustomSceneRoutine>d__41(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<hero>5__1 = null;
				<assetManager>5__2 = null;
				<ex>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0193: Unknown result type (might be due to invalid IL or missing references)
				//IL_019d: Expected O, but got Unknown
				//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0203: 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_021a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0225: 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_022e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0233: Unknown result type (might be due to invalid IL or missing references)
				//IL_023f: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					Log.Info("[RadianceSceneManager] 开始进入自定义场景: " + customSceneName);
					<hero>5__1 = HeroController.instance;
					if ((Object)(object)<hero>5__1 == (Object)null || (Object)(object)GameManager._instance == (Object)null)
					{
						Log.Error("[RadianceSceneManager] HeroController 或 GameManager 为空");
						return false;
					}
					<>4__this._targetSceneName = (string.IsNullOrEmpty(targetSceneName) ? "GG_Radiance" : targetSceneName);
					<>4__this.SaveReturnInfo();
					<>4__this.DisablePlayerControl();
					<>2__current = <>4__this.PlayEnterAnimation(<hero>5__1);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this._pendingCustomSceneName = customSceneName;
					if (<>4__this._targetSceneName == "GG_Radiance")
					{
						<assetManager>5__2 = ((Component)<>4__this).GetComponent<AssetManager>();
						if ((Object)(object)<assetManager>5__2 == (Object)null)
						{
							Log.Error("[RadianceSceneManager] AssetManager 未找到");
							<>4__this._pendingCustomSceneName = null;
							<>4__this.EnablePlayerControl();
							return false;
						}
						try
						{
							GameManager instance = GameManager._instance;
							if (instance != null)
							{
								PlayMakerFSM screenFader_fsm = instance.screenFader_fsm;
								if (screenFader_fsm != null)
								{
									screenFader_fsm.SendEvent("SCENE FADE OUT");
								}
							}
						}
						catch
						{
						}
						<>2__current = (object)new WaitForSeconds(0.5f);
						<>1__state = 2;
						return true;
					}
					try
					{
						GameManager._instance.BeginSceneTransition(new SceneLoadInfo
						{
							SceneName = <>4__this._targetSceneName,
							EntryGateName = "",
							HeroLeaveDirection = (GatePosition)5,
							EntryDelay = 0f,
							WaitForSceneTransitionCameraFade = true,
							Visualization = (SceneLoadVisualizations)0,
							AlwaysUnloadUnusedAssets = false
						});
						Log.Info("[RadianceSceneManager] 传送到: " + <>4__this._targetSceneName);
					}
					catch (Exception ex)
					{
						<ex>5__3 = ex;
						Log.Error("[RadianceSceneManager] 传送失败: " + <ex>5__3.Message);
						<>4__this._pendingCustomSceneName = null;
						<>4__this._targetSceneName = "";
						<>4__this.EnablePlayerControl();
					}
					break;
				case 2:
					<>1__state = -1;
					<>2__current = <assetManager>5__2.LoadRadianceSceneSingleAsync();
					<>1__state = 3;
					return true;
				case 3:
					<>1__state = -1;
					Log.Info("[RadianceSceneManager] 加载 GG_Radiance 成功");
					<assetManager>5__2 = null;
					break;
				}
				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();
			}
		}

		[CompilerGenerated]
		private sealed class <LoadFromTransitionPointRoutine>d__43 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public RadianceSceneManager <>4__this;

			private AssetManager <assetManager>5__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <LoadFromTransitionPointRoutine>d__43(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<assetManager>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<assetManager>5__1 = ((Component)<>4__this).GetComponent<AssetManager>();
					if ((Object)(object)<assetManager>5__1 == (Object)null)
					{
						Log.Error("[RadianceSceneManager] AssetManager 未找到");
						<>4__this._pendingCustomSceneName = null;
						<>4__this._targetSceneName = "";
						<>4__this.EnablePlayerControl();
						return false;
					}
					if (!<assetManager>5__1.IsPreloaded)
					{
						Log.Info("[RadianceSceneManager] 等待资源预加载...");
						goto IL_00c4;
					}
					goto IL_0130;
				case 1:
					<>1__state = -1;
					goto IL_00c4;
				case 2:
					{
						<>1__state = -1;
						Log.Info("[RadianceSceneManager] TransitionPoint 触发: GG_Radiance 加载成功");
						return false;
					}
					IL_00c4:
					if ((Object)(object)<assetManager>5__1 != (Object)null && !<assetManager>5__1.IsPreloaded)
					{
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					if ((Object)(object)<assetManager>5__1 == (Object)null)
					{
						Log.Error("[RadianceSceneManager] AssetManager 在等待预加载期间被销毁");
						<>4__this._pendingCustomSceneName = null;
						<>4__this._targetSceneName = "";
						<>4__this.EnablePlayerControl();
						return false;
					}
					goto IL_0130;
					IL_0130:
					<>2__current = <assetManager>5__1.LoadRadianceSceneSingleAsync();
					<>1__state = 2;
					return true;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <OnEnterTargetScene>d__46 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public RadianceSceneManager <>4__this;

			private TransitionPoint <existingTP>5__1;

			private Exception <ex>5__2;

			private PlayerData <pd>5__3;

			private Exception <ex>5__4;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <OnEnterTargetScene>d__46(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<existingTP>5__1 = null;
				<ex>5__2 = null;
				<pd>5__3 = null;
				<ex>5__4 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_017b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0185: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					ShaderCompatibilityService.ResetSession();
					SkinCompatibilityService.ResetSession();
					<>4__this.CapSilkForRadianceScene();
					<>4__this.HandleProblematicComponents();
					<>4__this.RemapAudioMixerGroups();
					<>4__this.CreateMinimalSceneManager();
					<>4__this.RefreshCustomSceneVisualState();
					<>4__this.SavePreMemoryState();
					<existingTP>5__1 = Object.FindAnyObjectByType<TransitionPoint>();
					if ((Object)(object)<existingTP>5__1 != (Object)null)
					{
						<existingTP>5__1.isInactive = true;
						((InteractableBase)<existingTP>5__1).Deactivate(false);
						Log.Info("[RadianceSceneManager] 已禁用 TransitionPoint 交互: " + ((Object)((Component)<existingTP>5__1).gameObject).name);
					}
					<>4__this.DisableInterferingRenderers();
					<>4__this.InitializeHeroAndCameraForCustomEntry();
					<>2__current = null;
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this.FixHK1LocalizationTexts();
					<>4__this.RunCompatibilityPass("pass1");
					<>4__this.RefreshCustomSceneVisualState();
					<>2__current = <>4__this.EnsureCustomSceneAudioState();
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					<>4__this.ForceApplyInitialCameraLocks();
					<>4__this.FadeSceneIn();
					<>2__current = (object)new WaitForSeconds(0.5f);
					<>1__state = 3;
					return true;
				case 3:
					<>1__state = -1;
					<>4__this.RunCompatibilityPass("pass2");
					<>4__this.EnablePlayerControl();
					((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.RunDeferredCompatibilityPass());
					try
					{
						GameManager instance = GameManager._instance;
						if (instance != null)
						{
							instance.FinishedEnteringScene();
						}
					}
					catch (Exception ex)
					{
						<ex>5__2 = ex;
						Log.Warn("[RadianceSceneManager] FinishedEnteringScene 失败: " + <ex>5__2.Message);
					}
					try
					{
						<pd>5__3 = PlayerData.instance;
						if (<pd>5__3 != null)
						{
							<pd>5__3.disablePause = false;
							<pd>5__3.isInvincible = false;
						}
						<pd>5__3 = null;
					}
					catch (Exception ex)
					{
						<ex>5__4 = ex;
						Log.Warn("[RadianceSceneManager] 重置 PlayerData 状态失败: " + <ex>5__4.Message);
					}
					Log.Info("[RadianceSceneManager] 自定义场景设置完成");
					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();
			}
		}

		[CompilerGenerated]
		private sealed class <OnReturnToOriginalScene>d__58 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public RadianceSceneManager <>4__this;

			private GameManager <gm>5__1;

			private float <timeout>5__2;

			private Exception <ex>5__3;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <OnReturnToOriginalScene>d__58(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<gm>5__1 = null;
				<ex>5__3 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				if (num != 0)
				{
					if (num != 1)
					{
						return false;
					}
					<>1__state = -1;
				}
				else
				{
					<>1__state = -1;
					<gm>5__1 = GameManager._instance;
					if (!((Object)(object)<gm>5__1 != (Object)null))
					{
						goto IL_0097;
					}
					<timeout>5__2 = 5f;
				}
				if (!<gm>5__1.hasFinishedEnteringScene && <timeout>5__2 > 0f)
				{
					<timeout>5__2 -= Time.deltaTime;
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				goto IL_0097;
				IL_0097:
				try
				{
					GameCameras instance = GameCameras.instance;
					if (instance != null)
					{
						instance.HUDIn();
					}
				}
				catch (Exception ex)
				{
					<ex>5__3 = ex;
					Log.Warn("[RadianceSceneManager] HUDIn 失败: " + <ex>5__3.Message);
				}
				<>4__this._hasSavedReturnInfo = false;
				Log.Info("[RadianceSceneManager] 已返回原场景");
				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();
			}
		}

		[CompilerGenerated]
		private sealed class <PlayEnterAnimation>d__65 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public HeroController hero;

			public RadianceSceneManager <>4__this;

			private tk2dSpriteAnimator <tk2dAnimator>5__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <PlayEnterAnimation>d__65(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<tk2dAnimator>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Expected O, but got Unknown
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cf: Expected O, but got Unknown
				//IL_0070: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<tk2dAnimator>5__1 = ((Component)hero).GetComponent<tk2dSpriteAnimator>();
					if ((Object)(object)<tk2dAnimator>5__1 != (Object)null)
					{
						<tk2dAnimator>5__1.Play("Abyss Kneel");
						<>2__current = (object)new WaitForSeconds(0.8f);
						<>1__state = 1;
						return true;
					}
					<>2__current = (object)new WaitForSeconds(1.8f);
					<>1__state = 3;
					return true;
				case 1:
					<>1__state = -1;
					<tk2dAnimator>5__1.Play("Kneel To Prostrate");
					<>2__current = (object)new WaitForSeconds(1f);
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					break;
				case 3:
					<>1__state = -1;
					break;
				}
				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();
			}
		}

		[CompilerGenerated]
		private sealed class <RunDeferredCompatibilityPass>d__47 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public RadianceSceneManager <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <RunDeferredCompatibilityPass>d__47(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(2f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					if (!IsInCustomScene)
					{
						return false;
					}
					<>4__this.RunCompatibilityPass("pass_deferred");
					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();
			}
		}

		private string _returnSceneName = "";

		private Vector3 _returnPosition;

		private bool _hasSavedReturnInfo;

		private string _targetSceneName = "";

		private string? _pendingCustomSceneName;

		private readonly List<TransitionPoint> _disabledTransitionPoints = new List<TransitionPoint>();

		private static readonly string[] GlobalRenderersToDisable = new string[1] { "_GameCameras/CameraParent/tk2dCamera/Masker Blackout" };

		private static readonly Dictionary<string, (string zh, string fallback)> HK1TextMapVanilla = new Dictionary<string, (string, string)>
		{
			{
				"!!Titles/ABSOLUTE_RADIANCE_MAIN!!",
				("无上辐光", "Radiance")
			},
			{
				"!!Titles/ABSOLUTE_RADIANCE_SUPER!!",
				("", "Absolute")
			}
		};

		private static readonly Dictionary<string, (string zh, string fallback)> HK1TextMapImmortalLight = new Dictionary<string, (string, string)>
		{
			{
				"!!Titles/ABSOLUTE_RADIANCE_MAIN!!",
				("永恒之光", "ImmortalLight")
			},
			{
				"!!Titles/ABSOLUTE_RADIANCE_SUPER!!",
				("直面", "Confront")
			}
		};

		private static readonly BindingFlags PrivateInstanceFlags = BindingFlags.Instance | BindingFlags.NonPublic;

		private static readonly FieldInfo? MusicCueField = typeof(CustomSceneManager).GetField("musicCue", PrivateInstanceFlags);

		private static readonly FieldInfo? AtmosCueField = typeof(CustomSceneManager).GetField("atmosCue", PrivateInstanceFlags);

		private static readonly FieldInfo? MusicSnapshotField = typeof(CustomSceneManager).GetField("musicSnapshot", PrivateInstanceFlags);

		private static readonly FieldInfo? OverrideColorSettingsField = typeof(CustomSceneManager).GetField("overrideColorSettings", PrivateInstanceFlags);

		private const int RadianceSilkCap = 9;

		private static readonly HashSet<string> BossLeftoverNames = new HashSet<string> { "Radiant Nail Comb(Clone)", "Radiant Beam R(Clone)", "Radiant Beam L(Clone)", "Radiant Nail(Clone)" };

		public static RadianceSceneManager? Instance { get; private set; }

		public static bool IsInCustomScene { get; private set; }

		public static string? CurrentCustomSceneName { get; private set; }

		public string ReturnSceneName => _returnSceneName;

		public bool HasReturnInfo => _hasSavedReturnInfo;

		bool IWorldRumblePreventer.AllowRumble => false;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
				SceneManager.activeSceneChanged += OnSceneChanged;
				Log.Info("[RadianceSceneManager] 初始化完成");
			}
			else
			{
				Object.Destroy((Object)(object)this);
			}
		}

		private void OnDestroy()
		{
			SceneManager.activeSceneChanged -= OnSceneChanged;
			Instance = null;
		}

		private void OnSceneChanged(Scene oldScene, Scene newScene)
		{
			if (((Scene)(ref newScene)).name == "Menu_Title" || ((Scene)(ref newScene)).name == "Quit_To_Menu")
			{
				ResetState();
				return;
			}
			if (!string.IsNullOrEmpty(_pendingCustomSceneName) && !string.IsNullOrEmpty(_targetSceneName) && ((Scene)(ref newScene)).name == _targetSceneName)
			{
				IsInCustomScene = true;
				CurrentCustomSceneName = _pendingCustomSceneName;
				_pendingCustomSceneName = null;
				AddWorldRumblePreventer();
				Log.Info("[RadianceSceneManager] 已进入目标场景: " + ((Scene)(ref newScene)).name);
				((MonoBehaviour)this).StartCoroutine(OnEnterTargetScene());
				return;
			}
			if (_hasSavedReturnInfo && ((Scene)(ref newScene)).name == _returnSceneName && !IsInCustomScene)
			{
				Log.Info("[RadianceSceneManager] 返回原场景: " + ((Scene)(ref newScene)).name);
				((MonoBehaviour)this).StartCoroutine(OnReturnToOriginalScene());
			}
			if (((Scene)(ref newScene)).name == "Belltown")
			{
				CreateBelltownTransitionPoint();
			}
		}

		private void AddWorldRumblePreventer()
		{
			WorldRumbleManager val = GameCameras.SilentInstance?.worldRumbleManager;
			if ((Object)(object)val != (Object)null)
			{
				val.AddPreventer((IWorldRumblePreventer)(object)this);
				Log.Info("[RadianceSceneManager] 已添加 WorldRumble 阻止器(GG_Radiance 无怪叫)");
			}
		}

		private void RemoveWorldRumblePreventer()
		{
			WorldRumbleManager val = GameCameras.SilentInstance?.worldRumbleManager;
			if ((Object)(object)val != (Object)null)
			{
				val.RemovePreventer((IWorldRumblePreventer)(object)this);
			}
		}

		private void ResetState()
		{
			RemoveWorldRumblePreventer();
			ShaderCompatibilityService.ResetSession();
			SkinCompatibilityService.ResetSession();
			IsInCustomScene = false;
			CurrentCustomSceneName = null;
			_pendingCustomSceneName = null;
			_hasSavedReturnInfo = false;
			_disabledTransitionPoints.Clear();
			Log.Info("[RadianceSceneManager] 状态已重置");
		}

		private void CreateBelltownTransitionPoint()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0029: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Expected O, but got Unknown
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: 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)
			GameObject val = new GameObject("door_radiance");
			val.SetActive(false);
			val.transform.position = new Vector3(50f, 40.7f, 0f);
			BoxCollider2D val2 = val.AddComponent<BoxCollider2D>();
			val2.size = new Vector2(2.13f, 0.2258f);
			((Collider2D)val2).isTrigger = true;
			TransitionPoint val3 = val.AddComponent<TransitionPoint>();
			val3.isADoor = true;
			val3.targetScene = "GG_Radiance";
			val3.entryPoint = "door_radiance";
			val3.nonHazardGate = true;
			val3.OnDoorEnter = new UnityEvent();
			((InteractableBase)val3).interactLabel = (PromptLabels)8;
			typeof(TransitionPoint).GetField("skipSceneMapCheck", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(val3, true);
			SceneManager.MoveGameObjectToScene(val, SceneManager.GetActiveScene());
			val.SetActive(true);
			Log.Info("[RadianceSceneManager] 已在 Belltown 创建传送点 door_radiance");
			((InteractableBase)val3).interactLabel = (PromptLabels)8;
			SetupBelltownTransitionDecor();
		}

		private void SetupBelltownTransitionDecor()
		{
			//IL_005d: Unknown res