Decompiled source of EngineerGaming v1.0.1

EngineerGaming/EngiGaming.dll

Decompiled 3 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
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("EngiGaming")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("EngiGaming")]
[assembly: AssemblyTitle("EngiGaming")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
[BepInPlugin("com.you.hudvideo", "HUD Video (Debuggable)", "0.1.1")]
public class EngiVideoPlugin : BaseUnityPlugin
{
	private GameObject _canvasGO;

	private VideoPlayer _videoPlayer;

	private RenderTexture _rt;

	private RawImage _rawImage;

	private AudioSource _audioSource;

	private bool _onLeft = true;

	private string _localRelativePath = Path.Combine("BepInEx", "plugins", "HudVideo", "video.mp4");

	private void Awake()
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)"HudVideoPlugin Awake");
		try
		{
			string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
			string text = Path.Combine(baseDirectory, _localRelativePath);
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Base dir: " + baseDirectory));
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Local video path: {text} exists: {File.Exists(text)}");
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("Error while checking path: " + ex));
		}
		CreateVideoHud();
		if ((Object)(object)_canvasGO != (Object)null)
		{
			_canvasGO.SetActive(false);
		}
		SceneManager.sceneLoaded += OnSceneLoaded;
	}

	private void CreateVideoHud()
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Expected O, but got Unknown
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Expected O, but got Unknown
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_0163: Unknown result type (might be due to invalid IL or missing references)
		//IL_0169: Expected O, but got Unknown
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0196: Expected O, but got Unknown
		//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c6: Expected O, but got Unknown
		//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dd: Expected O, but got Unknown
		//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f4: Expected O, but got Unknown
		//IL_030d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0317: Expected O, but got Unknown
		string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "video.mp4");
		if (!File.Exists(text))
		{
			((BaseUnityPlugin)this).Logger.LogError((object)"Файл video.mp4 не найден!");
			return;
		}
		_canvasGO = new GameObject("HUDVideoCanvas");
		Canvas obj = _canvasGO.AddComponent<Canvas>();
		obj.renderMode = (RenderMode)0;
		obj.sortingOrder = 9999;
		obj.pixelPerfect = false;
		_canvasGO.AddComponent<CanvasScaler>();
		_canvasGO.AddComponent<GraphicRaycaster>();
		Object.DontDestroyOnLoad((Object)(object)_canvasGO);
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Canvas created");
		GameObject val = new GameObject("VideoRaw");
		val.transform.SetParent(_canvasGO.transform, false);
		_rawImage = val.AddComponent<RawImage>();
		_rawImage.texture = (Texture)(object)_rt;
		((Graphic)_rawImage).color = Color.white;
		((Graphic)_rawImage).raycastTarget = false;
		RectTransform component = val.GetComponent<RectTransform>();
		component.anchorMin = new Vector2(0f, 0.5f);
		component.anchorMax = new Vector2(0f, 0.5f);
		component.pivot = new Vector2(0f, 0.5f);
		component.anchoredPosition = new Vector2(20f, 0f);
		((BaseUnityPlugin)this).Logger.LogInfo((object)"RawImage created (anchored bottom-center 270x480)");
		GameObject val2 = new GameObject("VideoPlayer");
		val2.transform.SetParent(_canvasGO.transform);
		_rt = new RenderTexture(360, 640, 0, (RenderTextureFormat)7);
		_rt.Create();
		_rawImage.texture = (Texture)(object)_rt;
		((Graphic)_rawImage).SetNativeSize();
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"RenderTexture created {((Texture)_rt).width}x{((Texture)_rt).height}");
		_videoPlayer = val2.AddComponent<VideoPlayer>();
		_videoPlayer.url = text;
		_videoPlayer.waitForFirstFrame = true;
		_videoPlayer.playOnAwake = false;
		_videoPlayer.isLooping = true;
		_videoPlayer.renderMode = (VideoRenderMode)2;
		_videoPlayer.targetTexture = _rt;
		_audioSource = val2.AddComponent<AudioSource>();
		_audioSource.playOnAwake = false;
		_audioSource.spatialBlend = 0f;
		_audioSource.volume = 1f;
		_videoPlayer.audioOutputMode = (VideoAudioOutputMode)1;
		_videoPlayer.SetTargetAudioSource((ushort)0, _audioSource);
		_videoPlayer.EnableAudioTrack((ushort)0, true);
		_videoPlayer.prepareCompleted += new EventHandler(OnVideoPrepared);
		_videoPlayer.loopPointReached += (EventHandler)delegate
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Video loopPointReached");
		};
		_videoPlayer.started += (EventHandler)delegate
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Video started");
		};
		_videoPlayer.sendFrameReadyEvents = true;
		_videoPlayer.frameReady += (FrameReadyEventHandler)delegate(VideoPlayer vp, long frameIdx)
		{
			if (frameIdx == 0L || frameIdx % 300 == 0L)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"frameReady: {frameIdx}");
			}
		};
		_videoPlayer.Play();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"HUD с видео успешно создан!");
	}

	private void OnVideoPrepared(VideoPlayer vp)
	{
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"OnVideoPrepared: isPrepared={vp.isPrepared}");
		if ((Object)(object)_rawImage != (Object)null)
		{
			float num = 640f;
			float num2 = 360f;
			((Graphic)_rawImage).rectTransform.sizeDelta = new Vector2(num2, num);
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Video size forced to {num2}x{num}");
			_rawImage.texture = (Texture)(object)_rt;
			((Graphic)_rawImage).SetAllDirty();
		}
		if (!_videoPlayer.isPlaying)
		{
			_videoPlayer.Play();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"VideoPlayer.Play() called (OnVideoPrepared)");
		}
		if ((Object)(object)_audioSource != (Object)null && !_audioSource.isPlaying)
		{
			_audioSource.Play();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"AudioSource.Play() called (OnVideoPrepared)");
		}
	}

	private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)("SceneLoaded: " + ((Scene)(ref scene)).name));
		if ((Object)(object)_canvasGO == (Object)null)
		{
			CreateVideoHud();
		}
		if (((Scene)(ref scene)).name.StartsWith("stage"))
		{
			_canvasGO.SetActive(true);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Canvas enabled (stage)");
			if ((Object)(object)_videoPlayer != (Object)null)
			{
				if (!_videoPlayer.isPrepared)
				{
					_videoPlayer.Prepare();
					((BaseUnityPlugin)this).Logger.LogInfo((object)"VideoPlayer.Prepare() called (scene load)");
				}
				else if (!_videoPlayer.isPlaying)
				{
					_videoPlayer.Play();
					((BaseUnityPlugin)this).Logger.LogInfo((object)"VideoPlayer.Play() called (scene load)");
				}
			}
		}
		else
		{
			_canvasGO.SetActive(false);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Canvas disabled (non-stage)");
		}
	}

	private void Update()
	{
		if (Input.GetKeyDown((KeyCode)288) && (Object)(object)_canvasGO != (Object)null)
		{
			bool flag = !_canvasGO.activeSelf;
			_canvasGO.SetActive(flag);
			((BaseUnityPlugin)this).Logger.LogInfo((object)("F7 toggled canvas: now " + (flag ? "enabled" : "disabled")));
			if (flag && (Object)(object)_videoPlayer != (Object)null && !_videoPlayer.isPlaying)
			{
				_videoPlayer.Play();
				((BaseUnityPlugin)this).Logger.LogInfo((object)"VideoPlayer.Play() forced by F7");
			}
		}
		if (Input.GetKeyDown((KeyCode)289))
		{
			_onLeft = !_onLeft;
			UpdateVideoPosition();
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Video side toggled: " + (_onLeft ? "Left" : "Right")));
		}
	}

	private void UpdateVideoPosition()
	{
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)_rawImage == (Object)null))
		{
			RectTransform rectTransform = ((Graphic)_rawImage).rectTransform;
			if (_onLeft)
			{
				rectTransform.anchorMin = new Vector2(0f, 0.5f);
				rectTransform.anchorMax = new Vector2(0f, 0.5f);
				rectTransform.pivot = new Vector2(0f, 0.5f);
				rectTransform.anchoredPosition = new Vector2(20f, 0f);
			}
			else
			{
				rectTransform.anchorMin = new Vector2(1f, 0.5f);
				rectTransform.anchorMax = new Vector2(1f, 0.5f);
				rectTransform.pivot = new Vector2(1f, 0.5f);
				rectTransform.anchoredPosition = new Vector2(-20f, 0f);
			}
		}
	}

	private void OnDestroy()
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)"HudVideoPlugin OnDestroy");
		SceneManager.sceneLoaded -= OnSceneLoaded;
		if ((Object)(object)_rt != (Object)null)
		{
			_rt.Release();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"RenderTexture released");
		}
	}
}