Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Custom Menu Videos v1.0.0
EmpressCustomMenuVideos.dll
Decompiled 2 months agousing System; 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 BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using UnityEngine.Video; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Empress")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EmpressCustomMenuVideos")] [assembly: AssemblyTitle("EmpressCustomMenuVideos")] [assembly: AssemblyVersion("1.0.0.0")] [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 EmpressCustomMenuVideos { [BepInPlugin("empress.repo.custommenuvideos", "EmpressCustomMenuVideos", "1.0.0")] public sealed class EmpressCustomMenuVideosPlugin : BaseUnityPlugin { internal const string PluginGuid = "empress.repo.custommenuvideos"; internal const string PluginName = "EmpressCustomMenuVideos"; internal const string PluginVersion = "1.0.0"; internal ConfigEntry<bool> EmpressEnabled; internal ConfigEntry<string> EmpressVideoFolder; internal ConfigEntry<bool> EmpressRandomizeVideos; internal ConfigEntry<bool> EmpressPickNewVideoEachMenuOpen; internal ConfigEntry<int> EmpressVideoVolume; internal ConfigEntry<bool> EmpressLoopVideo; internal ConfigEntry<int> EmpressBackgroundDim; internal ConfigEntry<bool> EmpressMuteVanillaMenuMusic; internal ConfigEntry<bool> EmpressMuteMenuSounds; internal ConfigEntry<bool> EmpressShowStatus; internal ConfigEntry<KeyCode> EmpressReloadKey; internal static EmpressCustomMenuVideosPlugin? Instance { get; private set; } internal ManualLogSource EmpressLog => ((BaseUnityPlugin)this).Logger; internal EmpressMenuVideoRuntime? EmpressRuntime { get; private set; } private void Awake() { //IL_0008: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown Instance = this; ((Object)this).hideFlags = (HideFlags)(((Object)this).hideFlags | 0x3D); GameObject gameObject = ((Component)this).gameObject; ((Object)gameObject).hideFlags = (HideFlags)(((Object)gameObject).hideFlags | 0x3D); EmpressEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "Enabled", true, "Allows Empress to replace the main-menu background with local MP4 files."); EmpressVideoFolder = ((BaseUnityPlugin)this).Config.Bind<string>("Empress Menu Video", "VideoFolder", Path.Combine(Paths.ConfigPath, "EmpressCustomMenuVideos"), "Folder where Empress looks for MP4 menu videos. The folder is created automatically."); EmpressRandomizeVideos = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "RandomizeVideos", true, "Randomizes between MP4 files when more than one video is in the folder."); EmpressPickNewVideoEachMenuOpen = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "PickNewVideoEachMenuOpen", true, "Picks a fresh random video whenever the main menu opens."); EmpressVideoVolume = ((BaseUnityPlugin)this).Config.Bind<int>("Empress Menu Video", "Volume", 60, new ConfigDescription("Video volume from 0 to 100.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); EmpressLoopVideo = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "LoopVideo", true, "Loops the menu video."); EmpressBackgroundDim = ((BaseUnityPlugin)this).Config.Bind<int>("Empress Menu Video", "BackgroundDim", 18, new ConfigDescription("Black overlay dim amount from 0 to 100 so the menu stays readable.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); EmpressMuteVanillaMenuMusic = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "MuteVanillaMenuMusic", true, "Mutes vanilla menu music while Empress menu video audio is active."); EmpressMuteMenuSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "MuteMenuSounds", true, "Mutes vanilla menu sounds while Empress menu video audio is active."); EmpressShowStatus = ((BaseUnityPlugin)this).Config.Bind<bool>("Empress Menu Video", "ShowStatus", true, "Shows a tiny Empress status tag while the menu video is loading or playing."); EmpressReloadKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Empress Controls", "ReloadKey", (KeyCode)289, "Reloads and re-picks the local MP4 menu video while on the main menu."); EmpressEnsureRuntime(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Empress custom menu videos are watching the title screen."); } internal EmpressMenuVideoRuntime EmpressEnsureRuntime() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown if ((Object)(object)EmpressRuntime != (Object)null) { return EmpressRuntime; } GameObject val = new GameObject("EmpressCustomMenuVideos.Runtime") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); EmpressRuntime = val.AddComponent<EmpressMenuVideoRuntime>(); return EmpressRuntime; } } internal sealed class EmpressMenuVideoRuntime : MonoBehaviour { private static readonly FieldRef<ConstantMusic, AudioSource?> EmpressConstantMusicAudioSourceRef = AccessTools.FieldRefAccess<ConstantMusic, AudioSource>("audioSource"); private static readonly FieldRef<LevelMusic, AudioSource?> EmpressLevelMusicAudioSourceRef = AccessTools.FieldRefAccess<LevelMusic, AudioSource>("audioSource"); private readonly Dictionary<int, float> empressMutedAudioVolumes = new Dictionary<int, float>(); private readonly HashSet<string> empressFailedVideos = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private Canvas? empressCanvas; private RawImage? empressVideoImage; private RawImage? empressDimImage; private Text? empressStatusText; private AspectRatioFitter? empressAspectFitter; private VideoPlayer? empressVideoPlayer; private AudioSource? empressAudioSource; private RenderTexture? empressRenderTexture; private GameObject? empressCameraPlane; private MeshRenderer? empressCameraPlaneRenderer; private Material? empressVideoMaterial; private string empressRequestedVideoPath = string.Empty; private string empressActivePlayableUrl = string.Empty; private string empressLastFolderPath = string.Empty; private string empressStatus = "Empress video idle"; private bool empressWasInMenu; private bool empressForcePickNew; private float empressNextFolderScanTime; private int empressRequestVersion; private static EmpressCustomMenuVideosPlugin? EmpressPlugin => EmpressCustomMenuVideosPlugin.Instance; private static string EmpressDefaultVideoFolder => Path.Combine(Paths.ConfigPath, "EmpressCustomMenuVideos"); private void Awake() { ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); EmpressEnsureVisuals(); } private void OnEnable() { SceneManager.sceneLoaded += EmpressOnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= EmpressOnSceneLoaded; EmpressSetVisible(visible: false); EmpressRestoreVanillaMenuAudio(); } private void Update() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if ((Object)(object)empressPlugin == (Object)null) { return; } EmpressEnsureVisuals(); bool flag = empressPlugin.EmpressEnabled.Value && EmpressIsMainMenuActive(); if (Input.GetKeyDown(empressPlugin.EmpressReloadKey.Value)) { EmpressResetVideoState("Empress reload requested"); empressForcePickNew = true; empressNextFolderScanTime = 0f; } if (flag != empressWasInMenu) { empressWasInMenu = flag; if (!flag) { EmpressSetVisible(visible: false); EmpressSetCameraPlaneVisible(visible: false); EmpressPauseVideo(); EmpressRestoreVanillaMenuAudio(); } else { EmpressSetVisible(visible: true); EmpressSetCameraPlaneVisible(visible: true); empressForcePickNew = empressPlugin.EmpressPickNewVideoEachMenuOpen.Value; empressNextFolderScanTime = 0f; } } if (!flag) { EmpressUpdateStatusVisual(); return; } EmpressSetVisible(visible: true); EmpressUpdateVolume(); EmpressUpdateDim(); EmpressUpdateAspect(); EmpressUpdateCameraPlane(); EmpressUpdateStatusVisual(); string text = EmpressResolveVideoFolder(empressPlugin); if (!string.Equals(text, empressLastFolderPath, StringComparison.OrdinalIgnoreCase)) { empressLastFolderPath = text; EmpressResetVideoState("Empress folder changed"); empressForcePickNew = true; empressFailedVideos.Clear(); empressNextFolderScanTime = 0f; } bool flag2 = !string.IsNullOrWhiteSpace(empressRequestedVideoPath) && !File.Exists(empressRequestedVideoPath); bool flag3 = string.IsNullOrWhiteSpace(empressRequestedVideoPath) || string.IsNullOrWhiteSpace(empressActivePlayableUrl); if (empressForcePickNew || flag2 || (Time.unscaledTime >= empressNextFolderScanTime && flag3)) { empressNextFolderScanTime = Time.unscaledTime + 2f; string text2 = EmpressPickMenuVideo(empressPlugin, text, empressForcePickNew || flag2); empressForcePickNew = false; if (string.IsNullOrWhiteSpace(text2)) { empressStatus = "Empress needs MP4s in " + text; EmpressPauseVideo(); return; } if (!string.Equals(text2, empressRequestedVideoPath, StringComparison.OrdinalIgnoreCase)) { EmpressPlayVideoPath(text2); return; } } if ((Object)(object)empressVideoPlayer != (Object)null && !string.IsNullOrWhiteSpace(empressActivePlayableUrl) && !empressVideoPlayer.isPlaying && empressVideoPlayer.isPrepared) { empressVideoPlayer.Play(); } } private void LateUpdate() { EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if (!((Object)(object)empressPlugin == (Object)null) && empressPlugin.EmpressEnabled.Value && EmpressIsMainMenuActive()) { EmpressMuteVanillaMenuAudio(); } } private void EmpressOnSceneLoaded(Scene scene, LoadSceneMode mode) { empressWasInMenu = false; empressStatus = "Empress scene changed"; EmpressRestoreVanillaMenuAudio(); } private void EmpressEnsureVisuals() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Expected O, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Expected O, but got Unknown //IL_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Expected O, but got Unknown //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Expected O, but got Unknown if (!((Object)(object)empressCanvas != (Object)null) || !((Object)(object)empressVideoPlayer != (Object)null) || !((Object)(object)empressVideoImage != (Object)null)) { GameObject val = new GameObject("EmpressCustomMenuVideos.Canvas") { hideFlags = (HideFlags)61 }; val.transform.SetParent(((Component)this).transform, false); empressCanvas = val.AddComponent<Canvas>(); empressCanvas.renderMode = (RenderMode)0; empressCanvas.sortingOrder = -30000; val.AddComponent<CanvasScaler>().uiScaleMode = (ScaleMode)1; GameObject val2 = new GameObject("Empress Video Surface") { hideFlags = (HideFlags)61 }; val2.transform.SetParent(val.transform, false); empressVideoImage = val2.AddComponent<RawImage>(); ((Graphic)empressVideoImage).raycastTarget = false; ((Graphic)empressVideoImage).color = Color.white; empressAspectFitter = val2.AddComponent<AspectRatioFitter>(); empressAspectFitter.aspectMode = (AspectMode)4; RectTransform rectTransform = ((Graphic)empressVideoImage).rectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; GameObject val3 = new GameObject("Empress Pink Black Dim") { hideFlags = (HideFlags)61 }; val3.transform.SetParent(val.transform, false); empressDimImage = val3.AddComponent<RawImage>(); ((Graphic)empressDimImage).raycastTarget = false; empressDimImage.texture = (Texture)(object)Texture2D.whiteTexture; RectTransform rectTransform2 = ((Graphic)empressDimImage).rectTransform; rectTransform2.anchorMin = Vector2.zero; rectTransform2.anchorMax = Vector2.one; rectTransform2.offsetMin = Vector2.zero; rectTransform2.offsetMax = Vector2.zero; GameObject val4 = new GameObject("Empress Status Brand") { hideFlags = (HideFlags)61 }; val4.transform.SetParent(val.transform, false); empressStatusText = val4.AddComponent<Text>(); ((Graphic)empressStatusText).raycastTarget = false; empressStatusText.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); empressStatusText.fontSize = 16; empressStatusText.alignment = (TextAnchor)8; ((Graphic)empressStatusText).color = new Color(1f, 0.55f, 0.82f, 0.92f); RectTransform rectTransform3 = ((Graphic)empressStatusText).rectTransform; rectTransform3.anchorMin = Vector2.zero; rectTransform3.anchorMax = Vector2.one; rectTransform3.offsetMin = new Vector2(16f, 12f); rectTransform3.offsetMax = new Vector2(-18f, -12f); empressRenderTexture = new RenderTexture(1920, 1080, 0, (RenderTextureFormat)0) { name = "EmpressCustomMenuVideos.RenderTexture" }; empressRenderTexture.Create(); empressVideoImage.texture = (Texture)(object)empressRenderTexture; EmpressEnsureCameraPlane(); GameObject val5 = new GameObject("Empress Video Player") { hideFlags = (HideFlags)61 }; val5.transform.SetParent(((Component)this).transform, false); empressAudioSource = val5.AddComponent<AudioSource>(); empressAudioSource.playOnAwake = false; empressAudioSource.loop = true; empressAudioSource.spatialBlend = 0f; empressVideoPlayer = val5.AddComponent<VideoPlayer>(); empressVideoPlayer.playOnAwake = false; empressVideoPlayer.renderMode = (VideoRenderMode)2; empressVideoPlayer.targetTexture = empressRenderTexture; empressVideoPlayer.audioOutputMode = (VideoAudioOutputMode)1; empressVideoPlayer.controlledAudioTrackCount = 1; empressVideoPlayer.EnableAudioTrack((ushort)0, true); empressVideoPlayer.SetTargetAudioSource((ushort)0, empressAudioSource); empressVideoPlayer.waitForFirstFrame = true; empressVideoPlayer.skipOnDrop = true; empressVideoPlayer.prepareCompleted += new EventHandler(EmpressVideoPrepared); empressVideoPlayer.errorReceived += new ErrorEventHandler(EmpressVideoError); EmpressSetVisible(visible: false); } } private string EmpressResolveVideoFolder(EmpressCustomMenuVideosPlugin plugin) { string text = plugin.EmpressVideoFolder.Value.Trim(); if (string.IsNullOrWhiteSpace(text)) { text = EmpressDefaultVideoFolder; } try { if (!Path.IsPathRooted(text)) { text = Path.Combine(Paths.ConfigPath, text); } string fullPath = Path.GetFullPath(text); Directory.CreateDirectory(fullPath); return fullPath; } catch { Directory.CreateDirectory(EmpressDefaultVideoFolder); empressStatus = "Empress used the default video folder"; return EmpressDefaultVideoFolder; } } private string? EmpressPickMenuVideo(EmpressCustomMenuVideosPlugin plugin, string folder, bool preferDifferent) { string[] array; try { Directory.CreateDirectory(folder); array = (from path in Directory.GetFiles(folder, "*.mp4", SearchOption.TopDirectoryOnly).Where(File.Exists) where !empressFailedVideos.Contains(path) select path).OrderBy<string, string>((string path) => path, StringComparer.OrdinalIgnoreCase).ToArray(); } catch { empressStatus = "Empress could not scan the video folder"; return null; } if (array.Length == 0 && empressFailedVideos.Count > 0) { empressFailedVideos.Clear(); return null; } if (array.Length == 0) { return null; } if (array.Length == 1) { return array[0]; } if (!plugin.EmpressRandomizeVideos.Value) { return array[0]; } string[] array2 = (preferDifferent ? array.Where((string path) => !string.Equals(path, empressRequestedVideoPath, StringComparison.OrdinalIgnoreCase)).ToArray() : array); if (array2.Length == 0) { array2 = array; } return array2[Random.Range(0, array2.Length)]; } private void EmpressPlayVideoPath(string videoPath) { if (!((Object)(object)empressVideoPlayer == (Object)null)) { empressRequestVersion++; empressRequestedVideoPath = Path.GetFullPath(videoPath); empressActivePlayableUrl = new Uri(empressRequestedVideoPath).AbsoluteUri; empressStatus = "Empress is preparing " + Path.GetFileName(empressRequestedVideoPath); empressVideoPlayer.Stop(); empressVideoPlayer.source = (VideoSource)1; empressVideoPlayer.url = empressActivePlayableUrl; empressVideoPlayer.isLooping = EmpressPlugin?.EmpressLoopVideo.Value ?? false; empressVideoPlayer.Prepare(); } } private void EmpressResetVideoState(string status) { empressRequestVersion++; empressRequestedVideoPath = string.Empty; empressActivePlayableUrl = string.Empty; empressStatus = status; if ((Object)(object)empressVideoPlayer != (Object)null) { empressVideoPlayer.Stop(); } } private void EmpressVideoPrepared(VideoPlayer source) { if (!((Object)(object)source != (Object)(object)empressVideoPlayer) && !string.IsNullOrWhiteSpace(empressActivePlayableUrl) && !(source.url != empressActivePlayableUrl)) { empressStatus = "Empress menu video online"; EmpressUpdateAspect(); EmpressUpdateVolume(); source.Play(); } } private void EmpressVideoError(VideoPlayer source, string message) { if (!((Object)(object)source != (Object)(object)empressVideoPlayer)) { if (!string.IsNullOrWhiteSpace(empressRequestedVideoPath)) { empressFailedVideos.Add(empressRequestedVideoPath); } empressStatus = "Empress video error: " + message; empressRequestedVideoPath = string.Empty; empressActivePlayableUrl = string.Empty; empressForcePickNew = true; empressNextFolderScanTime = Time.unscaledTime + 1.5f; } } private void EmpressPauseVideo() { if ((Object)(object)empressVideoPlayer != (Object)null && empressVideoPlayer.isPlaying) { empressVideoPlayer.Pause(); } if ((Object)(object)empressAudioSource != (Object)null && empressAudioSource.isPlaying) { empressAudioSource.Pause(); } } private void EmpressSetVisible(bool visible) { if ((Object)(object)empressCanvas != (Object)null) { ((Behaviour)empressCanvas).enabled = visible; } EmpressSetCameraPlaneVisible(visible); } private void EmpressUpdateVolume() { if (!((Object)(object)empressAudioSource == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { empressAudioSource.volume = (float)Mathf.Clamp(EmpressPlugin.EmpressVideoVolume.Value, 0, 100) / 100f; empressAudioSource.loop = EmpressPlugin.EmpressLoopVideo.Value; } } private void EmpressUpdateDim() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)empressDimImage == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { float num = (float)Mathf.Clamp(EmpressPlugin.EmpressBackgroundDim.Value, 0, 100) / 100f; ((Graphic)empressDimImage).color = new Color(0.02f, 0f, 0.018f, num); } } private void EmpressUpdateAspect() { if (!((Object)(object)empressAspectFitter == (Object)null) && !((Object)(object)empressVideoPlayer == (Object)null) && empressVideoPlayer.width != 0 && empressVideoPlayer.height != 0) { empressAspectFitter.aspectRatio = (float)empressVideoPlayer.width / (float)empressVideoPlayer.height; } } private void EmpressEnsureCameraPlane() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown if (!((Object)(object)empressCameraPlane != (Object)null)) { empressCameraPlane = new GameObject("Empress Video Camera Backdrop") { hideFlags = (HideFlags)61 }; empressCameraPlane.transform.SetParent(((Component)this).transform, false); empressCameraPlane.AddComponent<MeshFilter>().mesh = EmpressCreateQuadMesh(); empressCameraPlaneRenderer = empressCameraPlane.AddComponent<MeshRenderer>(); Shader val = Shader.Find("Unlit/Texture") ?? Shader.Find("UI/Default") ?? Shader.Find("Sprites/Default"); empressVideoMaterial = new Material(val) { hideFlags = (HideFlags)61, mainTexture = (Texture)(object)empressRenderTexture }; ((Renderer)empressCameraPlaneRenderer).sharedMaterial = empressVideoMaterial; EmpressSetCameraPlaneVisible(visible: false); } } private void EmpressUpdateCameraPlane() { //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) EmpressEnsureCameraPlane(); if ((Object)(object)empressCameraPlane == (Object)null || (Object)(object)empressVideoMaterial == (Object)null || (Object)(object)empressVideoPlayer == (Object)null) { return; } Camera val = EmpressResolveMenuCamera(); if ((Object)(object)val == (Object)null) { EmpressSetCameraPlaneVisible(visible: false); return; } empressVideoMaterial.mainTexture = (Texture)(object)empressRenderTexture; float num = Mathf.Max(val.nearClipPlane + 0.65f, 1.25f); float num2 = 2f * num * Mathf.Tan(val.fieldOfView * 0.5f * (MathF.PI / 180f)); float num3 = ((val.aspect > 0.01f) ? val.aspect : Mathf.Max(1f, (float)Screen.width / (float)Mathf.Max(1, Screen.height))); float num4 = num2 * num3; float num5 = 1.7777778f; if (empressVideoPlayer.width != 0 && empressVideoPlayer.height != 0) { num5 = (float)empressVideoPlayer.width / (float)empressVideoPlayer.height; } float num6 = num4; float num7 = num2; if (num5 > num3) { num6 = num2 * num5; } else { num7 = num4 / Mathf.Max(0.01f, num5); } Transform transform = ((Component)val).transform; Transform transform2 = empressCameraPlane.transform; transform2.position = transform.position + transform.forward * num; transform2.rotation = transform.rotation; transform2.localScale = new Vector3(num6, num7, 1f); EmpressSetCameraPlaneVisible((Object)(object)empressCanvas != (Object)null && ((Behaviour)empressCanvas).enabled); } private void EmpressSetCameraPlaneVisible(bool visible) { if ((Object)(object)empressCameraPlaneRenderer != (Object)null) { ((Renderer)empressCameraPlaneRenderer).enabled = visible; } } private static Camera? EmpressResolveMenuCamera() { if ((Object)(object)CameraNoPlayerTarget.instance != (Object)null) { Camera component = ((Component)CameraNoPlayerTarget.instance).GetComponent<Camera>(); if ((Object)(object)component != (Object)null && ((Behaviour)component).enabled) { return component; } } Camera main = Camera.main; if ((Object)(object)main != (Object)null && ((Behaviour)main).enabled) { return main; } return ((IEnumerable<Camera>)Object.FindObjectsOfType<Camera>()).FirstOrDefault((Func<Camera, bool>)((Camera camera) => (Object)(object)camera != (Object)null && ((Behaviour)camera).enabled)); } private static Mesh EmpressCreateQuadMesh() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) Mesh val = new Mesh { name = "EmpressMenuVideoQuad" }; val.vertices = (Vector3[])(object)new Vector3[4] { new Vector3(-0.5f, -0.5f, 0f), new Vector3(0.5f, -0.5f, 0f), new Vector3(-0.5f, 0.5f, 0f), new Vector3(0.5f, 0.5f, 0f) }; val.uv = (Vector2[])(object)new Vector2[4] { new Vector2(0f, 0f), new Vector2(1f, 0f), new Vector2(0f, 1f), new Vector2(1f, 1f) }; val.triangles = new int[6] { 0, 2, 1, 2, 3, 1 }; val.RecalculateBounds(); return val; } private void EmpressUpdateStatusVisual() { if (!((Object)(object)empressStatusText == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { bool flag = EmpressPlugin.EmpressShowStatus.Value && (Object)(object)empressCanvas != (Object)null && ((Behaviour)empressCanvas).enabled; ((Behaviour)empressStatusText).enabled = flag; if (flag) { empressStatusText.text = "EMPRESS MENU VIDEO // " + empressStatus; } } } private void EmpressMuteVanillaMenuAudio() { EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if ((Object)(object)empressPlugin == (Object)null || (!empressPlugin.EmpressMuteVanillaMenuMusic.Value && !empressPlugin.EmpressMuteMenuSounds.Value)) { EmpressRestoreVanillaMenuAudio(); return; } if (empressPlugin.EmpressMuteMenuSounds.Value) { AudioSource[] array = Object.FindObjectsOfType<AudioSource>(); foreach (AudioSource source in array) { EmpressMuteAudioSource(source); } } if (empressPlugin.EmpressMuteVanillaMenuMusic.Value) { ConstantMusic[] array2 = Object.FindObjectsOfType<ConstantMusic>(); foreach (ConstantMusic val in array2) { AudioSource source2 = EmpressConstantMusicAudioSourceRef.Invoke(val); EmpressMuteAudioSource(source2); } LevelMusic[] array3 = Object.FindObjectsOfType<LevelMusic>(); foreach (LevelMusic val2 in array3) { AudioSource source3 = EmpressLevelMusicAudioSourceRef.Invoke(val2); EmpressMuteAudioSource(source3); } } } private void EmpressMuteAudioSource(AudioSource? source) { if (!((Object)(object)source == (Object)null) && source != empressAudioSource) { int instanceID = ((Object)source).GetInstanceID(); if (!empressMutedAudioVolumes.ContainsKey(instanceID)) { empressMutedAudioVolumes[instanceID] = source.volume; } source.volume = 0f; } } private void EmpressRestoreVanillaMenuAudio() { if (empressMutedAudioVolumes.Count == 0) { return; } AudioSource[] array = Object.FindObjectsOfType<AudioSource>(); foreach (AudioSource val in array) { int instanceID = ((Object)val).GetInstanceID(); if (empressMutedAudioVolumes.TryGetValue(instanceID, out var value)) { val.volume = value; } } empressMutedAudioVolumes.Clear(); } private static bool EmpressIsMainMenuActive() { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)RunManager.instance != (Object)null && (Object)(object)RunManager.instance.levelCurrent != (Object)null && (Object)(object)RunManager.instance.levelMainMenu != (Object)null) { return RunManager.instance.levelCurrent == RunManager.instance.levelMainMenu; } if ((Object)(object)MainMenuOpen.instance != (Object)null || (Object)(object)Object.FindObjectOfType<MainMenuOpen>() != (Object)null) { return true; } Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name.IndexOf("menu", StringComparison.OrdinalIgnoreCase) >= 0) { return (Object)(object)MenuManager.instance != (Object)null; } return false; } } }