using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
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: AssemblyTitle("HelmetCamera")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HelmetCamera")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("b99c4d46-5f13-47b3-a5af-5e3f37772e77")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace HelmetCamera
{
[BepInPlugin("RickArg.lethalcompany.helmetcameras", "Helmet_Cameras", "2.1.5")]
public class PluginInit : BaseUnityPlugin
{
public static Harmony _harmony;
public static ConfigEntry<int> config_isHighQuality;
public static ConfigEntry<int> config_renderDistance;
public static ConfigEntry<int> config_cameraFps;
private void Awake()
{
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
config_isHighQuality = ((BaseUnityPlugin)this).Config.Bind<int>("MONITOR QUALITY", "monitorResolution", 0, "Low FPS affection. High Quality mode. 0 - vanilla (48x48), 1 - vanilla+ (128x128), 2 - mid quality (256x256), 3 - high quality (512x512), 4 - Very High Quality (1024x1024)");
config_renderDistance = ((BaseUnityPlugin)this).Config.Bind<int>("MONITOR QUALITY", "renderDistance", 20, "Low FPS affection. Render distance for helmet camera.");
config_cameraFps = ((BaseUnityPlugin)this).Config.Bind<int>("MONITOR QUALITY", "cameraFps", 30, "Very high FPS affection. FPS for helmet camera. To increase YOUR fps, you should low cameraFps value.");
_harmony = new Harmony("HelmetCamera");
_harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Helmet_Cameras is loaded with version 2.1.5!");
((BaseUnityPlugin)this).Logger.LogInfo((object)"--------Helmet camera patch done.---------");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "RickArg.lethalcompany.helmetcameras";
public const string PLUGIN_NAME = "Helmet_Cameras";
public const string PLUGIN_VERSION = "2.1.5";
}
public class Plugin : MonoBehaviour
{
private RenderTexture renderTexture;
private bool isMonitorChanged = false;
private GameObject helmetCameraNew;
private bool isSceneLoaded = false;
private bool isCoroutineStarted = false;
private int currentTransformIndex;
private int resolution = 0;
private int renderDistance = 50;
private float cameraFps = 30f;
private float elapsed;
private void Awake()
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Expected O, but got Unknown
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Expected O, but got Unknown
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
resolution = PluginInit.config_isHighQuality.Value;
renderDistance = PluginInit.config_renderDistance.Value;
cameraFps = PluginInit.config_cameraFps.Value;
switch (resolution)
{
case 0:
renderTexture = new RenderTexture(48, 48, 24);
break;
case 1:
renderTexture = new RenderTexture(128, 128, 24);
break;
case 2:
renderTexture = new RenderTexture(256, 256, 24);
break;
case 3:
renderTexture = new RenderTexture(512, 512, 24);
break;
case 4:
renderTexture = new RenderTexture(1024, 1024, 24);
break;
}
}
public void Start()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
isCoroutineStarted = false;
while ((Object)(object)helmetCameraNew == (Object)null)
{
helmetCameraNew = new GameObject("HelmetCamera");
}
Scene activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name != "MainMenu")
{
activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name != "InitScene")
{
activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name != "InitSceneLaunchOptions")
{
isSceneLoaded = true;
Debug.Log((object)"[HELMET_CAMERAS] Starting coroutine...");
((MonoBehaviour)this).StartCoroutine(LoadSceneEnter());
return;
}
}
}
isSceneLoaded = false;
isMonitorChanged = false;
}
private IEnumerator LoadSceneEnter()
{
Debug.Log((object)"[HELMET_CAMERAS] 5 seconds for init mode... Please wait...");
yield return (object)new WaitForSeconds(5f);
isCoroutineStarted = true;
if ((Object)(object)GameObject.Find("Environment/HangarShip/Cameras/ShipCamera") != (Object)null)
{
Debug.Log((object)"[HELMET_CAMERAS] Ship camera founded...");
if (!isMonitorChanged)
{
((Renderer)GameObject.Find("Environment/HangarShip/ShipModels2b/MonitorWall/Cube").GetComponent<MeshRenderer>()).materials[2].mainTexture = ((Renderer)GameObject.Find("Environment/HangarShip/ShipModels2b/MonitorWall/Cube.001").GetComponent<MeshRenderer>()).materials[2].mainTexture;
((Renderer)GameObject.Find("Environment/HangarShip/ShipModels2b/MonitorWall/Cube.001").GetComponent<MeshRenderer>()).materials[2].mainTexture = (Texture)(object)renderTexture;
helmetCameraNew.AddComponent<Camera>();
((Behaviour)helmetCameraNew.GetComponent<Camera>()).enabled = false;
helmetCameraNew.GetComponent<Camera>().targetTexture = renderTexture;
helmetCameraNew.GetComponent<Camera>().cullingMask = 20649983;
helmetCameraNew.GetComponent<Camera>().farClipPlane = renderDistance;
helmetCameraNew.GetComponent<Camera>().nearClipPlane = 0.55f;
isMonitorChanged = true;
Debug.Log((object)"[HELMET_CAMERAS] Monitors were changed...");
Debug.Log((object)"[HELMET_CAMERAS] Turning off vanilla internal ship camera");
((Behaviour)GameObject.Find("Environment/HangarShip/Cameras/ShipCamera").GetComponent<Camera>()).enabled = false;
}
}
}
public void Update()
{
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: 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_0268: 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_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
bool flag = isSceneLoaded && isCoroutineStarted;
if (flag && StartOfRound.Instance.localPlayerController.isInHangarShipRoom)
{
helmetCameraNew.SetActive(true);
elapsed += Time.deltaTime;
if (elapsed > 1f / cameraFps)
{
elapsed = 0f;
((Behaviour)helmetCameraNew.GetComponent<Camera>()).enabled = true;
}
else
{
((Behaviour)helmetCameraNew.GetComponent<Camera>()).enabled = false;
}
GameObject val = GameObject.Find("Environment/HangarShip/ShipModels2b/MonitorWall/Cube.001/CameraMonitorScript");
currentTransformIndex = val.GetComponent<ManualCameraRenderer>().targetTransformIndex;
TransformAndName val2 = val.GetComponent<ManualCameraRenderer>().radarTargets[currentTransformIndex];
if (!val2.isNonPlayer)
{
try
{
helmetCameraNew.transform.SetPositionAndRotation(val2.transform.Find("ScavengerModel/metarig/CameraContainer/MainCamera/HelmetLights").position + new Vector3(0f, 0f, 0f), val2.transform.Find("ScavengerModel/metarig/CameraContainer/MainCamera/HelmetLights").rotation * Quaternion.Euler(0f, 0f, 0f));
DeadBodyInfo[] array = Object.FindObjectsOfType<DeadBodyInfo>();
for (int i = 0; i < array.Length; i++)
{
if (array[i].playerScript.playerUsername == val2.name)
{
helmetCameraNew.transform.SetPositionAndRotation(((Component)array[i]).gameObject.transform.Find("spine.001/spine.002/spine.003").position, ((Component)array[i]).gameObject.transform.Find("spine.001/spine.002/spine.003").rotation * Quaternion.Euler(0f, 0f, 0f));
}
}
return;
}
catch (NullReferenceException)
{
Debug.Log((object)"[HELMET_CAMERAS] ERROR NULL REFERENCE");
return;
}
}
helmetCameraNew.transform.SetPositionAndRotation(val2.transform.position + new Vector3(0f, 1.6f, 0f), val2.transform.rotation * Quaternion.Euler(0f, -90f, 0f));
}
else if (flag && !StartOfRound.Instance.localPlayerController.isInHangarShipRoom)
{
helmetCameraNew.SetActive(false);
}
}
}
}
namespace HelmetCamera.Patches
{
[HarmonyPatch]
internal class HelmetCamera
{
public static void InitCameras()
{
GameObject val = GameObject.Find("Environment/HangarShip/Cameras/ShipCamera");
val.AddComponent<Plugin>();
}
[HarmonyPatch(typeof(StartOfRound), "Start")]
[HarmonyPostfix]
public static void InitCamera(ref ManualCameraRenderer __instance)
{
InitCameras();
}
}
}